Cassandra ¿qué es y cuándo usarla?

Cassandra

Cassandra


En esta nueva entrada de refactorizando, Cassandra qué es y cuándo usarla, vamos a hablar sobre los principios y características básicas de esta Base de Datos NoSql así como cuando nos vendrá bien su uso.

Qué son las bases de datos NoSQL

Una base de datos NoSQL, es un tipo de base de datos que se diferencia de los modelos relacionales en que no usan SQL como lenguaje principal, proporcionado lenguajes propios y modelos más flexibles en las consultas.

Tipos de Bases de Datos NoSQL

Podemos reducir a 4 los tipos de Bases de Datos NoSQL que existen:

  • Base de Datos Columnar: Al igual que ocurre con las bases de datos SQL, se guarda la información en columnas. Cassandra es un claro ejemplo de este tipo de Bases de Datos.
  • Clave Valor: Esta base de datos almacena los datos en forma clave valor. Pueden almacenar la informacion en memoria o persistirla un ejemplo podr’ia ser redis.
  • Orientadas a Documentos: Este tipo de base de datos permite la recuperaci’on, guardado y gesti’on de documentos o datos de alguna manera estructurada.
  • Orientadas a Grafos: Este tipo de base de datos est’an formados por nodos y aristas, y parten de la teor’ia de Grafos (Dijkstra, es un ejemplo). Un ejemplo podr’ia ser ArangoDB.

Orígen de Cassandra

Cassandra hizó su aparición en 2008 para ser liberado como proyecto open source. En un principio fue creado por Facebook, que fue desarrollado con el objetivo de mejorar las búsquedas de su inbox. Desde el año 2010, el proyecto paso a ser mantenido por la fundación Apache.

Cassandra fue creado por la influencia de Amazon Dynamo y de Google BigTable. Y como curiosidad final de su historia, el nombre se debe a la sacerdotisa Cassandra, de la mitología griega, la cual podía dar profecías y acertó sobre el engaño que era el Caballo de Troya.

Características principales de Cassandra

  • Facilidad de escalado: Cassandra es altamente escalable permitiendo con facilidad más recursos.
  • Tolerancia a fallos: Cassandra es tolerante a fallos, cada nodo funciona de manera independiente, si uno se cae se sigue dando servicio con el resto.
  • Almacenamiento flexible: Se permite el almacenaje de estructuras flexibles, por ejemplo, no todos los registros deben tener el mismo número de columnas.
  • Soporta ACID: Atomicity, Consistency, Isolation, y Durability. 
  • Escrituras rápidas.
  • No tiene punto único de fallo. No tiene un único punto de fallo al trabajar con nodos independientes.
  • La información puede ser particionada entre varios nodos.
  • Los datos tienen un tiempo de vida, por lo que no es necesario borrar de la base de datos.
  • Lenguaje de queries propio: Cassandra Query Languaje (CQL), se puede utilizar cqlsh por línea de comando para interactuar con la base de datos.

Arquitectura de Cassandra

El objetivo principal de Cassandra es poder gestionar una gran carga de datos através de multiples nodos. Cassandra replica y distribuye la información desde el primer instante através de todos sus nodos.

Todos los nodos en el cluster tienen el mismo papel, y para ofrecer la replicación desde el principio necesitan que todos los nodos se encuentren conectados entre si. En el caso en el que un nodo se caíga o falle, otro nodo funcionará en su lugar, por eso cada nodo tiene que funcionar de manera totalmente independiente.

En un cluster de Cassandra, varios nodos pueden actuar como replicas, y si se detecta que alguno de estos nodos responde con información desactualizada, se buscará la información más actualizada para devolverla. Una vez se ha devuelto la información, se actualizará el valor del nodo para que tenga la información completamente actualizada.

Cassandra Arquitectura | Cassandra, ¿qué es y cuándo usarla?
Cassandra Arquitectura

Para que los nodos se comuniquen uno con otro y se puedan detectar puntos de fallo, se utiliza el protocolo gossip.

Componentes de Cassandra

