Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Synchronizacja produktów Baselinker do sklepu, Chunkowanie, pamięć, optymalizacja kodu
Malinaa
post 4.06.2024, 17:29:01
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
Go to the top of the page
+Quote Post
Salvation
post 5.06.2024, 09:17:01
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.
Go to the top of the page
+Quote Post
Malinaa
post 6.06.2024, 08:52:26
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
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: 15.05.2025 - 04:38