jaskowice1 2017-05-24 21:48:00 +4
Mireczki mam pytanie, zrobiłem importer w PHP, który obsługiwał małe pliki XML, teraz przyszedł plik który ma 30 000 linii i niestety ten importer nie wyrabia (dużo akcji się dzieje na każdym rekordzie), a robiłem to tym sposobem https://www.w3schools.com/php/php_xml_simplexml_read.asp

Niestety teraz już wiem, że nie jest to najoptymalniejszy sposób do parsowania XML i muszę podzielić sobie te pliki na mniejsze i wtedy uruchamiać mój importer - moje pytanie brzmi: Jaką metodę polecacie do dzielenia plików na mniejsze? I w jaki sposób uruchamiać takie coś?

#webdev #php #xml #parser
wojtek656 2017-05-24 21:54:06 +1
@jaskowice1: buforowanie ( ͡° ͜ʖ ͡°)
xetrov 2017-05-24 22:27:23 +1
@jaskowice1: link wyżej masz odpowiedź: https://www.w3schools.com/php/php_xml_parsers.asp

Tree-based parsers holds the entire document in Memory and transforms the XML document into a Tree structure. It analyzes the whole document, and provides access to the Tree elements (DOM).
Example of tree-based parsers:

SimpleXML
DOM

Event-based parsers do not hold the entire document in Memory, instead, they read in one node at a time and allow you to interact with in real time. Once you move onto the next node, the old one is thrown away.

Example of event-based parsers:

XMLReader
XML Expat Parser
singollo 2017-05-24 22:27:13 +0
@jaskowice1: nadal musiałbyś odczytać cały plik xml, żeby go podzielić na mniejsze. Nie tędy droga.
lu43n 2017-05-24 23:50:44 +0
@jaskowice1 Przerzucić to na pythona i uruchamiać skrypt przez konsole lub w django przez celery
jaskowice1 [OP] 2017-05-25 06:35:04 +0
@singollo: odczyt takiego pliku i podzielenie go nie będzie problemem

@lu43n: jakbym miał tyle czasu to bym tak zrobił, ale go nie mam :) i szukam alternatywnego rozwiązania
Benzen 2017-05-25 06:39:23 +0
D.....s 2017-05-25 06:40:24 +0
@jaskowice1 łap https://github.com/prewk/XmlStreamer a do tego dodaj XMLReader phpowy. U mnie daje rade z parsowaniem 1-2gb xmli na 5 procesach potomnych i wszystko pamieciowo się mieści