En mi proyecto actual, tengo PostgreSQL como mi base de datos maestra y Redis como una especie de esclavo, por ejemplo, cuando un usuario agrega a otro como amigo, primero la relación se almacena en PostgreSQL y luego aparece una lista de amigos en Redis. estar actualizado. Cuando se solicita la lista de amigos de algún usuario, se eliminará de Redis en lugar de PostgreSQL.¿Debo confiar en Redis para la integridad de los datos?
La pregunta es: cuando actualizo la lista de amigos en Redis, debería obtener una copia nueva de PostgreSQL, y reemplazar la lista anterior en Redis por la nueva o debería conservar la lista anterior y simplemente SADD el ID de usuario en ¿la lista? Este último es, por supuesto, mejor para el rendimiento, pero intuitivamente el primero hace un mejor trabajo para mantener la integridad de los datos. Y si se usa algo así como Apio, ¿vale la pena el segundo método?
+1 - estoy de acuerdo ... y además señalo/advierto que la opción de usar redis como el esclavo en lugar del maestro en este escenario me parece extraña. si la escalabilidad supera los requisitos de coherencia en este escenario, ¿por qué no utilizar redis como fuente autorizada (configuración de espacios de claves verticalmente fragmentados si un solo servidor no manejará la carga) y luego replicar a cassandra o algún otro almacén escalable horizontalmente? – codemonkey
@Sripathi, soy plenamente consciente del problema que mencionas, no importa el método que elija, la corrupción de datos ocurrirá al mismo ritmo, pero ¿es este el único lugar donde ocurre la corrupción? Dado que Redis no cumple con el ACID, me gustaría saber con qué frecuencia debo reconstruir sus datos del maestro, o es práctico tratarlo como ACID (en este caso específico, por supuesto). – Jiaji
@codemonkey De hecho, necesito consistencia, así que elijo Postgres como maestro, ya que los datos de Redis se pueden reconstruir a partir de él, en teoría los datos enviados a los usuarios se pueden hacer 'casi' consistentes. – Jiaji