2010-10-19 19 views
10

Para una pequeña aplicación PHP que estoy escribiendo, necesitamos almacenar una gran cantidad de registros que tienen una clave hash, y algunos valores de campo simples ('host', 'ruta'). por ejemplo:¿Cuáles son algunas buenas y rápidas opciones de almacenamiento persistentes para los datos clave-> valor?

'4420ffb32a' => array(
    'host' => '127.0.0.1', 
    'path' => 'path/to/resource', 
); 

¿Cuál es el mejor almacenamiento persistente para este tipo de datos? ¿Sería MySQL la mejor opción o es excesiva para datos tan simples? ¿Qué le daría el mejor rendimiento?

Respuesta

10

Respuesta corta:Membase.


Respuesta larga:
Es, básicamente, tiene tres opciones: una base de datos relacional, almacenamiento de archivos, o alguna otra cosa.

Como dijo, una base de datos relacional definitivamente podría ser exagerada. Dicho esto, si esto es parte de una aplicación que ya tiene una base de datos MySQL u otra, iría con eso. Del mismo modo, el almacenamiento de archivos puede ser útil algunas veces (por ejemplo, escribir en un montón de archivos XML), pero las E/S del disco pueden ser lentas.

ahora en la otra categoría , que tienen algunas grandes opciones NoSQL como CouchDB o Memcached.

Si no está demasiado preocupado por la persistencia de sus datos, recomendaría Memcache. Es liviano, fácil de poner en funcionamiento, y hay un Memcache PHP extension que hace que usarlo sea fácil. Está hecho para almacenamiento de clave-valor como este.

El único inconveniente que tiene Memcache es que todos sus datos se pierden en el momento en que se detiene el servicio Memcache. Aquí es donde entra en juego Membase. Se trata de una bifurcación de Memcache de código abierto que es compatible con el protocolo, lo que significa que funcionará con todas las bibliotecas de cliente existentes. Sin embargo, puede conservar sus datos y proporcionar consistencia y confiabilidad, algo que Memcache no puede por sí mismo.

+0

Se agradece la respuesta larga. Estoy revisando membase ahora. – BrianV

+0

O use MySQL con Memcached: http://dev.mysql.com/tech-resources/articles/nosql-to-mysql-with-memcached.html – hakre

4

CouchDB es su respuesta (aunque podría ser un poco poco exagerado para sus necesidades) ..

1

podría no ser la mejor respuesta. Pero lo almacenaría en una base de datos MySQL y probablemente use un mysql_pconnect si los datos no se extraen al mismo tiempo.

información encima de pconnect aquí: php.net

Una alternativa común a la base de datos es un archivo normal, pero me corrija si estoy equivocado, pero el acceso a archivos concurent podría ser más lento.

Buena suerte.

5

Sólo para sugerir algo diferente, redis (o redisdb-win32 si se encuentra en un servidor Windows)

+0

Sugerencia interesante - No había visto Redis antes ... – BrianV

0

iría por MySQl, en caso de que necesite actualizar su aplicación en el futuro. Mejor ser a prueba de futuro cuando se trata de aplicaciones.

1

Extraño nadie mencionó Flintstone hasta ahora.

También una buena opción es Doctrine.

+0

La consulta tiene aproximadamente 1 almacenamiento exacto, no ORM que usa múltiples almacenamientos – vladkras

Cuestiones relacionadas