Portál AbcLinuxu, 10. května 2025 08:01

Dotaz: Import dat z XML do MySQL v PHP

1.8.2009 08:36 Open Mage | skóre: 24 | Lom
Import dat z XML do MySQL v PHP
Přečteno: 1673×
Odpovědět | Admin

Ahoj, řeším situaci kdy mám cca 30MB XML soubor s tisíci dat a potřebuji jej rozparsovat, některá data upravit a následně - ideálně v jednom cyklu - naimportovat do předpřipravené tabulky v MySQL. Teoreticky nějaké cesty vím, ale řeším správnou cestu z pohledu výkonu (operační paměť, konektivita k DB, doba trvání skriptu, ...). Mohl by někdo prosím poradit jaký zvolit pro takový moloch nejvýkonnější XML parser (DOM v PHP5, SimpleXML, SAX ...) ? Další otázkou je zda se u každého importováného záznamu připojovat k MySQL zvlášť - nevím jak by to zvládlo perzistentní připojení - a taky zda se vyplatí využít prepared statements? Spíš takový průzkum jak na to jít opravdu nejlépe, aby nestrádal server, DB, ... Ještě poznámka : omezení hostingu jsou - max. execution time 360s a memory limit 75 - obávám se, že na jeden zátah to ani neudělám.

Díky

Stanislav Puffler, DiS. specialista na internet marketing a ecommerce www.openmage.cz tel. 773 565 747
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Heron avatar 1.8.2009 09:39 Heron | skóre: 53 | blog: root_at_heron | Olomouc
Rozbalit Rozbalit vše Re: Import dat z XML do MySQL v PHP
Odpovědět | | Sbalit | Link | Blokovat | Admin
Na tohle SAX, DOM se ti nevleze do paměti. Pak persistentní spojení (nové spojení trvá dlouho), určitě PreparedStatement (ať to DB nemusí pořád kompilovat a optimalizovat) a ještě je vhodné to insertovat po více záznamech (100 naráz, 500 naráz, to chce vyzkoušet). Po jednom to bude trvat dlouho. 1000x záznamů není tak moc, to je do těch 6 minut musí vejít.

Kolik dat v té tabulce je teď? Možná by stálo za to dropnout před tímto insertem indexy a pak je opět vytvořit.
Heron
1.8.2009 10:58 Open Mage | skóre: 24 | Lom
Rozbalit Rozbalit vše Re: Import dat z XML do MySQL v PHP

Osobně se mi pracuje líp s DOM, ale vim, že na tyhle věci optimální neni, tak sáhnu po SAXu. Po více záznamech to nějak určitě udělám, zkusim najít optimální počet. Naštěstí to bude takhle fungovat denně (resp. nočně :) a ta tabulka bude prázdná a vždycky se naplní od nuly znovu (přírustkově-úbytková metoda v tomhle případě není možná asi), tak s tím by problém být neměl. Záznamů bude něco kolem 13 tisíc, tak snad to do těch 6 minut projde.

Stanislav Puffler, DiS. specialista na internet marketing a ecommerce www.openmage.cz tel. 773 565 747
MaT avatar 1.8.2009 11:14 MaT | skóre: 28
Rozbalit Rozbalit vše Re: Import dat z XML do MySQL v PHP

Mě ještě napadlo si něco na ten import pouštět někde u sebe, na vlastním stroji, kde by člověk nemusel řešit maximální dobu běhu a memory limit. Pak z toho udělat normální SQL dump a ten přenést na hosting. Ale když teď píšete, že se to bude dělat nějak pravidelně...

Open source software for open minded people. :-)
1.8.2009 11:18 Open Mage | skóre: 24 | Lom
Rozbalit Rozbalit vše Re: Import dat z XML do MySQL v PHP

Taky jsem si s touhle myšlenkou pohrával, ale právě ta denní pravidelnost vyžaduje prostě server + CRON a nestarat se o to.

Stanislav Puffler, DiS. specialista na internet marketing a ecommerce www.openmage.cz tel. 773 565 747
Heron avatar 1.8.2009 12:39 Heron | skóre: 53 | blog: root_at_heron | Olomouc
Rozbalit Rozbalit vše Re: Import dat z XML do MySQL v PHP
Ano, s DOMem se pracuje lépe, ale ten strom se nevleze do toho tvého memory limitu. A IMHO i kdyby se vlezl, tak na toto je i tak SAX vhodnější ("sekvenční" čtení celého souboru). Je totiž mnohem rychlejší.

13k záznamů by neměl být problém. V javě by to bylo do 30s hotové. Tady už jen záleží na rychlosti MySQL DB, ale s tím ty nic neuděláš, to záleží na hostingu.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.