¿Cuánto cuesta Apache Cassandra?

Entendiendo la Eliminación de Datos en Cassandra

Valoración: 4.43 (8434 votos)

La gestión de datos en bases de datos distribuidas como Apache Cassandra o servicios compatibles como Amazon Keyspaces implica entender no solo cómo insertar y consultar información, sino también cómo se maneja su eliminación. A diferencia de otros sistemas, la eliminación en Cassandra tiene sus particularidades y comprenderlas es crucial para administrar correctamente tus datos y el espacio de almacenamiento.

Cuando decides eliminar datos utilizando la sentencia DELETE en CQL (Cassandra Query Language), inicias un proceso que marca la información como no deseada, pero no necesariamente la elimina de forma instantánea del disco. Es fundamental saber que, una vez que ejecutas una operación de eliminación, esta acción es generalmente irreversible. No existe un "deshacer" simple para recuperar los datos eliminados a través de una sentencia DELETE estándar, aunque ciertas funcionalidades como la recuperación point-in-time (PITR) en servicios gestionados como Amazon Keyspaces pueden ofrecer opciones de restauración bajo ciertas condiciones.

¿Cuales son las desventajas de Cassandra?
Desventajas de Cassandra Se requieren conocimientos especializados para una correcta configuración, y optimizar el rendimiento puede ser un desafío . Consistencia eventual: Cassandra utiliza un modelo de datos de consistencia eventual, lo que significa que puede haber cierta demora entre las actualizaciones realizadas en diferentes nodos.

La sentencia DELETE en CQL es la herramienta principal para remover datos de una tabla. Puedes aplicarla para eliminar datos a diferentes niveles, desde celdas individuales dentro de una fila hasta filas completas. Sin embargo, es vital ser extremadamente cuidadoso al ejecutar estas operaciones debido a su naturaleza irreversible.

Índice de Contenido

Eliminación a Nivel de Celda

Una de las formas más granulares de eliminar datos es a nivel de celda. Esto significa eliminar el valor contenido en una columna específica dentro de una fila determinada. Al eliminar una columna de una fila, lo que haces es remover el dato específico de esa celda. La sintaxis general para esta operación se presenta de la siguiente manera:

DELETE nombre_columna1[, nombre_columna2...] FROM nombre_tabla WHERE condicion;

La condicion en la cláusula WHERE es esencial para especificar la fila o filas de las que deseas eliminar las celdas indicadas. Esta condición típicamente involucra las columnas de la clave primaria de la tabla para identificar la fila de manera única.

Consideremos un ejemplo práctico basado en una tabla hipotética llamada book_awards, que podría almacenar información sobre premios literarios. Supongamos que, para un premio específico en un año dado, necesitas eliminar el título del libro registrado porque ha sido retirado o se registró incorrectamente.

Si tienes una tabla con columnas como year, award, category, rank, author, book_title y publisher, y la clave primaria está compuesta por year, award, category y rank, podrías tener una entrada para el premio "Richard Roe" de 2020 en la categoría "Fiction" con rango 1, donde el título del libro es "Long Summer". Para eliminar solo el título de este libro, la consulta DELETE sería:

DELETE book_title FROM catalog.book_awards WHERE year=2020 AND award='Richard Roe' AND category='Fiction' AND rank=1;

Es importante notar qué sucede al consultar esta fila después de la eliminación. Si ejecutas una sentencia SELECT para ver los datos de esta fila:

SELECT * FROM catalog.book_awards WHERE year=2020 AND award='Richard Roe' AND category='Fiction' AND rank=1;

La salida mostrará la fila con todas sus columnas, pero la columna book_title aparecerá como null. Es crucial entender que, aunque la consulta muestre null, esto no significa que se haya almacenado un valor nulo en esa ubicación de la celda. Más bien, indica que el dato que solía existir allí ha sido marcado para eliminación, y el sistema de consulta lo interpreta y presenta como un valor ausente o nulo.

