Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL]Najbardziej optymalne wyszukiwanie
Puchatek
post 18.01.2021, 17:39:24
Post #1





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 4.07.2019

Ostrzeżenie: (0%)
-----


Witam,
posiadam tabelę w mysql z produktami do sklepu internetowego. Tabela zawiera około 60 tysięcy rekordów. Jeden rekord to jeden produkt.
Raz dziennie odbywają się aktualizacje cen oraz stanów magazynowych. Dane te pobierane są z kilkunastu plików XML. W tabeli jest informacja, w którym pliku znajdują się dane dotyczące produktu.

Szukam zatem najbardziej optymalnego rozwiązania do aktualizacji stanów magazynowych oraz cen.

Pierwsza metoda, której próbowałem to oczywiście przemielenie wszystkich plików XML od góry do dołu oraz UPDATE na tabeli dla każdego produktu.
I mam tutaj pierwsze pytanie - czy bardziej optymalnym rozwiązaniem byłoby w pierwszej kolejności wyszukanie produktu w tabeli w celu porównania danych (czy dane produktu w XMLu uległy zmianie względem tabeli) a później aktualizacja, czy jednak stosowanie UPDATE przy każdym produkcie?

Druga metoda to osobna tabela do stanów i cen. Uprzednio czyszczę całą tabelę a później wrzucam na nowo każdy rekord z XMLa.
Byłoby to dobre rozwiązanie, jednak znacząco utrudnia mi pracę nad listowaniem produktów w danej kategorii. Dajmy na to mam kategorię, do której należy 7000 produktów. Spowalnia to poruszanie się po witrynie ponieważ za każdym razem muszą być wyszukiwane ceny w tabeli liczącej 60tys rekordów, dlatego ta metoda odpada.

I tutaj rodzi się kolejne pytanie, czy może jest jakiś inny sposób, który pozwoliłby mi zaktualizować te dane w tabeli z produktami raz, dobrze i sprawnie?
Go to the top of the page
+Quote Post
trueblue
post 18.01.2021, 22:56:36
Post #2





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Nie musisz porównywać danych z XML z danymi z bazy. Po prostu zapisuj przy produkcie hash z zawartości pliku XML i porównaj go następnym razem.

Jeśli przy 60 tys. rekordów zauważasz spowolnienie zapytań, to albo te są nieoptymalne, albo struktura bazy danych (indeksy).

Jeszcze inne metoda, to aktualizacja danych produktu, kiedy następuje żądanie o jego dane, np. wyświetlenie strony produktu. Wtedy musiałbyś porównywać hash jak w metodzie wyżej. No i wada taka, że gdybyś to zrobił tylko przy wyświetlaniu podstrony, to mógłbyś mieć nieaktualne dane, jeśli podstrona nie byłaby wyświetlona. Inny problem, to przy dużym ruchu na stronie, następowałaby aktualizacja wielu produktów jednocześnie.


--------------------
Go to the top of the page
+Quote Post
LowiczakPL
post 19.01.2021, 15:53:16
Post #3





Grupa: Zarejestrowani
Postów: 531
Pomógł: 55
Dołączył: 3.01.2016
Skąd: Łowicz

Ostrzeżenie: (0%)
-----


Dla 60k rekordów masz 60 zapytań Update w paczkach po 1000 rekordów, ta magiczna liczba była dla mnie najbardziej optymalna liczą, którą kiedyś testowałem. Nie wiem jak teraz może się coś zmieniło w bazach.

Taka aktualizacja powinna trwać około sekundy nikt tego nie zauważy.

Aktualizowałem w ten sposób tabele po kilka milionów rekordów ale wtedy trwało to kilkadziesiąt sekund.

Ten post edytował LowiczakPL 19.01.2021, 15:56:54


--------------------
Szukam zleceń Symfony, Laravel, Back-End, Front-End, PHP, MySQL ...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 17:26