Configuración:
Imagina un servicio 'twitter like' donde un usuario envía una publicación, que luego es leída por muchos (cientos, miles o más) usuarios.Arquitectura para Redis caché y Mongo para persistencia
Mi pregunta es con respecto a la mejor manera de arquitecto la base de datos de caché para optimizar & para un acceso rápido & muchas lecturas, pero aún así mantener los datos históricos para que los usuarios pueden (si quieren) ver las entradas más antiguas. La suposición aquí es que el 90% de los usuarios solo estaría interesado en las cosas nuevas, y que a las cosas viejas se accederá ocasionalmente. La otra suposición aquí es que queremos optimizar el 90%, y está bien si el 10% anterior tarda un poco más en recuperarse.
Teniendo esto en cuenta, mi investigación parece apuntar fuertemente en la dirección de usar un caché para el 90%, y luego también almacenar las publicaciones en otro sistema persistente a largo plazo. Entonces mi idea hasta ahora es usar Redis para el caché. Las ventajas son que Redis es muy rápido, y también se ha incorporado en pub/sub, que sería perfecto para publicar publicaciones a mucha gente. Y luego estaba considerando usar MongoDB como una tienda de datos más permanente para almacenar las mismas publicaciones a las que se accederá a medida que vencen fuera de Redis.
Preguntas:
1. ¿Esta arquitectura contiene agua? ¿Hay una mejor manera de hacer esto?
2. En cuanto al mecanismo para almacenar publicaciones tanto en el Redis & MongoDB, estaba pensando en hacer que la aplicación haga 2 escrituras: Primero: escriba a Redis, entonces está inmediatamente disponible para los suscriptores. 2º - después de almacenar con éxito en Redis, escriba a MongoDB inmediatamente. ¿Es esta la mejor manera de hacerlo? ¿Debo hacer que Redis presione los mensajes caducados para MongoDB? Pensé en esto, pero no pude encontrar mucha información sobre cómo empujar directamente a MongoDB desde Redis.
Redis no presionará a MongoDb. Tienes que hacerlo tú mismo. O simplemente escribe en ambos lugares al mismo tiempo (como sugeriste). –
Siempre presiono a la tienda más robusta primero (MongoDB en este caso), o como sugirió Sergio, asincria al mismo tiempo. Nunca al revés. –
Mi pregunta es, ¿guardarías solo los identificadores de publicaciones en el caché o toda la lista de objetos publicados en el caché? – user636525