Cassandra se suele componer de los siguientes componentes:

  • Nodo: Componente básicos de cualquier instalación, es el lugar en el que la información es guardada.
  • Data Center: Es una colección o grupos de nodos.
  • Cluster: Es una colección de data centers.
  • Commit log: Al igual que otras bases de datos, Cassandra tiene un mecanismo de recuperación, para ello escribe todas las operaciones que realiza en un log.
  • Mem table: Este componente es una estructura en memoria, por el cual se escribe la información después de hacer el commit log.
  • SSTable: Se escribe la inforamción desde la mem table a disco.
  • Bloom filter: es una esctructura que es usada para conocer si un elemento esta presente en la base de datos. Es un algoritmo que se podría decir que es una especie de cache, es extremadamente rápido.

¿Cuándo usar Cassandra?

Después de ver sus principales características y su arquitectura, es turno de ver cuándo puede ser mejor usar Cassandra como base de datos columnar.

Cuando cumplamos con los siguientes puntos será un buen momento para plantearnos Cassandra:

  • Como hemos comentado, las escrituras son muy rápidas, por lo que cuando tengamos un gran número de escrituras que supere las lecturas será buen momento para empezar a pensar en Cassandra.
  • Si la lectura es realizada a través de una primary key, ya que de otro modo la lectura será muy penalizada.
  • En el caso en el que necesitemos guardar datos de una manera flexible, es decir, no teniendo todos los campos de nuestra escturctura.
  • Siempre y cuando no pensemos en realizar joins.
  • Cuando la información sea actualizada de manera idempotente.

Ejemplos de Casos de Uso para Cassandra

A continuación mostramos algunos de los que podrían ser los casos de uso de Cassandra

Aplicaciones de mensajes

Una de los factores que penaliza a Cassandra son las actualizaciones, así que en aplicaciones de mensajes como Chats, es un buen caso de uso. Ya que permite la escritura de los mensajes de forma rápida y eficaz. Además puedes crear mensajes de manera temporal gracias a la característica de Cassandra de borrarlos pasados un tiempo.

Aplicaciones meteorológicas

Cassandra es capaz de almacenar grandes cantidades de información de forma rápida, por lo que para las aplicaciones meteorológicas en las que se va a necesitar guardar y procesar grandes cantidades de dato es un buen caso de uso.

Industria o servicios con gran carga de datos

Servicios de salud, de logística, industria o agricultura, deben de procesar y guardar grandes cantidades de datos casi en tiempo real. Por lo que para estos casos Cassandra, permite una buena gestión del flujo de datos de entrada para poder brindar un análisis de los datos en tiempo real.

Tracking en Webs

Cassandra puede ser un buen ejemplo para ser usada en sitios web, en las que se podrá almacenar datos y acciones de los usuarios, para por ejemplo incluso poder crear un motor de recomendación.

Internet of Things

El uso del internet de las cosas es cada vez más habitual, y para ello se buscan bases de datos que sean capaz de guardar datos de una manera ágil y rápida. Debido a que las aplicaciones de IoT necesitan guardar grandes cantidades de datos, esta es una de las bases de datos más utilizadas para esta finalidad.

Conclusión

Antes de comenzar a usar Cassandra lo mejor será realizar un análisis en profundidad para saber si encaja con tu caso de Uso. Por lo general va a ser una buena elección cuando las escrituras primen sobre las búsquedas y la carga sea muy alta. En mi experiencia fue usada para una aplicación de IoT, en la que se guardaban gran cantidad de datos en tiempo real. Nuestra elección fue Cassandra por el hecho de que se necesitaban guardar los datos muy rápidos para luego ser analizados.

Esperamos que esta entrada de refactorizando sobre Cassandra, qué es y cuándo usarla, te haya ayudado a conocer un poco más sobre esta base de datos.

Síguenos en nuestras redes sociales a través de Facebook o Twitter para estar al día de nuestros artículos.


1 pensamiento sobre “Cassandra ¿qué es y cuándo usarla?

  1. Controllers Todas las acciones de la API. Un controlador por determinadas acciones (no mas de 5 metodos) Es una clase abstracta que tiene un metodo register que sirve para mapear Interface – Clase instanciable de modo que cuando se desee hacer una inyeccion de dependencia usando una interfaz, esta se lleve acabo (normalmente usando ReflectionClass ) consultando al ServiceProvider.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *