Autor Zpráva
martni
Profil
ahoj! vytvarim skript pro import dat do db z jednoho xml souboru ( velikost souboru je zhruba 3mb), je to soubor s produkty do e-shopu. Parsuji pomoci simple xml. Vse je ok, az na to, ze vic jak 3000 produktu parser neprekousne, pote zahlasi

Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 154 bytes) 

a skonci.

Nemate nekdo obecne rady, jak snizit pametovou narocnost skriptu?
musim tam vyuzivat iconv pro prekodovani, dale nekolik ( asi 8 foreach), tak 5 ruznych poli, a spoustu mysql_query()....
WertriK
Profil
http://interval.cz/clanky/usetrete-az-80-datoveho-prenosu/
Hugo
Profil
WertriK

On se ale pta na snizeni pametove narocnosti skriptu ne na datovy tok.
WanTo
Profil
Dají se v PHP smazat nepotřebné proměnné (nějaká obdoba delete z C++?)?
Leo
Profil
"Dají se v PHP smazat nepotřebné proměnné (nějaká obdoba delete z C++?)?"

unset

Jinak otazka na usporu pameti je hodne siroka, a bez popisu konkretnich popisovanych postupu tezka rada. PHP ma i fce na zjisteni aktualne alokovane pameti, takze to chce ladit, ladit, ladit. Leo
Hugo
Profil
Nekde (ted to bohuzel nemuzu najit) jsem cetl, ze v nekterych pripadech unset spis pamet zahlti nez uvolni. Ale nevim jak moc je to pravda (osobne doufam, ze to tak neni :-)).
Anonymní
Profil *
martni

Zkuste XML soubor parsovat sekvenčně - po částech. Dále by bylo dobré se zamyslet nad strukturou XML souboru a jeho minimalizací.
Acci
Profil
A co takhle zvětšit memory limit pro PHP?
Leo
Profil
"Dále by bylo dobré se zamyslet nad strukturou XML souboru a jeho minimalizací."

Napriklad misto xml pouzivat stare dobre csv. Leo
jozob
Profil
Ďalšia možnosť je použiť lepšiu metódu ako server-side skript (C++, Delphi alebo niečo podobné).

A Acciho nápad je asi najednoduchšie riešenie.
Leo
Profil
"A Acciho nápad je asi najednoduchšie riešenie."

Bohuzel na naproste vetsine sdilenych webhostingu prakticky nepouzitelne - proste vam to nenastavi, to by kazdy chtel aspon 100 MB :-) Leo
jozob
Profil
Leo
Nevidím dôvod, prečo sa viazať na hosting. K dispozícii mám predsa vlastný komp. Tam si môžem nastaviť čo chcem.
Leo
Profil
"Nevidím dôvod, prečo sa viazať na hosting. K dispozícii mám predsa vlastný komp. Tam si môžem nastaviť čo chcem."

To muzete. Otazka je, jestli to k necemu bude ostatnim (rec byla o e-shopu :-) Leo
jozob
Profil
Leo
Samozrejme. Nevidím dôvod, prečo by som nemohol urobiť databázu na localhoste a skopírovať ju na hosting.
jozob
Profil
BTW: robil som presne to isté. Od zákazníka som dostal 10MB Excel dáta a šup s tým do e-shopu. Malý rodziel bol v tom, že som to exportoval do CSV a importoval pomocou PhpMyAdmina.
martni
Profil
uff, ani jsem necekal, ze se tady rozpouta takova horliva diskuse....mockrat dekuji!

Dále by bylo dobré se zamyslet nad strukturou XML souboru a jeho minimalizací.

jde o nabidku zbozi, kdy jeden vetsi e-shop poskytuje sortiment pro mensi e-shop (sortiment poskytuje formou dat v xml souboru ). S jeho minimalizaci ja nic neudelam.

Nekde (ted to bohuzel nemuzu najit) jsem cetl, ze v nekterych pripadech unset spis pamet zahlti nez uvolni. Ale nevim jak moc je to pravda (osobne doufam, ze to tak neni :-)).
taky jsem si toho vsiml, hraju si s tim, zkousim ruzne unset($promenna), $promenna=null apod...zatim jsem neprisel na nic kloudneho, co by mi pomohlo.

Nevidím dôvod, prečo sa viazať na hosting. K dispozícii mám predsa vlastný komp. Tam si môžem nastaviť čo chcem.
produkty e-shopu jsou denne aktualizovany, pridavany nove, nektere se odstrani....

BTW: robil som presne to isté. Od zákazníka som dostal 10MB Excel dáta a šup s tým do e-shopu. Malý rodziel bol v tom, že som to exportoval do CSV a importoval pomocou PhpMyAdmina.
jenomze ten maly e-shop pouziva oscommerce (open source e-shop), a struktura db pro oscommerci je docela lahudka, popsal jsem list A4 nez jsem si ujasnil vazby mezi tabulkami, co kam patri, apod...
martni
Profil
stejne mam pocit, ze nejvetsi pametovy narok ma iconv. Vystup ze simple xml parseru je defaultne UTF-8, a ja musim vsechno prekodovat. Jake mate zkusenosti se simplexml a kodovanim vystupu?
martni
Profil
tak jsem problem vyresil. Vykaslal jsem se na atributy produktu, podle kterych by se dalo vyhledavat, a zvetsil jsem popisek produktu o vsechny atributy....tim jsem vypustil nekolik foreach, a dotazu do db, a hnedka je skript rychlejsi, a zere min pameti.
Neni to sice nejlepsi reseni, ale zatim lepsi neznam...
Acci
Profil
Myslím si, že pokud má XML soubor 3 MB, musí se do paměťového limitu PHP vlézt. IMHO bude skript špatně napsán.
llook
Profil
pokud má XML soubor 3 MB, musí se do paměťového limitu PHP vlézt
Samotný soubor se tam vejde, ale samotné zpracování - rozparsování a vytvoření stromu objektů - sežere dost zdrojů. Taky bych doporučil zmíněné sekvenční zpracování, neboli staré dobré XML funkce: http://www.php.net/ref.xml
Toto téma je uzamčeno. Odpověď nelze zaslat.

0