Foros del Web » Programando para Internet » PHP »

cargar txt en memoria

Estas en el tema de cargar txt en memoria en el foro de PHP en Foros del Web. Hola: Me siento un tanto ridiculo preguntado esto, pero he buscado en inglés y español en la web y no lo encuentro. Tengo un archivo ...
  #1 (permalink)  
Antiguo 16/04/2008, 09:09
 
Fecha de Ingreso: febrero-2008
Mensajes: 17
Antigüedad: 16 años, 2 meses
Puntos: 0
Pregunta cargar txt en memoria

Hola:

Me siento un tanto ridiculo preguntado esto, pero he buscado en inglés y español en la web y no lo encuentro.

Tengo un archivo txt que abría, leía y cerraba desde un script php. Pero ha crecido considerablemente y seguirá creciendo, por ahora unos 70Mb y demora un montón.
La idea es cargarlo en la memoria para poder acceder (leerlo) desde un scrip php pero no encuentro información sobre como cargarlo y mantenerlo en la RAM, con alguna especie de loadfile o como sea.

Alguna indicación por favor.
Gracias de antemano.

PD: Perdón si me equivoqué de tema para enviar el post, pensé que acá podría encajar.
  #2 (permalink)  
Antiguo 16/04/2008, 09:14
Avatar de emiliodeg  
Fecha de Ingreso: septiembre-2005
Ubicación: Córdoba
Mensajes: 1.830
Antigüedad: 18 años, 7 meses
Puntos: 55
Re: cargar txt en memoria

podrias hacer una alternativa, cargar dicho txt en una tabla de mysql cargada en memoria
__________________
Degiovanni Emilio
developtus.com
  #3 (permalink)  
Antiguo 16/04/2008, 09:14
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
Re: cargar txt en memoria

Hola huma,

Lo mas eficiente es que uses una base de datos, ya que PHP tiene limites de memoria bajos (generalmente es de 16 MB), y si tratas de cargar 70 MB de datos encontraras que te marca un error.

Si tu tienes acceso root a tu server puedes incrementar esa variable (memory_limit) y usar file_get_contents para pasar el archivo a la memoria.

Ten en cuenta que PHP es un lenguaje que se interpreta por request, así que en cada hit de cada pagina se cargaría ese archivo en memoria, por lo que para 3 usuarios concurrentes estas hablando de 210 MB de RAM.

Saludos.
  #4 (permalink)  
Antiguo 16/04/2008, 09:48
 
Fecha de Ingreso: febrero-2008
Mensajes: 17
Antigüedad: 16 años, 2 meses
Puntos: 0
Re: cargar txt en memoria

Cita:
Iniciado por GatorV Ver Mensaje
Hola huma,

Lo mas eficiente es que uses una base de datos, ya que PHP tiene limites de memoria bajos (generalmente es de 16 MB), y si tratas de cargar 70 MB de datos encontraras que te marca un error.

Si tu tienes acceso root a tu server puedes incrementar esa variable (memory_limit) y usar file_get_contents para pasar el archivo a la memoria.

Ten en cuenta que PHP es un lenguaje que se interpreta por request, así que en cada hit de cada pagina se cargaría ese archivo en memoria, por lo que para 3 usuarios concurrentes estas hablando de 210 MB de RAM.

Saludos.
HEY...

Primero que nada gracias GatorV y emiliodeg por responder tan rápido, estaba dando una vueltita por el foro para ver si podía contribuir con alguna respuesta y al toque ya estaban ustedes, gracias de nuevo.

Ojo no está en mi la intensión de que resuelvan mis problemas, solo con algunas sugerencias me ayudarían mucho.

Les comento rápidamente cual es el ojetivo.

El archivo txt es para un léxico (términos + id's) obtener los id's y después acceder a un índice invertido, realizar diversos procesos y terminar en una búsqueda de texto completo sin tener que usar un índice full-text; porque son muchísimos registros y ya sabemos que con millones de registros sería muy lento.
Por eso se me ocurrió que cada vez que se haga una nueva consulta por cualquier usuario, se acceda al lexico.txt en memoria.
Hacerlo en una db de MySQL, haría que se tuviera que abrir y cerrar la tabla por cada consulta, o ¿hay otra forma?

Por las dudas, aclaro que ya vi herramientas como sphinx y otros pero no me sirven para lo que estoy haciendo.

Nuevamente, gracias de antemano.
  #5 (permalink)  
Antiguo 16/04/2008, 09:55
 
Fecha de Ingreso: junio-2007
Ubicación: por ahi
Mensajes: 262
Antigüedad: 16 años, 10 meses
Puntos: 4
Re: cargar txt en memoria

creo a que a lo que se referia emilio es a que con mysql puedes configurar que existan tablas en memoria del servidor. Es decir tablas que permanecerian en RAM. Esto es recomendable cuando la informacion no se actualiza muy rapido.

mysql_cache
__________________
Hernando Saenz Sanchez
  #6 (permalink)  
Antiguo 16/04/2008, 10:19
 
Fecha de Ingreso: febrero-2008
Mensajes: 17
Antigüedad: 16 años, 2 meses
Puntos: 0
Re: cargar txt en memoria

Cita:
Iniciado por hernandos Ver Mensaje
creo a que a lo que se referia emilio es a que con mysql puedes configurar que existan tablas en memoria del servidor. Es decir tablas que permanecerian en RAM. Esto es recomendable cuando la informacion no se actualiza muy rapido.

mysql_cache
Hola hernandos:

Efectivamente eso es lo que interpreté. Pero mi duda es que, si bien la tabla es siempre la misma, pero las consultas diferentes por ej:

usuario 1: 'fabrica de mesas'
usuario 2: 'repuesto de cocina', etc

¿No se abre una nueva instancia de la tabla por cada consulta diferente; aun cuando el resultado de la primera o anteriores pero distintas estén en la cache?

Perdón por hacer preguntas que quizás sean básicas, pero estoy medio desesperado por terminar esto y posiblemente mis ideas o conceptos básicos sean erróneos.

A propósito, la tabla o txt se actualiza cada dos horas.

Última edición por huma; 16/04/2008 a las 10:21 Razón: más detalles
  #7 (permalink)  
Antiguo 17/04/2008, 09:39
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
Re: cargar txt en memoria

Hola huma,

Nunca un archivo de texto plano le va a ganar a una base de datos, por algo estan hechas y es para encontrar la mayor eficiencia, y la mayor velocidad.

La base de datos es la que se encarga de hacer el "cache" en dado caso si las consultas son similares, y para quitar tu duda, no, no se abre una instancia "nueva" de cada tabla por cada usuario, la fuente de datos siempre es la misma.

Saludos.
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:46.