Base de Datos

31/12/2010

Introducción a Apache Cassandra

Hace mucho que no escribo, ya que estoy con bastantes cosas, pero ahora que estamos llegando a fin de año vamos a escribir una ultima nota!

Historia:

Cassandra es una base de datos NoSQL, hoy en día es un proyecto de Apache. Cassandra fue desarrollado por Facebook (la versión original fue escrita por un ex empleado de Amazon y otro de Microsoft), en el 2008 fue liberado como un proyecto open source en Google code, en el 2009 se convirtió en un proyecto “Apache Incubator“, y finalmente en el 2010 se convirtió en un proyecto TOP-LEVEL.

Información:

Las la información en las bases de datos relacionales, se almacenan en forma de filas, pero en Cassandra la información se almacena en columnas con pares key-value, key-map para múltiples valores, que se agrupan en column families (familia de columnas). Las column families son fijas cunado una base de datos Cassandra es creado, pero las columns se pueden agregar a la column families en cualquier momento. Por otra parte, las columns se agregan solo a las keys especificas, por lo tanto diferentes keys pueden tener diferentes números de columns en cualquier columns family.

Cassandra puede manejar varios terabytes de datos si lo necesita y puede, fácilmente, manejar millones de files, incluso en un cluster pequeño. Cassandra puede hacer alrededor de 20k de insert por segundos.

La rendimiento de Cassandra es muy alta, y mantener ese rendimiento alto mayormente depende del hardward, la configuración y el numero de nodos en nuestro cluster.

Terminologia de Cassandra:

Column: Es la unidad mas básica de la representación en el modelo de datos Cassandra. Una column es un triplete de un key (un nombre) un value (un valor) y un timestamp. Los valores son todos suministrados por el cliente. El tipo de dato del key y el value son Matrices de bytes de Java, el tipo de dato del timestamp es un long primitive. Las column son inmutables para evitar problemas de multithreading. Las columns se organizan dentro de las columns families. Las columns se ordenan por un tipo, que pueden ser uno de los siguientes:

  • AsciiType
  • BytesType
  • LexicalUUIDType
  • LongType
  • TimeUUIDType
  • UTF8Type

Modelo de datos:

  1. Keyspace -> Column Family
  2. Column Family -> Column Family Row
  3. Column Family Row -> Columns
  4. Column -> Data value

Super Column: Es una column cuyos values no son strings, sino una o mas columns, que en este contexto se llamaran subcolumns. Las subcolumns están ordenadas, y el numero de columnas que se puede definir es ilimitada. las Super columns, a diferencias de las columns, no tienen un timestamp definido. No son recursivas, es decir, solamente tienen un nivel de profanidad.

Modelo de datos:

  1. Keyspace -> Super Column Family
  2. Super Column Family -> Super Column Family Row
  3. Super Column Family Row -> Super Columns
  4. Super Column -> Columns
  5. Column -> Data value

Column Family: Es mas o menos análogo a una tabla en un modelo relacional. Se trata de un contenedor para una colección ordenada de columns. Debido a que cada column family se almacena en un archivo separado, asegúrese de definir las columns que sea probable que acceda juntas en la misma column family. Tenemos que definir las column family de la aplicación en el archivo de configuración.

Keyspace: Es el contenedor para un column family. Es mas o menos análogo a una base de datos en un modelo relacional, usado en Cassandra para separar aplicaciones. Cuando una base de datos relacional es una colección de tablas, un keyspace es una colección ordenada de columns family. Tenemos que definir los keyspace de la aplicación en el archivo de configuración o usando métodos definidos en la API.

Caracteristicas de Cassandra:

Fault Tolerant (Tolerancia a los fallos): Los datos se replican automáticamente a varios nodos. Perder un nodo no  causa la baja del cluster.

Flexible Schema (Flexible esquema): Estamos hablando en términos de las columns, super columns y column families en lugar de filas y tablas. Modelo de datos BigTable.

Symmetric (Simétrica): No hay único punto de fallo, todos los nodos en el cluster son idéntica y no hay cuellos de botella.

Scalable (Escalable): Lineal con la adición de nuevas máquinas, sin tiempo de inactividad o interrupción de las aplicaciones. Leer y escribir aumentar el rendimiento de forma lineal a medida que las maquinas se van agregando.

Support for Large Data (Apoyo a grandes de datos): La capacidad para escalar a cientos de gigabytes de datos.

Links de interés:

Cualquier cosa que quiera aclarar sobre el articulo, preguntar, corregir o lo que tengan ganas comenten.

Saludos



About the Author

AgeValed
Pablo Ignacio de la Vega Ibañez, también conocido en algunos lugares como AgeValed, el creador de este blog. Actualmente estoy trabajando como Líder Técnico y Supervisor de Equipo en el área de desarrollo PHP.




 
 

 
PHP

Zend Framework – Almacenamiento de sesión en base de datos

En este mini tutorial voy a mostrarles como guardar la sesión en base de datos con ZF 1, esto es muy util para manejo de sesiones en un entorno con múltiples servidores. Material Relacionado Zend_Session_SaveHandler_DbTable Z...
by AgeValed
0

 
 

Listado de Provincia y Localidades Argentinas – Base de Datos

Les dejo un archivo con un listado de las provincias y localidades argentinas, listo para insertar en nuestra base de datos, la cual cuenta con 2 tablas, una es un listado de las provincias con su respectivo ID y la segunda es ...
by AgeValed
44

 



2 Comentarios


  1. RT @seppo0010: RT @agevaled: Introducción a Apache Cassandra http://bit.ly/e7GhQA #apache #cassandra #nosql… cc/ @Lucassoria @insignia


  2. RT @agevaled: Introducción a Apache Cassandra http://bit.ly/e7GhQA #apache #cassandra #nosql RT Pliz! 🙂



Deja un comentario

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

*

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.