Witam,
próbuję odczytać dane produktów otrzymanych w postaci linku do pliku xml. Stąd dotarłem do https://www.linkedin.com/pulse/parsing-huge-xml-files-php-bartosz-pacho%C5%82ek
Z tego artykułu wynika, że w moim przypadku najwydajniejsze (tak wywnioskowałem, aby oszczędzić zasoby) będzie wykorzystanie XMLReader
+ SimpleXML
, więc:
ini_set('memory_limit', '-1');
$xml = new XMLReader;
$xml->open('https://url_to_xml.xml');
while ($xml->name !== 'product') {
$xml->read();
}
$data = new stdClass();
$data->products = [];
$productIndex = 0;
do {
$product = simplexml_load_string($xml->readOuterXml());
$data->products[$productIndex]['id'] = $product->id;
$data->products[$productIndex]['name'] = $product->name;
// dalsze własności produktu
$productIndex++;
} while ($xml->next('product'));
$xml->close();
Link, który otrzymałem jest do pliku XML - po pobraniu (nie będę go pobierał za każdym razem, więc forma zostaje jako URL) -
ma rozmiar ok. 400MB, a zawiera około 40.000 produktów.
Wykorzystując kod, w postaci wyżej podanej wciąż jest to czas ładowania rzędu 2 minut. Stąd nasuwa się myśl - jeśli będzie tych produktów nawet 500.000, plik będzie znacznie większych rozmiarów, czas się wydłuży.
Jak rozwiązujecie taką kwestię? Czy ten czas, przy takich rozmiarach i rekordach jest "w normie"? Czy coś jeszcze powinno zostać uwzględnione?
Pozdrawiam