FAQ
Hola a todos!

Estoy intentando parsear un XML de gran tamaño (unos 20Mb actualmente pero
puede llegar al Giga) y al intentarlo hacer directamente en el servidor,
este se satura. Lo he probado con simpleXML, con funciones de leer archivos
y el CURL, pero en todos me pasa lo mismo con el servidor.

Lo único que se me ocurre es descargar el archivo con comandos shell,
partirlo del mismo modo en trocitos masticables y luego que el sistema lo
haga uno a uno, pero no se si hay alguna opción más eficaz. A alguien se le
ocurre?

Gracias!

Search Discussions

  • German Monfort at Mar 30, 2010 at 1:00 am

    On 3/29/2010 9:07 PM, Jacobo Pedrosa wrote:
    Hola a todos!

    Estoy intentando parsear un XML de gran tamaño (unos 20Mb actualmente pero
    puede llegar al Giga) y al intentarlo hacer directamente en el servidor,
    este se satura. Lo he probado con simpleXML, con funciones de leer archivos
    y el CURL, pero en todos me pasa lo mismo con el servidor.

    Lo único que se me ocurre es descargar el archivo con comandos shell,
    partirlo del mismo modo en trocitos masticables y luego que el sistema lo
    haga uno a uno, pero no se si hay alguna opción más eficaz. A alguien se le
    ocurre?

    Gracias!
    Para archivos grandes se recomienda utilizar el método SAX, no le he
    utilizado con PHP así que no puedo comentar sobre rendimiento pero muy
    probablemente sea mejor que simpleXML y otros parsers basados en DOM.

    Màs informaciòn acá:
    http://www.php.net/manual/en/function.xml-set-element-handler.php

    Saludos
  • Claudio Bustos at Mar 30, 2010 at 2:10 am
    Estimado:

    Estoy de acuerdo con ocupar algo basado en SAX. Si el archivo no es muy complicado, ¿crees que se podría procesar directamente con operaciones basadas en archivo?


    El Mon, 29 Mar 2010 22:00:23 -0300
    German Monfort <monfort.german@gmail.com> escribió:
    On 3/29/2010 9:07 PM, Jacobo Pedrosa wrote:
    Hola a todos!

    Estoy intentando parsear un XML de gran tamaño (unos 20Mb actualmente pero
    puede llegar al Giga) y al intentarlo hacer directamente en el servidor,
    este se satura. Lo he probado con simpleXML, con funciones de leer archivos
    y el CURL, pero en todos me pasa lo mismo con el servidor.

    Lo único que se me ocurre es descargar el archivo con comandos shell,
    partirlo del mismo modo en trocitos masticables y luego que el sistema lo
    haga uno a uno, pero no se si hay alguna opción más eficaz. A alguien se le
    ocurre?

    Gracias!
    Para archivos grandes se recomienda utilizar el método SAX, no le he
    utilizado con PHP así que no puedo comentar sobre rendimiento pero muy
    probablemente sea mejor que simpleXML y otros parsers basados en DOM.

    Màs informaciòn acá:
    http://www.php.net/manual/en/function.xml-set-element-handler.php

    Saludos

    --
    Claudio Bustos
    Psicólogo
  • Mauricio Cuenca at Mar 30, 2010 at 9:25 am
    Si crees que el tamaño de tu XML puede llegar a tener un gigabyte,
    creo que deberías ir pensando en otra solución , como un directorio
    LDAP o un sistema de almacenamiento liviano como LiteSQL.

    Otra posibilidad para seguir con el XML seria comprimirlo en origen y
    descomprimirlo y parsearlo en el destino.

    --
    Mauricio
    On Mar 30, 2010, at 2:07, Jacobo Pedrosa wrote:

    Hola a todos!

    Estoy intentando parsear un XML de gran tamaño (unos 20Mb actualment
    e pero
    puede llegar al Giga) y al intentarlo hacer directamente en el
    servidor,
    este se satura. Lo he probado con simpleXML, con funciones de leer
    archivos
    y el CURL, pero en todos me pasa lo mismo con el servidor.

    Lo único que se me ocurre es descargar el archivo con comandos shell,
    partirlo del mismo modo en trocitos masticables y luego que el
    sistema lo
    haga uno a uno, pero no se si hay alguna opción más eficaz. A alguie
    n se le
    ocurre?

    Gracias!
  • Jacobo Pedrosa at Mar 30, 2010 at 1:49 pm
    Al final he conseguido leer el archivo y parsearlo, pero me da problemas de
    memory limit ya que supera los 90Mb (por ahora unos 200Mb, pero es
    variable).

    Se me ha ocurrido descargar el archivo y dividirlo con un comando Shell, no
    se, algo del estilo de un cat por número de lineas o alguna cosa del estilo.
    Esta solución no me parece del todo optima, pero no se me ocurre nada mejor.

    A alguien si?


    Saludos!!!

    PD: Lo de modificar el sistema de almacenamiento original no me sirve, dado
    que el XML me lo proporciona el cliente y no puedo pedirle que cambie su
    sistema....






    El 30 de marzo de 2010 11:24, Mauricio Cuenca <macuenca@gmail.com> escribió:
    Si crees que el tamaño de tu XML puede llegar a tener un gigabyte, creo que
    deberías ir pensando en otra solución , como un directorio LDAP o un sistema
    de almacenamiento liviano como LiteSQL.

    Otra posibilidad para seguir con el XML seria comprimirlo en origen y
    descomprimirlo y parsearlo en el destino.

    --
    Mauricio


    On Mar 30, 2010, at 2:07, Jacobo Pedrosa wrote:

    Hola a todos!
    Estoy intentando parsear un XML de gran tamaño (unos 20Mb actualmente pero
    puede llegar al Giga) y al intentarlo hacer directamente en el servidor,
    este se satura. Lo he probado con simpleXML, con funciones de leer
    archivos
    y el CURL, pero en todos me pasa lo mismo con el servidor.

    Lo único que se me ocurre es descargar el archivo con comandos shell,
    partirlo del mismo modo en trocitos masticables y luego que el sistema lo
    haga uno a uno, pero no se si hay alguna opción más eficaz. A alguien se
    le
    ocurre?

    Gracias!
  • Ariel Camino at Mar 30, 2010 at 2:38 pm

    Lo único que se me ocurre es descargar el archivo con comandos shell,
    partirlo del mismo modo en trocitos masticables y luego que el sistema lo
    haga uno a uno, pero no se si hay alguna opción más eficaz. A alguien se
    le
    ocurre?

    Gracias!
    lo que podrías hacer es vos, llevarlo de xml a algo más copado, por
    darte un ejemplo simple, con un poco de cat, awk y expresiones
    regulares, podes armar un dump sql y después importarlo, para
    trabajarlo en una base de datos... no se si es muy descabellada la
    idea pero es lo primero que se me vino a la cabeza..

    saludos,
    --
    Ariel Camino
  • Satyam at Mar 30, 2010 at 3:02 pm
    La alternativa de SAX es la unica razonable para un archivo de tamaño
    ilimitado. en lugar de cargarlo todo en memoria de una vez y luego irlo
    procesando, SAX te deja irlo leyendo secuencialmente, elemento por
    elemento. Si eso basta para procesarlo, perfecto, si algunas partes han
    de servir de referencia para procesarlas luego, se van guardando en
    tablas auxiliares en base de datos hasta que se las necesite. El asunto
    es que no puedes cargar todo un XML de un tamaño desconocido en memoria,
    antes o despues no va a alcanzar y tendrias una aplicacion muy fragil.
    Ademas de lenta, pues el manejo de memoria virtual a que obligarías a
    cualquier maquina que debiera procesar semejante enormidad, terminaria
    matando a cualquier maquina.

    El 30/03/2010 15:49, Jacobo Pedrosa escribió:
    Al final he conseguido leer el archivo y parsearlo, pero me da problemas de
    memory limit ya que supera los 90Mb (por ahora unos 200Mb, pero es
    variable).

    Se me ha ocurrido descargar el archivo y dividirlo con un comando Shell, no
    se, algo del estilo de un cat por número de lineas o alguna cosa del estilo.
    Esta solución no me parece del todo optima, pero no se me ocurre nada mejor.

    A alguien si?


    Saludos!!!

    PD: Lo de modificar el sistema de almacenamiento original no me sirve, dado
    que el XML me lo proporciona el cliente y no puedo pedirle que cambie su
    sistema....






    El 30 de marzo de 2010 11:24, Mauricio Cuenca<macuenca@gmail.com> escribió:

    Si crees que el tamaño de tu XML puede llegar a tener un gigabyte, creo que
    deberías ir pensando en otra solución , como un directorio LDAP o un sistema
    de almacenamiento liviano como LiteSQL.

    Otra posibilidad para seguir con el XML seria comprimirlo en origen y
    descomprimirlo y parsearlo en el destino.

    --
    Mauricio


    On Mar 30, 2010, at 2:07, Jacobo Pedrosawrote:

    Hola a todos!
    Estoy intentando parsear un XML de gran tamaño (unos 20Mb actualmente pero
    puede llegar al Giga) y al intentarlo hacer directamente en el servidor,
    este se satura. Lo he probado con simpleXML, con funciones de leer
    archivos
    y el CURL, pero en todos me pasa lo mismo con el servidor.

    Lo único que se me ocurre es descargar el archivo con comandos shell,
    partirlo del mismo modo en trocitos masticables y luego que el sistema lo
    haga uno a uno, pero no se si hay alguna opción más eficaz. A alguien se
    le
    ocurre?

    Gracias!



    No virus found in this incoming message.
    Checked by AVG - www.avg.com
    Version: 9.0.791 / Virus Database: 271.1.1/2778 - Release Date: 03/29/10 20:32:00

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupphp-general-es @
categoriesphp
postedMar 30, '10 at 12:07a
activeMar 30, '10 at 3:02p
posts7
users6
websitephp.net

People

Translate

site design / logo © 2022 Grokbase