Foros del Web » Programando para Internet » PHP »

Gestionar memoria en PHP

Estas en el tema de Gestionar memoria en PHP en el foro de PHP en Foros del Web. Hola a todos, hace poco tiempo vengo trabajando en un proyecto en PHP, sistema de inventarios, con una base de datos de más de 180 ...
  #1 (permalink)  
Antiguo 09/12/2011, 07:27
airknightz
Invitado
 
Mensajes: n/a
Puntos:
Gestionar memoria en PHP

Hola a todos, hace poco tiempo vengo trabajando en un proyecto en PHP, sistema de inventarios, con una base de datos de más de 180 000 registros en MySQL, del cual tengo que generar reportes Generales y Resumenes.

El problema es que cuento con un servicio de web hosting y cuento con una plataforna limitada en todos los aspectos, y es totalmente diferente a lo que uno puede hacer cuando trabaja con un servidor de forma local; y en la mayoria de los casos cuento con problemas al tratar de generar reportes mostrar grandes cantidades de datos en el navegador, etc.

Quisiera que comente sobre las limitaciones, como por ejemplo que hacer cuando uno quiere ejecutar un script PHP que genere un xml de 180 000 registro y que por consecuncia el servidor me arroje lo siguiente: "Fatal error: Out of memory (allocated 40632320) (tried to allocate 40370216 bytes) in /home/.../public_html/.../reportes/reporteGeneralXML.php on line 258"
  #2 (permalink)  
Antiguo 09/12/2011, 07:35
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 15 años, 1 mes
Puntos: 334
Respuesta: Gestionar memoria en PHP

haber tengo una duda.. los registros son para lectura humana.. por lo cual un registro de 180.000 tuplas es algo medio extraño para mi :)

podrías intentar solo paginar o resumir los datos ?

he entendido algo mal en la pregunta ?

saludos.
__________________
More about me...
~ @rhyudek1
~ Github
  #3 (permalink)  
Antiguo 09/12/2011, 07:43
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Respuesta: Gestionar memoria en PHP

La respuesta puede ser tan sencilla o tan complicada dependiendo como la quieras aplicar, en un hosting "básico" es muy difícil solucionar este tipo de problemas de manera sencillo, ya que aumentar el consumo de RAM por PHP tiende a causar problemas de bloque o costos extras, lo mas sencillo es contratarte un dedicado o de perdida un virtual, aunque en el segundo es posible que el problema se repita.

Si por el contrario no puedes o no quieres cambiarte manejar tal cantidad de registros en una sola llamada te va a ser casi imposible, por una parte podrías manejar registros por bloques y después liberando la memoria (ob_start, ob_flush), pero esto acarreara otro problema, el consumo de procesador, normalmente PHP esta configurado para procesar un archivo un máximo de 30 segundos, si este excede, PHP deja de procesar el archivo, ahora, también puedes aumentar el tiempo (incluso indicar tiempo ilimitado) de proceso, pero es probable que el consumo de procesador te acarre el mismo problemas con el hosting, ahora que haría yo?, seria crear una "granja", procesar por lotes los registros manteniendo el consumo de ram y procesador por cada ejecución en niveles aceptables
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #4 (permalink)  
Antiguo 12/12/2011, 18:04
airknightz
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Gestionar memoria en PHP

Muchas gracias por sus respuestas. Hidek1, cuando escribro registros me refiero a las filas de una tabla de una base de datos. El enfoque principal esta en como afrontar este requirimiento, sabiendo las limitaciones que tiene un servidor rentado y las posibildades de tener uno propio, el cual pueda configurarse en base a los requerimientos. Me gustaría saber los tipos de soluciones de hosting que existen en el mercado, para tenerlo e cuanto en un próximo requerimiento. Muchas gracias.

Etiquetas: limite, memoria, mysql, xml
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 10:51.