2009-09-17 31 views
6

Necesito una manera simple para que múltiples secuencias de comandos PHP se ejecuten para compartir datos.¿Qué es más rápido, archivos planos o una base de datos RAM MySQL?

¿Debería crear un base de datos MySQL con un motor de almacenamiento de memoria RAM, y compartir datos a través de ese (puede varias secuencias de comandos conectarse a la misma base de datos al mismo tiempo?)

O habría archivos planos con una sola pieza de los datos por línea ser mejor ?

Respuesta

13

¿Archivos planos? Nooooooo ...

Utilice un buen motor de base de datos (MySQL, SQLite, etc.). Luego, para obtener el máximo rendimiento, use memcached al contenido de la memoria caché.


De esta manera, usted tiene la facilidad y fiabilidad de compartir datos entre procesos que utilizan software de servidor que maneja probada la concurrencia, etc ... Pero se obtiene la velocidad de tener sus datos en caché.

que tener en cuenta un par de cosas:

  1. MySQL tiene un caché de consultas. Si está emitiendo las mismas consultas repetidamente, puede obtener un gran rendimiento sin agregar una capa de almacenamiento en caché.
  2. MySQL es realmente rápido de todos modos. ¿Has probado la carga para demostrar que no es lo suficientemente rápido?
6

No utilice archivos planos, por la cordura de los mantenedores.

Si solo busca tener datos compartidos, tan rápido como sea posible, y puede mantener todo en RAM, entonces memcached es la solución perfecta.

Si desea la persistencia de los datos, utilice un DBMS, como MySQL.

+0

Encontré esta pregunta en Google porque soy uno de esos mantenedores que tiene que solucionar problemas en un híbrido php & mysql + flatfile. Es una pesadilla. Si hubo alguna ganancia en el rendimiento al usar archivos planos, se ha consumido más que el costo de tener que arreglar y mantener este sistema de archivos planos kludgy. ¡+1 por pensar en la cordura de los mantenedores! – bejonbee

0

Yo diría que la base de datos MySql sería una mejor opción a menos que tenga algún mecanismo para lidiar con bloqueos en los archivos planos (y alguna forma de controlar el acceso). En este caso, la capa de DB (independientemente del DBMS específico) actúa como una capa indirecta, lo que le permite no preocuparse por ello.

Dado que el OP no especifica un servidor web (y PHP realmente puede ejecutarse desde una línea de comandos), entonces no estoy seguro de que las tecnologías de almacenamiento en caché sean lo que están buscando aquí. El OP podría estar buscando hacer algún tipo de transformación de datos voladores que no sea impulsada por el sitio web. Quién sabe.

+0

Bueno, y una capa de RAM es solo RAM, los archivos planos aún hablan con un subsistema de disco. A menos que todavía tenga una unidad RAM (desde DOS días), que sería lo mismo, simplemente no hay semántica de bloqueo. Owww. Me duele la cabeza ahora. – OldTroll

2

Generalmente, una base de datos es mejor, sin embargo, si está compartiendo una pequeña cantidad de datos estáticos, puede haber beneficios de rendimiento (y simplicidad) de hacerlo con archivos planos.

Cualquier cosa que no sea el intercambio de datos triviales y yo elegiría una base de datos sin embargo.

0

Si su sistema tiene una memoria caché de PHP (que almacena en caché el código PHP compilado en la memoria, como APC), intente poner sus datos en un archivo PHP, como código PHP. Si tiene que escribir datos, existen algunos problemas de seguridad.

1

Si los está ejecutando en varios servidores, un enfoque basado en el sistema de archivos no lo reducirá (a menos que tenga un sistema de archivos compartido consistente, que es poco probable y puede no ser escalable).

Por lo tanto, necesitará una base de datos basada en servidor para permitir el intercambio de datos entre servidores web.Si se toma en serio el rendimiento o la disponibilidad, su aplicación admitirá múltiples servidores web.

0

Necesito una forma simple para múltiples ejecutando scripts PHP para compartir datos.

APC, y memcached son dos buenas opciones según el contexto. shared memory también puede ser una opción.

