NoSQL Apache Cassandra

Click here to load reader

  • date post

    08-Nov-2014
  • Category

    Documents

  • view

    327
  • download

    0

Embed Size (px)

description

Breve introducción a Cassandra

Transcript of NoSQL Apache Cassandra

Bases de Datos Avanzadas

Bases de datos NoSQLParte II: Apache Cassandra

20 de abril de 2012Roberto Amor Marcos

ContenidosObjetivos Por qu Cassandra? Visin general Modelo de Datos Arquitectura Caractersticas CQL Conexin y acceso desde lenguajes de alto nivel Aplicacin de ejemplo sobre Cassandra

ObjetivosConocer en profundidad Apache Cassandra. Conocer y entender la terminologa propia de Cassandra. Conocer las distintas formas de acceder al contenido de la Base de Datos. Conocer el lenguaje de consulta CQL. Conocer cules son las formas de estructurar la informacin en Cassandra.

Por qu Cassandra?Es un sistema fcil de entender pues es del tipo de Base de Datos NoSQL ms cercano al modelo relacional. Es de los pocos que ha superado la fase de versiones desarrollo 0.x y es actualizado, corregido y mejorado cada poco tiempo. ltima versin 1.0.9 del 6 de abril de 2012. Dispone de un lenguaje de consultas muy similar a SQL: CQL (Cassandra Query Language). Est escrito en Java. La Fundacin Apache est detrs de su desarrollo y mantenimiento.

Por qu Cassandra?Es utilizado en aplicaciones comerciales muy importantes. Twitter, Netix, Digg, Cisco Webex, Spotify. Se us en Facebook. Su popularidad est en aumento y cada vez es ms utilizado. Existen distribuciones compiladas para todos los sistemas operativos, ofreciendo adems, paneles de administracin amigables. Dispone de partners que dan soporte comercial de calidad. Gran comunidad.

Visin general

Sistema key-value store que almacena column families. Creado por Avanash Lakshaman y Prashany Malik para ser integrado en el motor de bsqueda de Facebook. Concretamente para buscar mensajes en la bandeja de entrada. Inuido por Google BigTable (modelo de datos) y Amazon Dynamo (estructura). Proceso de liberacin: Julio 2008: publicado como proyecto open source en Google Code. Marzo 2009: pasa a formar parte de los proyectos Apache Incubator. Febrero 2010: se convierte en proyecto top-level de la Apache Software Foundation.

Visin general

Es actualmente el modelo de ms xito y el ms utilizado. Actualmente sigue creciendo en nmero de usuarios. En el momento de su presentacin era capaz de ofrecer servicio concurrente a 100 millones de usuarios. Especialmente diseado para ejecutarse sobre grandes clusters, siendo muy sencilla su instalacin multimquina. http://www.screenr.com/5G6 : how to set up a 4 node Cassandra cluster in under 2 minutes.

Modelo de DatosConceptos bsicos: Cluster: las mquinas (nodos) de una instancia de Cassandra. Los clusters pueden contener mltiples keyspaces. Keyspace: es la agrupacin de ColumnFamilies. Normalmente hay un keyspace por aplicacin. ColumnFamilies: contenedor de mltiples columns. Es equivalente a la tabla en el modelo relacional. Cada entrada (row) se identica y accede a ella mediante un row-KEY. Column: unidad bsica de almacenamiento. Consistente en una estructura de tres valores: name, value y timestamp. SuperColumns: se consideran columns que almacenan subcolumnas. Son opcionales y no son muy utilizadas.

Modelo de DatosDe la columna al cluster Columns

Unidad bsica de almacenamiento. Es una tripla.struct Column { 1: binary 2: binary 3: i64 } { name, value, timestamp

}

name: Username, value: john23, timestamp: 123456789

Modelo de DatosDe la columna al cluster ColumnsLos tres valores anteriores son proporcionados por el cliente de alto nivel, incluido el timestamp. Por ello, es necesario tener sincronizado el reloj del sistema con el reloj del cluster. El timestamp es utilizado para la resolucin de conictos (Eventual Consistency). El timestamp puede ser cualquier cosa pero la convencin marca que sea el valor en microsegundos desde 1970. El tamao mximo que puede albergar una columna es 2GB.

Modelo de DatosDe la columna al cluster RowsAgregacio!n de columnas con un nombre para referenciarlo (rowKEY). El row sera el equivalente a la la del modelo relacional y el row KEY el equivalente a la clave primaria del modelo relacional. Es usado para ordenar los cheros de forma fsica. Se pueden almacenar hasta 2 mil millones de columnas en cada row.

Modelo de DatosDe la columna al cluster Column FamilyAgregacio!n rows. Cada ColumnFamily es guardado en un chero separado y es ordenado por la KEY. La forma de ordenar tanto de los rows como de las columnas se puede editar desde los cheros de conguracin. ASCII UTF-8 Long UUID (lxico o de tiempo) Fecha Combinaciones de ellos mediante el patrn CompositeType

Modelo de DatosDe la columna al cluster Column Family

Modelo de DatosDe la columna al cluster Keyspace Es equiparable al schema del modelo relacional. Cluster Abarca desde el modelo fsico al modelo lgico. Incluso existe la posibilidad de interconectar clusters separados fsica y lgicamente. Toda la informacin de un row debe encontrarse en una misma mquina o nodo del cluster. Las IPs de los nodos se aaden en un chero de conguracin alojado en cada nodo. Todo lo dems es transparente para el usuario.