Eliminación a Nivel de Fila

En ocasiones, puede que necesites eliminar una fila completa de tu tabla. Esto podría ser necesario por diversas razones, como cumplir con políticas de retención de datos o eliminar registros obsoletos o erróneos. La eliminación a nivel de fila remueve todos los datos contenidos en las celdas de esa fila específica.

La sintaxis general para eliminar una fila es más sencilla, ya que no especificas nombres de columna:

DELETE FROM nombre_tabla WHERE condicion;

Al igual que con la eliminación de celdas, la cláusula WHERE es fundamental para identificar la fila o filas que se van a eliminar. Típicamente, la condición especifica los componentes de la clave primaria para apuntar a una fila única.

Retomando el ejemplo de la tabla book_awards, si recibes una solicitud para eliminar completamente el registro del premio "Richard Roe" de 2020 en la categoría "Fiction" con rango 1, la sentencia DELETE para la fila completa sería:

DELETE FROM catalog.book_awards WHERE year=2020 AND award='Richard Roe' AND category='Fiction' AND rank=1;

Después de ejecutar esta sentencia, si intentas seleccionar la fila:

SELECT * FROM catalog.book_awards WHERE year=2020 AND award='Richard Roe' AND category='Fiction' AND rank=1;

El resultado esperado sería un conjunto de resultados vacío, indicando que no se encontraron filas que coincidan con la condición de la clave primaria, ya que la fila ha sido marcada para eliminación.

La diferencia clave entre eliminar celdas y eliminar una fila es el alcance de la operación. Eliminar celdas deja la fila existiendo, pero con ciertas columnas "vacías" (mostradas como null). Eliminar una fila marca toda la fila para eliminación, haciendo que ya no aparezca en las consultas.

Eliminación de Objetos de Base de Datos

Más allá de los datos dentro de las tablas, también puedes eliminar los contenedores de esos datos: las tablas y los espacios de claves (keyspaces).

Eliminación de Tablas

Si ya no necesitas una tabla y toda la información que contiene, puedes eliminar la tabla completa. La sentencia para esto es DROP TABLE:

DROP TABLE nombre_tabla;

Al eliminar una tabla con DROP TABLE, no solo se elimina la estructura de la tabla, sino también todos los datos contenidos en ella. Esta acción es también irreversible en cuanto a la estructura y los datos. Si deseas volver a utilizar la tabla, deberás recrearla utilizando la sentencia CREATE TABLE y luego insertar los datos nuevamente. Es fundamental comprender que eliminar todas las filas de una tabla usando DELETE no elimina la tabla en sí; la estructura de la tabla permanece y puedes insertar nuevos datos. Solo DROP TABLE elimina la tabla y sus datos de forma permanente.

Eliminación de Espacios de Claves

El nivel más alto de eliminación es el espacio de claves. Un espacio de claves (keyspace) es un contenedor para tus tablas, índices y otras configuraciones. Eliminar un espacio de claves es una operación drástica que remueve el espacio de claves y todas las tablas y datos que contiene.

La sentencia para eliminar un espacio de claves es DROP KEYSPACE:

DROP KEYSPACE nombre_espacio_claves;

Similar a DROP TABLE, esta operación es irreversible. Elimina por completo el espacio de claves y todo dentro de él. Para volver a utilizar el espacio de claves y sus tablas, deberás recrearlos y poblar las tablas con datos desde cero o desde una copia de seguridad si dispones de una.

La Naturaleza de la Eliminación en Cassandra

Es importante comprender que, internamente, cuando ejecutas una sentencia DELETE, Cassandra no elimina inmediatamente los datos del disco. En su lugar, escribe un marcador especial llamado "tombstone" (lápida) para indicar que el dato ha sido eliminado. Estos tombstones son como marcadores de "eliminado" que se replican a través del clúster. Durante las operaciones de lectura, el sistema consulta tanto los datos activos como los tombstones y filtra los datos que tienen un tombstone más reciente.

