Autor | Zpráva | ||
---|---|---|---|
martni Profil |
#1 · Zasláno: 7. 7. 2006, 00:27:26
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 |
#2 · Zasláno: 7. 7. 2006, 09:25:06
|
||
Hugo Profil |
#3 · Zasláno: 7. 7. 2006, 09:49:51
WertriK
On se ale pta na snizeni pametove narocnosti skriptu ne na datovy tok. |
||
WanTo Profil |
#4 · Zasláno: 7. 7. 2006, 09:55:08
Dají se v PHP smazat nepotřebné proměnné (nějaká obdoba delete z C++?)?
|
||
Leo Profil |
#5 · Zasláno: 7. 7. 2006, 10:04:34
"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 |
#6 · Zasláno: 7. 7. 2006, 10:17:43
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 * |
#7 · Zasláno: 7. 7. 2006, 10:19:26
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 |
#8 · Zasláno: 7. 7. 2006, 10:26:52
A co takhle zvětšit memory limit pro PHP?
|
||
Leo Profil |
#9 · Zasláno: 7. 7. 2006, 10:49:08
"Dále by bylo dobré se zamyslet nad strukturou XML souboru a jeho minimalizací."
Napriklad misto xml pouzivat stare dobre csv. Leo |
||
jozob Profil |
#10 · Zasláno: 7. 7. 2006, 10:57:42
Ď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 |
#11 · Zasláno: 7. 7. 2006, 11:27:50
"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 |
#12 · Zasláno: 7. 7. 2006, 11:30:14
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 |
#13 · Zasláno: 7. 7. 2006, 11:31:17
"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 |
#14 · Zasláno: 7. 7. 2006, 11:33:08
Leo
Samozrejme. Nevidím dôvod, prečo by som nemohol urobiť databázu na localhoste a skopírovať ju na hosting. |
||
jozob Profil |
#15 · Zasláno: 7. 7. 2006, 11:38:29
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 |
#16 · Zasláno: 7. 7. 2006, 22:07:33
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 |
#17 · Zasláno: 7. 7. 2006, 22:09:36
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 |
#18 · Zasláno: 8. 7. 2006, 14:28:32
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 |
#19 · Zasláno: 8. 7. 2006, 14:36:18
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 |
#20 · Zasláno: 8. 7. 2006, 15:31:58
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 |
||
Časová prodleva: 18 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0