Foros del Web » Programando para Internet » PHP »

Tratar XML muy grande

Estas en el tema de Tratar XML muy grande en el foro de PHP en Foros del Web. Hola a todos! Estoy haciendo un proyecto en el que me piden que recoja datos de 2 archivos XML cada mes, uno de unos 149 ...
  #1 (permalink)  
Antiguo 20/11/2012, 04:17
 
Fecha de Ingreso: enero-2007
Mensajes: 27
Antigüedad: 17 años, 3 meses
Puntos: 1
Tratar XML muy grande

Hola a todos!

Estoy haciendo un proyecto en el que me piden que recoja datos de 2 archivos XML cada mes, uno de unos 149 mb y otro de 3 gb. He probado de tratarlo como decís en algunos otros posts con simpleXML, o con JSON,..., pero siempre me sale el error:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 149571317 bytes) in /Applications/XAMPP/xamppfiles/htdocs/...

Sé que este error desaparece si amplío la memoria en php.ini, el caso es que ampliarla para el archivo de 149 mb vale, pero para el e 3 gb... Entonces, hay algun método especial para hacerlo? Las páginas estilo kelkoo y shopmania qué usan para tratar estos ficheros? Por favor, necesito ayuda, tengo que entregar el proyecto en unas semanas y ya no sé por donde cogerlo...

Muchas gracias a todos de antemano!
  #2 (permalink)  
Antiguo 20/11/2012, 07:27
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Tratar XML muy grande

me temo que si SimpleXML no permite la lectura por segmentos, tendrás que recurrir a otra o leer línea a línea el archivo, porque obviamente llevarlo a memoria es una tarea laboriosa
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 20/11/2012, 07:34
 
Fecha de Ingreso: enero-2007
Mensajes: 27
Antigüedad: 17 años, 3 meses
Puntos: 1
Respuesta: Tratar XML muy grande

Y usando otro lenguaje de programación?
  #4 (permalink)  
Antiguo 20/11/2012, 07:37
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Tratar XML muy grande

es lo mismo, depende de la librería, hasta donde sé SimpleXML está escrita en C, y tendrías el mismo problema si usas C y SimpleXML, no es problema del lenguaje, el problema es de la forma en que éstas librerías interpretan los archivos.

si vez un funcionamiento lógico de tal librería es abrir y leer todo el XML, pero puede que la misma tenga el modo que te indiqué, para leer por segmentos, simplemente busca en la documentación, además No es la única en su tipo.
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #5 (permalink)  
Antiguo 20/11/2012, 08:32
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Tratar XML muy grande

Podrías intentar con XMLReader.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #6 (permalink)  
Antiguo 20/11/2012, 09:05
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Tratar XML muy grande

en buena pero no seria mejor pasar ese xml a algun servidor sql y te ahorras ese problema...
  #7 (permalink)  
Antiguo 20/11/2012, 09:08
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Tratar XML muy grande

Cita:
Iniciado por alvaro_trewhela Ver Mensaje
en buena pero no seria mejor pasar ese xml a algun servidor sql y te ahorras ese problema...
a ver, a ver, a ver, ¿que tiene que ver un servidor SQL con un XML?, además estamos tratando con un archivo de 3GB, favor ser más cuidadoso con lo que se responde, una cosa es usar Arquitectura orientada al servicio, distribuyendo la carga de proceso a otros servidores para manejar gran cantidad de peticiones y otra muy diferente es pasar archivos tan grandes.
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #8 (permalink)  
Antiguo 20/11/2012, 10:45
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Tratar XML muy grande

Exacto para estos casos es que debes de usar XMLReader, te permite leer un archivo XML de forma secuencial, en lugar de transformar todo el XML como un arbol.

La desventaja es que no puedes accesar a un lugar en específico si no tienes que leer todo el archivo XML e ir extrayendo la información que necesitas.
  #9 (permalink)  
Antiguo 20/11/2012, 10:46
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años
Puntos: 58
Respuesta: Tratar XML muy grande

Con simple XML no se como se haría pero para ficheros grandes se suele hacer algo así como coger de la línea 0 a la 1000, de la 1001 a la 2000 y así por ejemplo.

Pero claro, en un XML no puedes cortar en cualquier sitio, lo suyo sería leer X pedidos, noticias o lo que sean que vayan etiquetados, y cada X dejar de leer procesar y volver a coger datos. Con un txt es fácil con un XML ni idea. No se si se podría hacer así.

Aún así sea como sea el proceso va a ser lento SI O SI. Seguiré el hilo de cerca para saber como lo solucionaste porque me interesa bastante.

También no se si esto te servirá de ayuda, échale un vistazo. http://www.xml.com/pub/a/2003/10/22/embed.html
Consiste en meter el XML en una "base de datos xml"
  #10 (permalink)  
Antiguo 21/11/2012, 02:45
 
Fecha de Ingreso: enero-2007
Mensajes: 27
Antigüedad: 17 años, 3 meses
Puntos: 1
Respuesta: Tratar XML muy grande

De momento lo estoy intentando con XMLReader, en cuanto lo tenga os comento.

Saludos y gracias a todos!

Etiquetas: simplexml, xml, trazar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:33.