Los datos y los tombstones se eliminan físicamente del disco durante un proceso llamado "compaction". La compactación es una operación en segundo plano donde Cassandra combina varios archivos de datos (SSTables) en uno o más archivos nuevos, descartando los datos marcados por tombstones que ya no son necesarios. El tiempo que tardan los datos en ser eliminados físicamente depende de la configuración de compactación y de la frecuencia con la que ocurre.

La presencia de un gran número de tombstones puede afectar el rendimiento de lectura, ya que el sistema tiene que procesar más datos y tombstones para cada consulta. Por ello, diseñar adecuadamente tu modelo de datos para minimizar la necesidad de eliminaciones frecuentes o masivas es una buena práctica.

Caducidad Automática de Datos (TTL)

Además de las eliminaciones manuales mediante DELETE, Cassandra (y Amazon Keyspaces) ofrece una funcionalidad muy útil para la eliminación automática de datos: el Período de Vida (Time To Live, TTL). El TTL permite asignar un tiempo de vida a los datos a nivel de columna, fila o tabla.

Cuando se establece un TTL para un dato, Cassandra lo marca con una fecha de caducidad. Una vez que expira el TTL, el dato se considera "muerto" y se maneja de manera similar a un dato eliminado manualmente, aunque el proceso es gestionado automáticamente por el sistema. Los datos caducados también se eliminan físicamente durante la compactación.

La caducidad de datos con TTL es una forma eficiente de manejar datos que solo son relevantes por un período limitado, como sesiones de usuario, cachés o registros de eventos temporales. Configurar TTLs adecuados puede ayudar a gestionar el crecimiento del almacenamiento y reducir la necesidad de operaciones de eliminación manual.

En Amazon Keyspaces, por ejemplo, la caducidad de datos con período de vida (TTL) es una característica soportada que simplifica la gestión de datos temporales, permitiendo que los datos expiren y sean eliminados automáticamente sin intervención manual.

Recuperación de Datos Eliminados

Como se mencionó anteriormente, las operaciones DELETE y DROP son inherentemente irreversibles en el sentido de que no hay un comando simple para "restaurar" lo que se eliminó. Sin embargo, en entornos de producción, las estrategias de copia de seguridad y restauración son cruciales.

Servicios gestionados como Amazon Keyspaces ofrecen funcionalidades de recuperación point-in-time (PITR). La PITR permite restaurar una tabla a un punto específico en el tiempo dentro de un período de retención configurado, incluso si la tabla fue eliminada. Esto proporciona una capa de seguridad contra eliminaciones accidentales o errores de aplicación, permitiendo recuperar datos o tablas completas que de otro modo se habrían perdido de forma permanente.

Para restaurar una tabla eliminada utilizando PITR en Amazon Keyspaces, se seguirían los pasos específicos de la plataforma para seleccionar el punto de restauración deseado y recrear la tabla con los datos existentes hasta ese momento. Esta capacidad es un diferenciador importante en servicios gestionados y ofrece una red de seguridad valiosa.

Resumen de Tipos de Eliminación

Para clarificar los diferentes niveles de eliminación y sus efectos, podemos resumirlos en una tabla:

