cassandra - Sobrescribir fila en Casandra con INSERT, ¿causará lápida?
cassandra-2.0 tombstone (2)
Escribir datos a Cassandra sin causar que cree lápidas sepulcrales es vital en nuestro caso, debido a la cantidad de datos y la velocidad. Actualmente solo hemos escrito una fila una vez, y luego nunca tuvimos la necesidad de actualizar la fila nuevamente, solo buscamos los datos nuevamente.
Ahora ha habido un caso en el que realmente necesitamos escribir datos y luego completarlo con más datos, que finaliza después de un tiempo. Puede ser hecho por cualquiera;
sobrescribir todos los datos en una fila de nuevo con INSERT (todos los datos están disponibles), o
realizar una actualización solo en los nuevos datos.
¿Cuál es la mejor manera de hacerlo, tener en cuenta la velocidad y no crear una lápida es de importancia?
Las piedras sepulcrales solo se crearán al borrar datos o al usar valores TTL.
Cassandra se alinea muy bien con su caso de uso descrito. La adición gradual de datos funcionará para las instrucciones INSERT y UPDATE. Cassandra almacenará los datos en diferentes ubicaciones en caso de agregar datos a lo largo del tiempo para la misma clave de partición. Las comparaciones que se ejecutan periódicamente fusionarán los datos de una sola clave para optimizar el acceso y liberar espacio en el disco. Esto sucederá según la marca de tiempo de los valores escritos, pero no crea ninguna lápida nueva. Puede obtener más información acerca de cómo Cassandra almacena datos, por ejemplo, aquí .
Sería más eficiente hacer una actualización para agregar datos nuevos o modificados. No es necesario volver a escribir los datos antiguos que no cambian y sería ineficiente hacer que Cassandra lo reescriba.
Cuando realiza una inserción o actualización, Cassandra mantiene una marca de tiempo para el tiempo de modificación para cada columna. Cuando lee, Cassandra recopila todas las escrituras de esa clave en la memoria, en el disco y en otras réplicas, según la configuración de consistencia. Luego combinará los datos de la columna para que se use el valor más nuevo para cada columna.
Cuando los datos se compactan en el disco, si hay actualizaciones separadas para diferentes columnas de una fila, se combinarán en una sola fila en los datos compactados.
No necesita preocuparse por crear lápidas sepulcrales realizando una actualización a menos que esté utilizando una actualización para establecer un valor TTL (Time To Live). En tu aplicación, parece que nunca borras datos, por lo que nunca tendrás lápidas sepulcrales.