Trabajo Grupal Apache Cassandra
Trabajo Grupal Apache Cassandra
FACULTAD DE INGENIERÍA
TALAVERA – APURÍMAC
PERÚ
Mayo, 2023.
INTRODUCCIÓN
1.4. Presupuesto:
En el presente proyecto también tenemos que tener en cuenta los recursos materiales,
recursos de trabajo y recursos de costo necesarios para el cumplimiento de cada tarea.
2.2. OBJETIVOS
El análisis de datos masivos, también conocido como Big Data, se refiere al proceso de
recolección, almacenamiento y análisis de grandes volúmenes de datos que no pueden ser
gestionados de manera efectiva con herramientas tradicionales. El Big Data se caracteriza
por las siguientes características: volumen, variedad, valor, veracidad y velocidad, lo que
implica que los datos se generan en grandes cantidades, en diferentes formatos y a una
velocidad cada vez más rápida. Para abordar estos desafíos, se utilizan tecnologías como
Hadoop y MapReduce, que permiten el procesamiento distribuido de datos a gran escala.
Puesto que el Big Data no deja de crecer, las herramientas que se usan para gestionarlo
también crecen y evolucionan permanentemente. Las organizaciones utilizan
herramientas como Hadoop, Pig, Hive, Cassandra, Spark o Kafka, dependiendo de los
requisitos específicos que tengan.
2.3.3. NoSQL
El concepto de bases de datos NoSQL se hizo popular entre los gigantes de Internet como
Google, Facebook, Amazon, etc., que manejan grandes volúmenes de datos. El tiempo de
respuesta del sistema se vuelve lento cuando usa RDBMS para volúmenes masivos de
datos.
Las bases de datos NoSQL se han desarrollado para abordar las limitaciones de
escalabilidad y rendimiento de las bases de datos SQL en entornos con alta concurrencia
y grandes volúmenes de datos.
2.3.5. Tipos de bases de datos NoSQL
Las bases de datos NoSQL se han desarrollado para abordar las limitaciones de
escalabilidad y rendimiento de las bases de datos SQL en entornos con alta concurrencia
y grandes volúmenes de datos. Las bases de datos NoSQL se clasifican principalmente
en cuatro tipos:
Almacenan datos en pares clave-valor simples, donde cada valor está asociado con una
clave única. Estas bases de datos son rápidas y eficientes para recuperar datos por clave.
Está diseñado de tal manera que pueda manejar muchos datos y cargas pesadas.
Las bases de datos de almacenamiento de pares clave-valor almacenan datos como una
tabla hash donde cada clave es única y el valor puede ser un JSON, BLOB (objetos
binarios grandes), una cadena, etc.
Ilustración 4: Ejemplo, la clave "Name" está asociada con un valor "Joe Bloggs".
2.3.5.2. Bases de datos de columnas
Almacenan datos en columnas en lugar de filas, lo que permite una recuperación eficiente
de datos seleccionados y un mejor rendimiento en análisis de datos. Cada columna se trata
por separado. Los valores de las bases de datos de una sola columna se almacenan de
forma contigua.
Las bases de datos NoSQL basadas en columnas se utilizan ampliamente para administrar
almacenes de datos, inteligencia comercial, CRM, catálogos de tarjetas de biblioteca.
La base de datos NoSQL orientada a documentos almacena y recupera datos como un par
de valores clave, pero la parte del valor se almacena como un documento. El documento
se almacena en formato JSON o XML. El DB entiende el valor y se puede consultar.
Amazon SimpleDB, CouchDB, MongoDB, Riak, Lotus Notes, MongoDB, son populares
sistemas DBMS originados en documentos.
Utilizan estructuras de grafos para representar y relacionar los datos. Estas bases de datos
son útiles para modelar relaciones complejas entre entidades.
Una base de datos de tipo gráfico almacena entidades, así como las relaciones entre esas
entidades. La entidad se almacena como un nodo con la relación como bordes. Un borde
da una relación entre los nodos. Cada nodo y borde tiene un identificador único.
Neo4J, Infinite Graph, OrientDB, FlockDB son algunas bases de datos populares basadas
en gráficos.
El teorema CAP ha sido ampliamente adoptado por las grandes compañías de internet, al
igual que por la comunidad NoSQL. Las siglas CAP hacen referencia a:
a) Consistencia (Consistency): Todos los nodos en el sistema ven los mismos datos al
mismo tiempo. En otras palabras, cuando se realiza una escritura en un nodo, todas
las lecturas subsiguientes en cualquier nodo obtienen los datos más actualizados.
b) Disponibilidad (Availability): El sistema sigue funcionando y responde a las
solicitudes incluso cuando algunos nodos fallan o están inaccesibles.
c) Tolerancia a partición (Partition tolerance): El sistema continúa funcionando
correctamente incluso cuando se producen fallas en la red que provocan la partición
del sistema en múltiples segmentos que no pueden comunicarse entre sí.
C
A P
Podemos deducir que se puede “elegir” dos de estas 3 características par nuestro sistema
de datos compartidos. De esta manera se tiene:
2.3.9. Características
Apache Cassandra se caracteriza por una serie de características distintivas que lo hacen
adecuado para el manejo de grandes volúmenes de datos y entornos distribuidos. Algunas
de las principales características de Apache Cassandra son:
Apache Cassandra 0.6: Lanzada en julio de 2010, esta fue una de las primeras
versiones estables de Cassandra que se lanzó como un proyecto de nivel superior
de la Apache Software Foundation.
Apache Cassandra 0.7: Lanzada en enero de 2011, esta versión introdujo
importantes mejoras en el rendimiento y la escalabilidad, incluida la capacidad de
compresión de datos y mejoras en el modelo de replicación.
Apache Cassandra 1.0: Lanzada en octubre de 2011, esta versión marcó un hito
importante al presentar CQL (Cassandra Query Language), que proporcionó una
interfaz similar a SQL para realizar consultas en Cassandra.
Apache Cassandra 2.0: Lanzada en septiembre de 2013, esta versión trajo
importantes mejoras en la escalabilidad y el rendimiento, incluyendo el soporte
para índices secundarios, mejoras en la compresión de datos y un nuevo sistema
de almacenamiento de archivos SSTable.
Apache Cassandra 3.0: Lanzada en noviembre de 2015, esta versión se centró
en mejorar la estabilidad y la confiabilidad, así como en la introducción de nuevas
características como la compresión de datos en tiempo real, mejoras en el
rendimiento de escritura y la capacidad de configurar la duración de la retención
de datos.
Apache Cassandra 4.0: Lanzada en diciembre de 2020, esta es la versión más
reciente y cuenta con importantes mejoras en el rendimiento, la escalabilidad y la
administración de clústeres, incluyendo mejoras en la compresión de datos,
soporte para operaciones atómicas y una nueva implementación de la memoria
caché de lectura.
2.3.12.1. Nodos
2.3.12.3. Particionamiento
2.3.12.4. Réplicas
2.3.12.5. Coordinación
2.3.13.1. Seguridad
Cassandra es una base de datos NoSQL orientada a columnas. Su modelo de datos se basa
en una serie de column families que a su vez se contienen columnas, que pueden darse
ninguna, una o varias veces para un mismo elemento.
2.3.14.1. Clúster
Cassandra es una base de datos que está diseñada e ideada para funcionar
formando clústers de máquinas. Es decir, si se quiere aprovechar al máximo todo
el rendimiento y la funcionalidad que nos ofrece esta base de datos, no se deberá
correr en un único nodo, sino de forma distribuida en varios nodos. Y cuanto más
distribuido mejor: si es en varios racks mejor, y si además se ubican en varios
CPDs, Casandra dará un mejor rendimiento a la aplicación.
El protocolo peer-to-peer hace que los nodos se comuniquen entre ellos para
conocer su estado y repliquen los datos de forma transparente a usuario.
2.3.14.2. Keyspaces
Cada column family tiene un nombre único y se define dentro de un keyspace, las
column families están compuestas por filas y columnas. Cada fila tiene una clave
de fila única y contiene una o más columnas. A su vez, cada columna tiene un
nombre único y un valor asociado. Las columnas pueden ser agrupadas en
supercolumnas, lo que proporciona una capa adicional de organización y
estructura. Además, las column families en Cassandra admiten operaciones
CRUD (create, read, update, delete) para manipular los datos almacenados.
2.3.14.4. Columns
Las columnas son las unidades mínimas que alojan información en Cassandra. La
información que contiene el valor de cada columna está conformado por un array
de bytes.
[Keyspace][ColumnFamily][Key][SuperColumn][Subcolumn]
Para definir una supercolumna, simplemente hay que generar una column family
como si fuera de tipo super. De esta manera, este tipo de column families se
pueden utilizar como si fueran un tipo de column family normal, únicamente
habría que indicar explícitamente el nombre de la super columna.
Antes de saltar al modelado de datos con Cassandra, es útil explicar algunas diferencias
entre Cassandra y las bases de datos relacionales. Las bases de datos relacionales de alto
nivel priorizan el espacio sobre el tiempo de respuesta. Cassandra prioriza el tiempo de
respuesta sobre el espacio.
Cassandra Query Language (CQL) es el lenguaje que utiliza para realizar el acceso a la
base de datos. En Cassandra los datos están desnormalizado por lo cual como hemos
comentado antes los JOIN no puede ser posible realizar como ocurre en las bases de datos
relacionales. Para poder interactuar con Cassandra mediante CQL tendremos que
introducir a través de la shell de la propia base de datos el comando cqlshell, aunque
también podemos utilizar herramientas gráficas o a través de los drivers soportados por
múltiples lenguajes de programación.
Un keyspace es el contenedor más exterior y debería ser creado antes que cualquier cosa,
así que para poder realizar la creación de un keyspace tendremos que introducir el
siguiente comando:
Hay un dato a tener en cuenta y es que tenemos que definir como deseamos realizar la
réplica de los datos, dependiendo de la opción que pongamos, nos realizará un tipo de
réplica u otro, existen dos opciones de replicado que se explican a continuación.
En el caso que deseemos realizar desde fuera de la base de datos (fuera de la shell de
CQL) tendremos que realizarlo con el siguiente comando:
Con esta modificación estamos indicando que deseamos ajustar el número de réplicas
disponibles de este keyspace, cambiando el valor de 1 a 3.
• Seleccionar. En el momento que deseemos usar este keyspace lo único que tendremos
que realizar es la introducción del siguiente comando
El concepto más equivalente en Cassandra de una Tabla en una base de datos relacional
es una Familia de Columnas, que dichas familias de columnas almacenan una Super
Columna o Columna, las cuales almacena las filas con los datos que son introducidos en
la base de datos.
• Crear, Para poder realizar la creación de una “tabla”, tendremos que introducir el
siguiente comando en el cual estamos indicando los tipos de campos de las columnas,
además de indicar su correspondiente primary key.
Es recomendable indicar una fecha de registro e indicar dos primary keys, para que la
primera sirva para definir la partitionkey y la segunda sea para definir el clustering key y
van en ese orden.
Aunque también podremos definir la primary key y la clustering key de forma compuesta
(que cada una está compuesta por más de uno).
Numéricos:
▪ Int: enteros de hasta 32 bits.
▪ Bigint: enteros de hasta 64 bits.
▪ Smallint: enteros de hasta 2 bytes.
▪ Tinyint: enteros de hasta 1 byte.
▪ Varint: enteros de precisión arbitraria.
▪ Decimal: decimales de precisión variable.
▪ Float: coma-flotante de 32 bits.
▪ Double: coma-flotante de 64 bits.
▪ Counter: contador de enteros de hasta 64 bits.
Texto:
▪ Ascii: strings US-ASCII.
▪ Text: strings UTF-8.
▪ Varchar: strings UTF-8 de longitud variable.
▪ Inet: strings que almacenan direcciones IPv4 o IPv6.
Identificación:
▪ UUID: tipo de dato que sigue el estándar UUID. Es único para cada fila insertada
en una tabla. Se utiliza para identificar a las filas
▪ Timeuuid: es un UUID que además sirve como timestamp único para cada fila.
Fecha
▪ Date: fechas desde el 1 de Enero de 1970 en formato yyyy-mm-dd, representada
como string.
▪ Time: hora, minutos y segundos en formato hh:mm:ss.sss, representado como
string.
▪ Timestamp: fecha y hora con precisión al milisegundo en formato yyyy-mm-dd
hh:mm:ss.sss. Puede ser representada como string.
Colección:
▪ List: colección de uno o más elementos ordenados.
▪ Map: colección con pares clave-valor.
▪ Set: colección de uno o más elementos.
Otros tipos:
▪ Blob: almacena bytes expresados en hexadecimal.
En el momento que deseemos revisar la estructura de la tabla creada, tendremos que
realizar la introducción del comando describe.
• Insertar, para insertar datos en una tabla concreta, tendremos que realizarlo de forma
similar como lo hacemos en los sistemas de bases de datos relacionales, tal y como
aparece a continuación.