Tipo de EliminaciónSentencia CQLAlcanceEfecto Inmediato (Consulta)Efecto Final (Almacenamiento)Reversibilidad DirectaAfecta Estructura
Celda(s)DELETE columna(s) FROM tabla WHERE ...Una o más columnas en fila(s) específica(s).Celda(s) mostrada(s) como null.Datos marcados para eliminación (tombstone), eliminados en compactación.NoNo
Fila(s)DELETE FROM tabla WHERE ...Una o más filas completas.Fila(s) no aparece(n) en consultas.Datos de la fila(s) marcados para eliminación (tombstone), eliminados en compactación.NoNo
TablaDROP TABLE tabla;Tabla completa y todos sus datos.Tabla ya no existe, consultas fallan.Estructura de la tabla y todos los datos eliminados permanentemente.No
Espacio de ClavesDROP KEYSPACE keyspace;Espacio de claves y todas las tablas/datos que contiene.Espacio de claves ya no existe, consultas fallan.Estructura del espacio de claves y todas sus tablas/datos eliminados permanentemente.No
Datos por TTLConfiguración TTL en columna/fila/tabla.Datos individuales o filas completas al expirar su tiempo de vida.Datos expiran y se comportan como eliminados (no aparecen en consultas).Datos marcados para eliminación (tombstone) al expirar, eliminados en compactación.NoNo

Esta tabla ayuda a visualizar el impacto y el alcance de cada tipo de operación de eliminación.

Preguntas Frecuentes sobre la Eliminación en Cassandra

Aquí abordamos algunas preguntas comunes basadas en la información proporcionada:

¿Es posible recuperar datos eliminados con la sentencia DELETE?

No, la sentencia DELETE en CQL es una operación irreversible. Una vez ejecutada, los datos se marcan para eliminación y no hay un comando de "deshacer". La recuperación solo es posible si se tienen copias de seguridad o se utiliza una funcionalidad de restauración como la recuperación point-in-time (PITR) en servicios compatibles como Amazon Keyspaces.

Si elimino todas las filas de una tabla, ¿se elimina la tabla?

No. Utilizar la sentencia DELETE para eliminar todas las filas de una tabla deja la estructura de la tabla intacta. La tabla sigue existiendo, pero está vacía. Puedes volver a insertar datos en ella. Para eliminar la tabla en sí, debes usar la sentencia DROP TABLE.

¿Qué ocurre si elimino un espacio de claves?

Eliminar un espacio de claves (keyspace) utilizando DROP KEYSPACE es una operación importante. Elimina el espacio de claves y todas las tablas, datos y configuraciones contenidas dentro de él. Esta acción también es irreversible. Para volver a usarlo, debes recrear el espacio de claves y todas las tablas manualmente o desde una copia de seguridad.

Al eliminar una celda, ¿se almacena un valor nulo?

No. Cuando eliminas una columna (celda) en una fila, no se almacena un valor nulo en esa ubicación. En su lugar, se escribe un marcador de eliminación (tombstone). Cuando consultas la fila, el sistema interpreta la ausencia del dato (debido al tombstone) y la presenta como null en la salida de la consulta SELECT.

¿Puedo configurar que los datos se eliminen automáticamente?

Sí, puedes utilizar la funcionalidad de Período de Vida (TTL) para configurar que los datos caduquen y se marquen para eliminación automáticamente después de un período de tiempo especificado. Esto es útil para gestionar datos temporales y reducir la necesidad de eliminaciones manuales.

Conclusión

La eliminación de datos en Cassandra y sistemas compatibles como Amazon Keyspaces es un proceso que, si bien parece sencillo a través de sentencias CQL, implica un manejo interno particular basado en marcadores de eliminación y compactación. Es fundamental entender que las operaciones de DELETE y DROP son mayormente irreversibles. Conocer la diferencia entre eliminar celdas, filas, tablas y espacios de claves, así como aprovechar funcionalidades como el TTL para la caducidad automática y las opciones de restauración (como PITR en entornos gestionados) es esencial para una gestión de datos robusta y segura.

Si quieres conocer otros artículos parecidos a Entendiendo la Eliminación de Datos en Cassandra puedes visitar la categoría Bases de datos.

Ivan

Soy un entusiasta de la tecnología con especialización en bases de datos, particularmente en MySQL. A través de mis tutoriales detallados, busco desmitificar los conceptos complejos y proporcionar soluciones prácticas a los desafíos cotidianos relacionados con la gestión de datos

Aprende mas sobre MySQL

Subir