2012-05-22 14 views
87

¿Alguien puede dar casos de uso de ejemplo de cuándo se beneficiarían del uso de Redis y MongoDB conjuntamente?MongoDB con redis

Respuesta

153

Redis y MongoDB se pueden utilizar junto con buenos resultados. Una compañía conocida por dirigir MongoDB y Redis (junto con MySQL y Sphinx) es Craiglist. Ver this presentation de Jeremy Zawodny.

MongoDB es interesante para datos persistentes, orientados a documentos, indexados de varias maneras. Redis es más interesante para datos volátiles o datos semipersistentes sensibles a la latencia.

Aquí hay algunos ejemplos del uso concreto de Redis en la parte superior de MongoDB.

  • Pre-2.2 MongoDB no tiene aún un mecanismo de caducidad. Las colecciones limitadas realmente no se pueden usar para implementar un TTL real. Redis tiene un mecanismo de caducidad basado en TTL, por lo que es conveniente almacenar datos volátiles. Por ejemplo, las sesiones de los usuarios se almacenan comúnmente en Redis, mientras que los datos de los usuarios se almacenan e indexan en MongoDB. Tenga en cuenta que MongoDB 2.2 ha introducido un mecanismo de expiración de baja precisión en el nivel de recopilación (para ser utilizado para purgar datos, por ejemplo).

  • Redis proporciona un tipo de datos set conveniente y sus operaciones asociadas (unión, intersección, diferencia en conjuntos múltiples, etc.). Es bastante fácil implementar un motor de búsqueda o etiquetado con facetas básico sobre esta característica, que es una adición interesante a las capacidades de indexación más tradicionales de MongoDB.

  • Redis admite operaciones pop de bloqueo eficientes en las listas. Esto se puede usar para implementar un sistema de colas distribuidas ad-hoc. Es más flexible que los cursores disponibles de MongoDB IMO, ya que una aplicación backend puede escuchar varias colas con un tiempo de espera, transferir elementos a otra cola atómicamente, etc. Si la aplicación requiere algunas colas, tiene sentido almacenar la cola en Redis. y mantener los datos funcionales persistentes en MongoDB.

  • Redis también ofrece un mecanismo de pub/sub. En una aplicación distribuida, un sistema de propagación de eventos puede ser útil. Este es nuevamente un excelente caso de uso para Redis, mientras que los datos persistentes se guardan en MongoDB.

Debido a que es mucho más fácil diseñar un modelo de datos con MongoDB que con Redis (Redis es más bajo nivel), es interesante para beneficiarse de la flexibilidad de MongoDB para los principales datos persistentes, y desde el extra características proporcionadas por Redis (baja latencia, caducidad del elemento, colas, pub/sub, bloques atómicos, etc.). De hecho, es una buena combinación.

Tenga en cuenta que nunca debe ejecutar un servidor Redis y MongoDB en la misma máquina. La memoria MongoDB está diseñada para ser intercambiada, Redis no. Si MongoDB desencadena alguna actividad de intercambio, el rendimiento de Redis será catastrófico. Deben estar aislados en diferentes nodos.

+19

MongoDB 2.2 (justo publicado) agrega soporte TTL, que aborda su primer punto: http://docs.mongodb.org/manual/tutorial/expire-data/ –

+0

Grandes puntos sobre algunas de las fortalezas comparativas de cada uno. –

+2

Grandes puntos sobre algunas de las fortalezas comparativas de cada uno. Uno de los puntos de Redis está afinando en la memoria. Hay otros proyectos centrados en la baja latencia, como AerospikeDB, que se centran en la agrupación y la fiabilidad, y también en el almacenamiento SSD, que se puede utilizar cuando el uso en tiempo real va más allá de lo que Redis puede manejar fácilmente. –

22

Es obvio que hay lejos diferencias más que esto, pero para una visión general muy alto:

Para los casos de uso:

  • Redis se utiliza a menudo como una capa de almacenamiento en caché o pizarra compartida por distribuida cálculo.
  • MongoDB se utiliza a menudo como un reemplazo de sustitución para bases de datos SQL tradicionales.

Técnicamente:

  • Redis es una db en memoria con la persistencia de disco (todo el PP tiene que encajar en la RAM).
  • MongoDB es un disco de respaldo db que solo necesita suficiente RAM para los índices.

Existe cierta superposición, pero es muy común usar ambas. He aquí por qué:

  • MongoDB puede almacenar más datos más baratos.
  • Redis es más rápido para todo el conjunto de datos.
  • cultura de MongoDB es "almacenar todo, averiguar los patrones de acceso posteriores" cultura
  • de Redis es "considerar cuidadosamente cómo va a acceder a los datos, a continuación, almacenar"
  • Ambos tienen herramientas de código abierto que dependen de ellos, muchos de los cuales se usan juntos.

Redis puede ser utilizado como un sustituto de un almacén de datos tradicional, pero más a menudo utilizado con otra normal de almacén de datos "largos", como Mongo, PostgreSQL, MySQL, etc.