all repos — gemini-redirect @ bb4c617475d7a9c420ce2ec06fbf54e2e4a5e01b

content/blog/mdad/cassandra-introduccion/index.md (view raw)

  1+++
  2title = "Cassandra: Introducción"
  3date = 2020-03-05T00:00:33+00:00
  4updated = 2020-03-30T09:28:07+00:00
  5+++
  6
  7![](1200px-Cassandra_logo.png)
  8
  9Este es el primer post en la serie sobre Cassandra, en el cuál introduciremos dicha bases de datos NoSQL y veremos sus características e instalación.
 10
 11Otros posts en esta serie:
 12
 13* [Cassandra: Introducción](/blog/mdad/cassandra-introduccion/) (este post)
 14* [Cassandra: Operaciones Básicas y Arquitectura](/blog/mdad/cassandra-operaciones-basicas-y-arquitectura/)
 15
 16Este post está hecho en colaboración con un compañero.
 17
 18----------
 19
 20## Finalidad de la tecnología
 21
 22Apache Cassandra es una base de datos NoSQL distribuida y de código abierto ([con un espejo en GitHub](https://github.com/apache/cassandra)). Su filosofía es de tipo «clave-valor», y puede manejar grandes volúmenes de datos
 23
 24Entre sus objetivos, busca ser escalable horizontalmente (puede replicarse en varios centros manteniendo la latencia baja) y alta disponibilidad sin ceder en rendimiento.
 25
 26## Cómo funciona
 27
 28Instancias de Cassandra se distribuyen en nodos iguales (es decir, no hay maestro-esclavo) que se comunican entre sí (P2P). De este modo, da buen soporte entre varios centros de datos, con redundancia y réplicas síncronas.
 29
 30![](multiple-data-centers-and-data-replication-in-cassandra.jpg)
 31
 32Con respecto al modelo de datos, Cassandra particiona las filas con el objetivo de re-organizarla a lo largo distintas tablas. Como clave primaria, se usa un primer componente conocido como «clave de la partición». Dentro de cada partición, las filas se agrupan según el resto de columnas de la clave. Cualquier otra columna se puede indexar independientemente de la clave primaria.
 33
 34Las tablas se pueden crear, borrar, actualizar y consultar sin bloqueos. No hay soporte para JOIN o subconsultas, pero Cassandra prefiere de-normalizar los datos haciendo uso de características como coleciones.
 35
 36Para realizar las operaciones sobre cassandra se usa CQL (Cassandra Query Language), que tiene una sintaxis muy similar a SQL.
 37
 38## Características
 39
 40Como ya hemos mencionado antes, la arquitectura de Cassandra es **decentralizada**. No tiene un único punto que pudiera fallar porque todos los nodos son iguales (sin maestros), y por lo tanto, cualquiera puede dar servicio a la petición.
 41
 42Los datos se encuentran **replicados** entre los distintos nodos del clúster (lo que ofrece gran **tolerancia a fallos** sin necesidad de interrumpir la aplicación), y es trivial **escalar** añadiendo más nodos al sistema.
 43
 44El nivel de **consistencia** para lecturas y escrituras es configurable.
 45
 46Siendo de la familia Apache, Cassandra ofrece integración con Apache Hadoop para tener soporte MapReduce.
 47
 48## Arista dentro del Teorema CAP
 49
 50Cassandra se encuentra dentro de la esquina «AP» junto con CouchDB y otros, porque garantiza tanto la disponibilidad como la tolerancia a fallos.
 51
 52Sin embargo, puede configurarse como un sistema «CP» si se prefiere respetar la consistencia en todo momento.
 53
 54![](0.jpeg)
 55
 56## Descarga
 57
 58Se pueden seguir las instrucciones de la página oficial para [descargar Cassandra](https://cassandra.apache.org/download/). Para ello, se debe clicar en la [última versión para descargar el archivo](https://www.apache.org/dyn/closer.lua/cassandra/3.11.6/apache-cassandra-3.11.6-bin.tar.gz). En nuestro caso, esto es el enlace nombrado «3.11.6», versión que utilizamos.
 59
 60## Instalación
 61
 62Cassandra no ofrece binarios para Windows, por lo que usaremos Linux para instalarlo. En nuestro caso, tenemos un sistema Linux Mint (derivado de Ubuntu), pero una máquina virtual con cualquier Linux debería funcionar.
 63
 64Debemos asegurarnos de tener Java y Python 2 instalado mediante el siguiente comando:
 65
 66```
 67apt install openjdk-8-jdk openjdk-8-jre python2.7
 68```
 69
 70Para verificar que la instalación ha sido correcta, podemos mostrar las versiones de los programas:
 71
 72```
 73$ java -version
 74openjdk version "1.8.0_242"
 75OpenJDK Runtime Environment (build 1.8.0_242-8u242-b08-0ubuntu3~18.04-b08)
 76OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)
 77
 78$ python2 --version
 79Python 2.7.17
 80```
 81
 82Una vez las dependencias estén instaladas, extraemos el fichero descargado o bien mediante la interfaz gráfica de nuestro sistema, o bien mediante un comando:
 83
 84```
 85tar xf apache-cassandra-3.11.6-bin.tar.gz
 86```
 87
 88Y finalmente, lanzar la ejecución de Cassandra:
 89
 90```
 91apache-cassandra-3.11.6/bin/cassandra
 92```
 93
 94Es posible que tarde un poco en abrirse, pero luego debería haber muchas líneas de log indicando. Para apagar el servidor, simplemente basta con pulsar `Ctrl+C`.
 95
 96## Referencias
 97
 98* [Apache Cassandra Architecture Fundamentals – The Distributed SQL Blog](https://blog.yugabyte.com/apache-cassandra-architecture-how-it-works-lightweight-transactions/)
 99* [Apache Cassandra](https://cassandra.apache.org/)
100* [How Apache Cassandra™ Balances Consistency, Availability, and Performance – Datasax](https://www.datastax.com/blog/2019/05/how-apache-cassandratm-balances-consistency-availability-and-performance)
101* [Apache Cassandra Architecture Fundamentals](https://blog.yugabyte.com/apache-cassandra-architecture-how-it-works-lightweight-transactions/)