![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 573 Pomógł: 6 Dołączył: 21.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
Chciałbym opracować synchronizacje produktów Baselinker do sklepu.
Coś w tym temacie zacząłem pisać, klasa pobierająca produkty z Baselinker: https://dbm.org.pl/__TESTY/synchronization.php i po chwili nasuwa się pytanie, a co kiedy tych produktów będą tysiące? Przydałoby się pobierać, wysyłać, przetwarzać dane porcjami i trafiam na hasło chunkowanie, pamięć, optymalizacja itp. Czy ktoś widział, czy ktoś wie o Chunkowaniu dla rozpoczętej w opracowaniu metody: function getProductsFromBaselinker(), jeżeli uda się pobrać produkty to ładuje wszystko do tablicy, potem przepuszczać tysiące produktów przez pętle np. foreach - to nie jest najlepszy pomysł... i co dalej, może są dostępne w Sieci przykłady podobnych integracji synchronizujących produkty? Na przykładzie chyba byłoby najprościej dojść co jak. Ten post edytował Malinaa 4.06.2024, 17:32:14 -------------------- I welcome you on the Internet >>> Design by Malina
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 395 Pomógł: 71 Dołączył: 15.07.2014 Ostrzeżenie: (0%) ![]() ![]() |
Zazwyczaj, dobrze zrobione API, konsumuje taki parametr jak limit. Zawsze możesz z niego skorzystać wg własnej, wymyślonej logiki. Sprawdź dokumentację BL.
Poza tym, warto też wrzuć taki import na kolejkę i skonsumować niezależnie w runtime'ie. |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 573 Pomógł: 6 Dołączył: 21.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
Pomysł na synchronizacje krok po kroku z chunkowaniem i limitem, może tak:
Kod public function synchronizationDataChunks() { $dataTotal = 1000; $chunkSize = 100; $offset = 0; while ($offset < $dataTotal) { $products = $this->fetchProducts($offset, $chunkSize); // Etap 1. Pobieranie danych // Etap 2. Kontrola. $this->saveProducts($products); // Etap 3. Zapis danych $offset += $chunkSize; echo "Synchronized products from offset $offset"; } echo "Synchronization complete!"; } Etapy: 1. Pobieramy dane z Baselinkera. 2. Dochodzi etap Kontroli, gdzie mam plik .csv z nowymi produktami i/lub nowymi cenami starych produktów. Odbiorca życzy sobie mieć kontrolę nad plikiem .csv i móc aktualizować ceny produktów w pliku - do zrobienia podstrona do edycji pliku .csv Pytanie: aby móc zgrać produkty Baselinkera z produktami w pliku .csv, chyba muszę zapisać pobrane produkty? Gdzie je zapisać do pliku, może do bazy, ale są to takie tymczasowe, chwilowe dane i tworzyć dla tych danych specjalnie tabele w bazie? 3. Zapis danych. Kiedy pobiorę dane z Baselinkera, następnie zaktualizuje te dane z danymi w pliku .csv można przejść do synchronizacji i zapisać dane w sklepie. Na tę chwilę taki jest plan. Cytat Poza tym, warto też wrzuć taki import na kolejkę i skonsumować niezależnie w runtime'ie. Import na kolejkę i runtime - tak teoretycznie kumam o co chodzi, ale to trzeba byłoby zrobić w moim $this->fetchProducts() czyli nie ma opcji pójść na łatwiznę i pobrać sobie wszystko (tysiące produktów) na raz, gdzieś je zapisać (tylko gdzie) do edycji z danymi pliku .csv, a po edycji eksportować pomysłem na chunkowanie synchronizationDataChunks(), eksport i zapis porcjami. Ten post edytował Malinaa 6.06.2024, 08:55:54 -------------------- I welcome you on the Internet >>> Design by Malina
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 15.05.2025 - 04:38 |