¿Debo crear una base de datos MySQL con un motor de almacenamiento de memoria RAM , y compartir datos a través de que (pueden varias secuencias de comandos conectarse a la misma base de datos al mismo tiempo?)

Eso también es una opción decente, pero probablemente no sea tan rápido como APC o memcached.

¿O archivos planos con una pieza de de datos por línea ser mejor?

Si esto es de sólo lectura de datos, que es una posibilidad - pero puede ser más lento que cualquiera de las opciones anteriores. Especialmente si los datos son grandes. Sin embargo, en lugar de escribir un código de análisis personalizado, considere la posibilidad de crear una matriz de PHP e incluir() el archivo.

Si se trata de un almacén de datos al que pueden acceder simultáneamente varios escritores, ¡por supuesto NO utilice un archivo plano! Escribir en un archivo plano de múltiples procesos es probable que conduzca a la corrupción de archivos. Puede bloquear el archivo, pero corre el riesgo de problemas de contención de bloqueo y tiempos de espera de bloqueo prolongados.

Manejar las escrituras simultáneas es la razón por la que existen aplicaciones como mysql y memcached.

2

1- Donde el archivo plano puede ser útil: El archivo plano puede ser más rápido que una base de datos, pero en aplicaciones muy específicas. Son más rápidos si los datos se leen de principio a fin sin ninguna búsqueda o escritura. Si los datos no se ajustan a la memoria y deben leerse por completo para realizar el trabajo, 'pueden' ser más rápidos que una base de datos. Además, si hay mucho más escritura que lectura, el archivo plano también brillará, la mayoría de las configuraciones de bases de datos predeterminadas necesitarán hacer que las consultas de lectura esperen a que la escritura termine para mantener los índices y las claves externas. Por lo general, las consultas de escritura son más lentas que las simples.

TD/LR vesion: Utilice archivos planos para el sistema basado en trabajos (Aka, análisis de registros simples), no para consultas de búsqueda web.

2- Archivos planos, caídas de agujeros: Si va con un archivo plano, deberá sincronizar sus secuencias de comandos cuando el archivo cambie utilizando el mecanismo de bloqueo personalizado. Lo cual puede llevar a una ralentización, corrupción hasta bloqueo muerto si tienes un error.

Base de datos basada en Ram 3? La mayoría de las bases de datos tienen memoria caché para resultados de búsqueda, índices de búsqueda, lo que hace que sea muy difícil de superar con un archivo plano. Debido a que almacenan en caché en la memoria, hacer que funcione completamente de memoria es la mayoría de las veces ineficaz y peligroso. Es mejor ajustar correctamente la configuración de la base de datos.

Si buscas optimizar el rendimiento con el uso de ram, primero vería ejecutar tus scripts php, páginas html e imágenes pequeñas desde un disco RAM. Donde es más probable que el mecanismo de caché sea crudo y golpee el disco duro sistemáticamente para no modificar los datos estáticos.

Se puede alcanzar un mejor resultado con un equilibrador de carga, agrupamiento con conexiones de un plano posterior hasta una matriz SAN basada en memoria RAM. Pero ese es un tema completamente diferente.

5- ¿Pueden varias secuencias de comandos conectarse simultáneamente a la misma base de datos?

Sí, se denomina agrupación de conexiones. En php (lado del cliente) es la función para abrir una conexión su mysql-pconnect (http://php.net/manual/en/function.mysql-pconnect.php). Puede configurar la conexión máxima abierta en php.ini, creo. La configuración similar en el lado del servidor mysql define el máximo de conexiones de cliente simultáneas en /etc/mysql/my.cnf.

Debe hacer esto para aprovechar el procesamiento en paralelo de la CPU y evitar que la secuencia de comandos php espere la consulta de cada otro acabado. Aumenta enormemente el rendimiento bajo una carga pesada.

También hay un conjunto de conexiones/grupo de subprocesos en la configuración de Apache para clientes web normales. Ver httpd.conf.

Lo siento por el muro de texto, estaba aburrido. Louis.

Cuestiones relacionadas