versiones que commands cassandra cql

que - install cassandra



¿Una ACTUALIZACIÓN se convierte en un INSERT implícito? (2)

Para Cassandra, ¿las UPDATE convierten en un INSERT implícito si la fila seleccionada no existe? Es decir, si digo

UPDATE users SET name = "Raedwald" WHERE id = 545127

e id es la PRIMARY KEY de la tabla de users , y la tabla no tiene una fila con una clave de 545127, ¿será eso equivalente a

INSERT INTO users (id, name) VALUES (545127, "Raedwald")

Sé que lo contrario es cierto: un INSERT para un id que ya existe se convierte en una UPDATE de la fila con ese id . La documentación anterior de Cassandra hablaba sobre inserciones que en realidad son "actualizaciones" por esa razón.

Estoy interesado en el caso de CQL3, Cassandra versión 1.2+.


Lo que uno puede hacer es esto sin embargo:

UPDATE table_name SET field = false WHERE key = 55 IF EXISTS;

Esto asegurará que su actualización sea una verdadera actualización y no un cambio de imagen.


Sí, para Cassandra UPDATE es sinónimo de INSERT , como se explica en la documentación de CQL donde dice lo siguiente acerca de UPDATE :

Tenga en cuenta que, a diferencia de SQL, UPDATE no comprueba la existencia previa de la fila: la fila se crea si no existía antes, y se actualiza de otra manera. Además, no hay ningún medio para saber cuál de la creación o actualización ocurrió. De hecho, la semántica de INSERT y UPDATE son idénticas.

Para que la semántica sea diferente, Cassandra debería hacer una lectura para saber si la fila ya existe. Cassandra está optimizada para escritura, por lo que siempre puede asumir que no hace una lectura antes de escribir en cualquier operación de escritura. La única excepción son los contadores (a menos que replicate_on_write = false ), en cuyo caso la replicación en incremento implica una lectura.