CASSANDRA y CQL3.1 JUSTINO RAMÍREZ ORTEGÓN SOLUCIONES INTEGRACIÓN Y APERTURA S.A. DE C.V.
CONTENIDO Estructura distribuida de Cassandra Ciclo de vida de los datos CQL3.1 Apache Hector
Estructura distribuida de Cassandra La descentralización y replicación hacen posible una alta tolerancia a fallos de las BD Cassandra
Replicación La replicación protege la perdida de información con el costo de tener que usar n-veces más memoria de almacenamiento (Factor 3 como norma)
Descentralización Se proponen m nodos (típicamente m>n), los cuales se coordinan en una estructura de red de anillo. NO HAY NODO MAESTRO COMO EN HADOOP Mas de un nodo pueden estar en un solo servidor Coordinador
Descentralización Escritura/lectura Un cliente accesa un nodo cercano, que se convierte en coordinador y gestiona la información con los otros nodos. Coordinador
Disponibilidad Difícil escritura de datos (debido a los reacomodos de datos). Alta disponibilidad ya que los datos están ordenados
Disponibilidad Los datos no se salvan en forma aleatoria, sino en forma ordenada de acuerdo a sus llaves correspondientes. Ordenamiento por tipo de dato. f a b c d e g h i
Disponibilidad Los datos se accesan con un algoritmo de búsqueda eficiente debido a que las tablas están ordenadas. Datos ordenados Dato extraído
Consistencia Cassandra no es estrictamente consistente, aunque dispone de una configuración en 3 niveles: Estricta Causal Eventual
Ciclo de vida de los datos Los datos se guardan en 3 tipos de tablas: Commit logs Memtables SSTables
Ciclo de vida de los datos Los datos que se agregan a una SSTable no se borran nunca ya que una vez que se crean son inmutables. Si se da la opción de borrado, en realidad los datos se marcan como invalidados. Los datos solo se borran durante una compactación de SSTables.
Compactación Cada n archivos de aproximadamente el mismo tamaño se almacenan en SSTables, el sistema los compactara en una nueva SSTable. Se crea una estructura multinivel irregular.
Compactación La compactación a niveles genera SSTables de tamaño fijo, con tamaño inicial relativamente pequeño y que se fusionan con un numero fijo SSTables. Escritura mucho mas lenta que con la compactación normal, velocidad mucho mayor de acceso.
CQL3 Es un lenguaje hibrido entre Cassandra Cli y SQL El compromiso entre ambos lenguajes genera que no existan: Los Joint (SQL) Las SuperColumns Families (Cassandra)
Desnormalización Las tablas son el equivalente a las Column Families. Todas las columnas de un registro se ordenan alfabéticamente. Un dato solo puede extraerse usando su Primary Key como referencia.
Desnormalización Cada consulta genera una tabla especializada a esa consulta particular.
Modelo RDBMS 1. Modelación de datos 2. Modelación de consultas
Modelo Cassandra 1. Modelación de consultas 2. Modelación de datos
Modelo CQL3.1 M. Cassandra M. CQL3.1
Modelo CQL3.1 M. Cassandra M. CQL3.1
Creación de Keyspace En la creación del Keyspace deben de incluirse la configuración que se desee modificar:
Creación de Keyspace Para ingresar al Keyspace debemos usar el comando USE < Nombre_de_keyspace>;
Comandos Básicos
Comandos Básicos
Upsert El update puede usarse como insert.
Upsert
Select
Select
Índices Los índices nos ordenan los datos, en forma ascendente/descendente. No usarlos con datos con alta cardinalidad.
Índices
Índices múltiples Se requiere la orden allow filtering para hacer el proceso de selección en cascada.
Recuperación de Timestamp Se usa la instrucción writetime para recuperar el timestamp de una columna en particular.
Primary Key compuesta
Primary Key compuesta Hector:age Hector:role John:age John:role ist 40 Admin 30 Dev
Primary Key Compuesta En teoría 2,000,000,000 columnas por registro En la practica 100,000 columnas por registro
Partition Key Compuesta
Partition Key Compuesta
Primary Key Compuesto
Primary Key Compuesto
Validación de Insert
Batch Si la primera instrucción no se puede realizar, entonces todas las demás instrucciones se abortan.
Batch
Supercolumnas en CQL3 Hay 3 tipos de datos que suplen parcialmente a las supercolumnas: Set: Lista de atributos no ordenados. List: Lista de atributos ordenados. Map: Lista de atributos con valores.
Set
Set
Set
Set
List
List
List
List
Map
Map
Map
Map
Apache Hector Apache Hector es en realidad un plugin para hacer aplicaciones en Java usando Cassandra. Funciona sobre CQL. Se puede usar con Eclipse.
Apache Hector Existen problemas con la compatibilidad de las librerías. La versión actual de CQL 3.1 no es soportada por la ultima versión de Hector. Cada versión de Hector requiere una versión especifica de Cassandra, CQL y de un conjunto de librerías auxiliares de Apache.
La distribución no centralizada y la replicación permiten tener una alta tolerancia a fallas pero con el costo del incremento de la necesidad de memoria. Se debe de elegir con cuidado el tipo de compactación de datos de acuerdo a los requerimientos. Aunque CQL3 esta inspirado en SQL existen diferencias que deben de tener se en cuenta ya que internamente CQL3 se comporta como Cassandra Cli. Conclusiones
¿Preguntas? Justino.ramirez.ortegon@siasw.com