|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Jun 2008
Messaggi: 159
|
[PHP] Leggere un file XML ENORME??
Salve,
stavo leggendo un file xml com simpleXML enorme, tanto enorme che il mio servizio di hosting (netsons.org) mi ha bloccato l'account per un abuso di RAM. Siccome in qualche modo devo pure leggere questo file XML (con quasi 1 milione di item e 10 milioni di righe), come posso fare? Il programma deve leggere questo file XML ed inserire ogni item nel database mysql. Pensavo anche ad un'applicazione desktop ma avrei problemi ad eseguire quel milione di query. Come potrei fare? Conoscete librerie PHP/xml che permettono di scaricare l'xml in locale e poi leggerlo. Insomma qualche trucchetto per leggere un file XML enorme. Grazie |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Jul 2008
Messaggi: 237
|
Non sarebbe più facile fare tutto con un'applicazione desktop in locale, fare un dump della tabella con i risultati ed importarlo sul server?
|
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Jun 2008
Messaggi: 159
|
Ci sono applicazioni o parti di codice già pronte?
|
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Jul 2008
Messaggi: 237
|
Non so di applicazioni già pronte, ma con python hai a disposizione più parser XML di quanti te ne possano servire in una vita. Ti dovrebbe bastare installare MySQL in locale, creare un database con una tabella identica a quella sul server e il poco codice python necessario a leggere dall'XML e a creare le query SQL.
|
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Jun 2008
Messaggi: 159
|
In realtà dovrei rendere la cosa il più autonoma possibile. LO scopo è quello di far scansionare questi XML periodicamente (cronjob) ed aggiornare il database.
Io non devo intervenire mai. Utilizzando un programma in locale devo ogni volta avviarlo. |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Dec 2005
Messaggi: 558
|
se sai esattamente come è formato l'xml ed è molto "frammentato" (i dati che ti interessano sono tra tag che non sono molto distanti tra loro) ti puoi scrivere un parser dedicato proprio per quell'xml che legge una riga (o n byte) a volta, in modo che in memoria non tieni troppa roba.
|
![]() |
![]() |
![]() |
#7 |
Moderatore
Iscritto dal: Nov 2006
Messaggi: 21805
|
io anni fà (tesi ) avevo fatto un programma simile in java, lettura ed elaborazione di un file xml da 450MB (oltre 5 milioni di oggetti)
avevo usato lo xerces in sax e due thred (produttore consumatore con2 vettori di 30 elementi che venivano passati tra i due thread) parallelismo spinto al massimo, lock minimali e occupazione memoria e tempo di cpu il più basso possibile. per fare un esempio il programma iniziale leggeva tutto in ram e impiegava la bellezza di 45 minuti e 4 Gb di ram circa (con lo swap del caso a quel tempo le macchine serie avevano 1Gb ram) alla fine della tesi meno di 300Mb di ram e 28 secondi di tempo di esecuzione prova a vedere se trovi in php un sax
__________________
"WS" (p280,cx750m,4790k+212evo,z97pro,4x8GB ddr3 1600c11,GTX760-DC2OC,MZ-7TE500, WD20EFRX) Desktop (three hundred,650gq,3800x+nh-u14s ,x570 arous elite,2x16GB ddr4 3200c16, rx5600xt pulse P5 1TB)+NB: Lenovo p53 i7-9750H,64GB DDR4,2x1TB SSD, T1000 |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:27.