2011-07-26 9 views
5

Tenemos una gran cantidad de datos, decidimos usar mongodb y funciona muy bien.¿Tiene sentido usar redis y mongodb?

Comenzamos a usar redis para rastrear a los usuarios activos en nuestra aplicación en tiempo real. También comenzamos a hacer algunas cosas de pub/subcanales con redis.

Nuestro próximo paso podría ser usar mongodb para datos inactivos y redis para datos activos. Un ejemplo de esto sería que todos nuestros usuarios están almacenados en mongodb, pero cuando inicien sesión moveremos una copia de esos datos a redis para un acceso rápido. También almacenamos cosas como su actividad de juego en redis y usamos los datos en consecuencia. Cuando el usuario cierre sesión, guardaremos todo lo que necesite en mongo, donde vivirá hasta que se vuelva a necesitar y se cargue en redis.

Una cosa que hemos estado investigando es la preservación de redis en caso de falla. La actividad del usuario en el sistema es información significativa que no querríamos perder en el momento del bloqueo, y si solo estamos registrando datos después del hecho, ¿deberíamos guardar una copia de seguridad de datos importantes en mongo después de cada evento? Entonces, en el accidente redis puede restaurar desde mongo?

¿Hay alguna manera mejor de hacer las cosas que estamos tratando de lograr?

Gracias!

+0

¿MongoDb no tiene un sistema de almacenamiento en caché enfrente de su almacén de datos que tiene altas lecturas/escrituras?¿Por qué necesitas redis? –

+0

Este es el tipo de cosas que esperamos descubrir y obtener información más detallada. Somos nuevos en ambas tiendas de datos y esperamos algunas respuestas que expliquen los pormenores de lo que deberíamos hacer de manera diferente y por qué. – fancy

Respuesta

6

OK, entonces hay varios ángulos desde los cuales atacar esta pregunta. Lo primero que hay que señalar es que redis tiene user-configurable persistence.

La actividad del usuario en el sistema es información significativa que no querríamos perder en crash, y si solo estamos registrando datos después del hecho, debemos guardar una copia de seguridad de datos importantes en mongo después de cada evento ?

Para ser justos, la configuración predeterminada con MongoDB es enjuagar al disco cada 60 segundos. Entonces todavía tiene una ventana de pérdida de datos de 60 segundos.

  1. Puede usar journaling y soltar esa ventana a 100ms, pero eso gravará el IO más fuertemente.
  2. También puede configurar sus escritores para que esperen en ese diario a vaciar (WriteConcern: fsync), pero eso va a ralentizar las escrituras significativamente.

¿Hay alguna manera mejor de hacer las cosas que estamos tratando de lograr?

Realmente depende de lo que está tratando de lograr.

  • ¿Qué tipo de pérdida de datos puede manejar?
  • Redis has replication, ¿lo estás usando? ¿Eso soluciona la mayoría de tus preocupaciones por la pérdida de datos?
  • Dice que está utilizando las características de PubSub, ¿cuántos nodos cubre esto? ¿Sus datos se replican adecuadamente como resultado de esto?

De cualquier manera, es un problema algo complejo. MongoDB puede resolver tus problemas, pero la replicación también puede resolver esos problemas. Depende de tu nivel de comodidad.

Cuestiones relacionadas