español engine cache and mongodb redis nosql

engine - MongoDB con redis



redis vs mongodb español (2)

Obviamente, hay muchas más diferencias que esto, pero para una descripción extremadamente alta:

Para casos de uso:

  • Redis a menudo se utiliza como una capa de almacenamiento en caché o una pizarra compartida para el cálculo distribuido.
  • MongoDB se usa a menudo como un reemplazo de intercambio para bases de datos SQL tradicionales.

Técnicamente:

  • Redis es una base de datos en memoria con persistencia de disco (toda la base de datos debe caber en la memoria RAM).
  • MongoDB es un archivo db con respaldo de disco que solo necesita suficiente RAM para los índices.

Hay cierta superposición, pero es extremadamente común usar ambos. Este es el por qué:

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

Redis se puede usar como reemplazo de un almacén de datos tradicional, pero se usa con más frecuencia en otro almacén de datos "largo" normal, como Mongo, Postgresql, MySQL, etc.

¿Alguien puede dar ejemplo de casos de uso de cuándo se beneficiaría de usar Redis y MongoDB en conjunto?


Redis y MongoDB se pueden usar junto con buenos resultados. Una compañía conocida por dirigir MongoDB y Redis (junto con MySQL y Sphinx) es Craiglist. Vea esta presentación 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 de uso concreto de Redis en la parte superior de MongoDB.

  • Pre-2.2 MongoDB aún no tiene 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 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 tiene un nivel más bajo), es interesante beneficiarse de la flexibilidad de MongoDB para los principales datos persistentes, y de las características adicionales proporcionadas por Redis (baja latencia , expiración del artículo, 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.