español - Con la capacidad de leer solo, escribe consistencia en Cassandra
cqlsh (2)
Buena pregunta.
Hemos tenido http://issues.apache.org/jira/browse/CASSANDRA-876 abierto por un tiempo para agregar esto, pero nadie se molestó en terminarlo porque
- CL.ONE está bien para MUCHAS cargas de trabajo sin ninguna gimnasia adicional
- De todos modos, las lecturas son tan rápidas que hacer una extra no es gran cosa (y de hecho, Read Repair, que está activada por defecto, significa que todos los nodos se verifican de todos modos, así que la diferencia entre CL.ONE y superior es más sobre disponibilidad que el rendimiento)
Dicho esto, si está motivado para ayudar, pregunte en el boleto y con gusto lo guiaré en la dirección correcta.
La coherencia de lectura-propia-escritura es una gran mejora de la llamada consistencia eventual: si cambio mi foto de perfil, no me importa si los demás ven el cambio un minuto después, pero parece extraño si después de cargar una página todavía veo el viejo.
¿Se puede lograr esto en Cassandra sin tener que hacer una verificación de lectura completa en más de un nodo?
Usar ConsistencyLevel.QUORUM
está bien mientras lee datos no especificados y n> 1 nodos se están leyendo realmente. Sin embargo, cuando el cliente lee desde el mismo nodo en el que escribe (y utiliza la misma conexión), puede ser un desperdicio: algunas bases de datos siempre asegurarán que se devuelvan los datos (mis) escritos previamente, y no algunos más antiguos. Usar ConsistencyLevel.ONE
no garantiza esto y suponiendo que conduzca a condiciones de carrera. Algunas pruebas mostraron esto: http://cassandra-user-incubator-apache-org.3065146.n2.nabble.com/per-connection-quot-read-after-my-write-quot-consistency-td6018377.html
Mi configuración hipotética para este escenario es de 2 nodos, factor de replicación 2, nivel de lectura 1, nivel de escritura 1. Esto conduce a una consistencia eventual , pero quiero la consistencia de las escrituras de lectura por escrito en las lecturas.
Usando 3 nodos, RF = 3, RL = quorum y WL = quorum en mi opinión lleva a una solicitud de lectura derrochadora si ser consistente solo con "mis" datos es suficiente.
// seo: también conocido como: consistencia de sesión, consistencia de lectura después de mi escritura
He estado siguiendo el desarrollo de Cassandra por un tiempo y no he visto una característica como esta mencionada.
Dicho esto, si solo tienes 2 nodos con un factor de replicación de 2, me preguntaría si Cassandra es la mejor solución. Va a terminar con todo el conjunto de datos en cada nodo, por lo que una configuración de SQL replicado más tradicional podría ser más simple y más ampliamente probada. Cassandra es muy prometedora, pero sigue siendo solo la versión 0.8.2 y los problemas se informan regularmente en la lista de correo.
La otra forma de resolver el problema de "ver mis propias actualizaciones" sería almacenar en caché los resultados en un lugar más cercano al cliente, ya sea en el servidor web, en la capa de la aplicación o utilizando algo como memcached.