Modelo de Datos

El modelo estructural de un solo vistazo

ArquitecturaCassandra rene la tecnologa de sistemas distribuidos de Dynamo y el modelo de datos de BigTable. De Dynamo: Eventualmente Consistente. Sistema de nodos en anillo. De BigTable: modelo de datos basado en Familias de Columnas. Cassandra implementa la parte AP del modelo CAP (i.e. Availability y Partitioning tolerance).

ArquitecturaCapas de la arquitectura de Cassandra:Core Layer Middle Layer Top Layer Tombstones HintedHandoff Read repair Bootstrap Monitoring Admin tools

Messaging service Gossip Failure dectection Cluster state Partitioner Replication

Commit log Memtable SSTable Indexes Compaction

ArquitecturaEscritura 2 modos de escritura: Quorum write: bloqueo hasta que la escritura tenga efecto. Async write: se enva la peticin a cualquier nodo. El nodo se encarga de hacer llegar los datos hasta el nodo apropiado. Si un nodo est cado, otro nodo lo sustituir hasta que el nodo original vuelva a estar disponible, escribiendo despus en l. Por defecto cada 15 minutos se mueven datos entre nodos.

ArquitecturaEscritura Camino de datoswriteDisk Commit Log

memtables

nodeswhen: out of space too many keys

ton disk: {dataFile (SSTable), indexFile (SSTable Index)}

ArquitecturaEscritura Propiedades de la escritura: No hay lecturas. No hay bsquedas. Rpida. Atmica respecto a las ColumnFamilies. Siempre se puede escribir (disponibilidad de nodos).

ArquitecturaLectura Camino de datos: 1. Cualquier nodo puede responder (resolucin de conictos si fuera necesario con consistencia eventual). 2. El Partitioner acta sobre cmo devolver los datos. 3. Espera de los datos desde memtable o desde SSTable.

ArquitecturaLectura Propiedades de la lectura: Posibilidad de lecturas en paralelo de mltiples SSTable. Mucho ms lento que la escritura. El retardo en las bsquedas se puede mitigar con ms RAM. Lecturas escalables hasta miles de millones de rows."

ArquitecturaBorrado Se hace mediante una marca de borrado (tombstone) en el memtable. Durante la fase de escritura del memtable al disco se descartan las entradas marcadas con el tombstone.

ArquitecturaVS MySQL con 50GB de datos MySQL ~300ms write ~350ms read

Cassandra ~0.12ms write ~15ms read

ArquitecturaBsquedas sobre +50TB de datos en cluster de 150 nodos. Keyspace consistente en dos ColumnFamilies. Query A: buscar mensajes por trmino de bsqueda. Min: 7.78ms Median: 18.27ms Max: 44.41ms

ArquitecturaBsquedas sobre +50TB de datos en cluster de 150 nodos. Keyspace consistente en dos ColumnFamilies. Query B: interaccin de mensajera privada. Dado el nombre de un usuario, devolver todos los mensajes mantenidos con ese usuario. Min: 7.69ms Median: 15.69ms Max: 26.13ms

CaractersticasTolerante a fallos: Datos replicados automticamente entre nodos. Replicacin a travs de mltiples centros de datos. Nodos automticamente reemplazados. Descentralizado: cada nodo es idntico a los dems en estructura. No hay cuellos de botella. Eventualmente consistente Alta disponibilidad Altamente escalable Con soporte profesional Probado

CQLDesde la versin 0.8, Cassandra proporciona un lenguaje de consulta y manipulacin de los datos similar a SQL. Actualmente (marzo 2012) se encuentra en su versin 2.0. Se puede actuar con l tanto desde prompt como desde clientes de alto nivel.SELECT * FROM MyColumnFamily; UPDATE MyColumnFamily SET 'SomeColumn' = 'SomeValue' WHERE KEY = B70DE1D0-9908-4AE3-BE34-5573E5B09F14;

CQLTipos de datos en CQLTipo de datoascii bigint blob boolean counter decimal double oat int text timestamp uuid varchar variant

Descripcinstring de caracteres en US-ASCII long de 64-bits con signo tipo LOB hexadecimal frue o false contador distribuido de 64-bits nmero decimal de precisin variable nmero en punto otante de 64-bits. sigue la norma IEEE-754 nmero en punto otante de 32-bits. sigue la norma IEEE-754 entero con signo de 32-bits string en UTF-8 marca de tiempo de 8 bytes UUID del tipo 1 o tipo 4 string en UTF-8 entero de precisin arbitraria

CQLEl tipo de dato UUIDIdenticador Universalmente nico (Universally Unique Identier). Identicador estndar universal usado en computacin distribuida. Denido en el RFC-4122 Consiste en nmero hexadecimal de 16bytes (128-bits) dividido en grupos de la forma 8-4-4-4-12 550e8400-e29b-41d4-a716-446655440000 Hay 3 x 1038 identicadores posibles: 340,282,366,920,938,463,463,374,607,431,768,211,456

CQLEl tipo de dato UUIDExisten 5 tipos o versiones: Version 1 MAC address Version 2 DCE Security Version 3 MD5 hash Version 4 Random Version 5 SHA-1 hash

CQLEl tipo de dato UUIDProbabilidad de repeticin?

Con n = 2122 (122 random bits)n 68,719,476,736 = 236 2,199,023,255,552 = 241 70,368,744,177,664 = 246 probabilidad 0.00000000000000