Sobre las Vistas Materializadas en Cassandra

Hoy vamos a hablar sobre Cassandra, en concreto vamos a tratar las vistas materializadas. El concepto de vista puede resultarnos familiar ya qué existen en varios sistemas de BBDD. Veremos en qué consisten, cómo se crean, y qué implicaciones tienen. ¡Manos a la obra!

¿Qué es una vista materializada?

Una vista materializa (materialized view, MV) es un objeto de base de datos que almacena resultados de una consulta. Cassandra crea una tabla en base a los datos de otra, con una clave primaria y propiedades diferentes. Hay algunas consideraciones que hay que tener en cuenta cuando queremos crear una vista materializada:

  1. Las columnas de la clave primaria de la tabla fuente, deben ser parte de la clave primaria de la MV.
  2. Sólo una columna adicional puede ser incluida en la clave primaria de la MV.

Código de ejemplo:

-- 1) Definición de la tabla fuente
CREATE TABLE demo.coche_por_id (
  coche_id TEXT,
  propietario_id TEXT,
  propietario_ciudad TEXT,
  coche_marca TEXT,
  coche_modelo TEXT,
  PRIMARY KEY ((coche_id), propietario_id)
);

-- 2) Creación de la vista materializada
CREATE MATERIALIZED VIEW demo.coche_por_propietario
  AS SELECT propietario_id
         , coche_id
       FROM demo.coche_por_id
	   WHERE propietario_id IS NOT NULL
       PRIMARY KEY ((propietario_id), coche_id);

¿Qué implicaciones tienen?

Hay una serie de implicaciones respecto a las vistas materializadas que debemos tener en cuenta antes de usarlas:

  • Sólo podemos realizar operaciones de escritura (INSERTs, UPDATEs) en la tabla fuente. La MV se actualizará de forma asíncrona. El cambio ocurrirá, pero sin garantía de cuándo.
  • Se realiza una operación de lectura interna por cada escritura en la MV.
  • Cassandra no tiene forma de detectar y arreglar posibles inconsistencias entre la tabla fuente y la vista.
  • Las reparaciones incrementales en la tabla fuente dejan de estar disponibles. Se puede seguir usando las reparaciones completas, pero son más costosas.
  • En las versiones más recientes de Cassandra, hay una opción de configuración para habilitar/deshabilitar la creación de vistas materializadas. Deshabilitadas por defecto, inclusive en Cassandra 4.

Aún hay más que debes saber antes de usar una vista materializada, en el momento de creación este es el mensaje que devuelve Cassandra:

Así es, las vistas materializadas son experimentales y no están recomendadas para uso en entornos de producción.

Alternativas

Podemos usar otras alternativas a las vistas materializadas. Se puede revisar la consulta a la que queríamos dar soporte con la vista, e intentar ver alguna forma de modificar la tabla fuente para que cubra su misión orginal, más la de la vista. Si esto no es posible se puede hacer lo siguiente:

  1. Crear una tabla adicional con las columnas y clave primaria que iba a tener la vista.
  2. La consistencia de datos de las dos tablas tiene que ser controlada desde el código de la aplicación.
  3. Cada escritura y borrado de datos debe hacerse en ambas tablas. Las claususlas BATCH de CQL pueden ayudar en esto.

Resumen

Hemos visto qué son las vistas materializadas, cómo se crean y qué consideraciones se deben tener en cuenta. Espero que lo aquí contado te pueda servir de ayuda para tomar cualquier decisión en el futuro. Personalmente, creo que las vistas materializadas en Apache Cassandra serán un recurso muy útil en algún moento, pero no aún.

¡Hasta el próximo artículo!

Referencias

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s