Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Synchronizacja produktów Baselinker do sklepu
Forum PHP.pl > Forum > PHP
Malinaa
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.
Salvation
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.
Malinaa
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.