Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
ndice
PRIMERA PARTE: CASSANDRA...........................................................................................................3 Breve descripcin.............................................................................................................................3 Historia.............................................................................................................................................3 Modelo de Datos...............................................................................................................................3 Limitaciones de Cassandra...............................................................................................................7 Usuarios / Implementaciones (actuales y no actuales).....................................................................7 Atributos de las ColumFamilies.......................................................................................................8 Cmo Conectarse a la Base de Datos.............................................................................................10 Thrift:..............................................................................................................................................10 SEGUNDA PARTE: HOMERO..............................................................................................................11 Qu es un Framework?.................................................................................................................11 Por qu Homero?.......................................................................................................................11 Nuestra Propuesta: Framework Homero.........................................................................................11 Implementacin estilo JPA y Thrift.......................................................................................11 TERCERA PARTE: CONCLUSIN.......................................................................................................12 Conclusin......................................................................................................................................12 Bibliografa.....................................................................................................................................12
Historia
Inicialmente, Cassandra es desarrollado por Facebook con la idea de potenciar las bsquedas en el Inbox. En el mes de Julio, ao 2008, se libera su cdigo en Google Code. En Marzo del 2009 se transforma en un proyecto de Apache, y el 17 de Febrero del corriente ao, 2010, se lo cataloga como un proyecto de alto nivel de Apache (Apache Software Foundation top-level project).
Modelo de Datos
Se detallaran brevemente los distintos elementos que componen el Modelo de Datos de Cassandra, a modo introductorio. Algunos de estos elemntos sern tratados ms adelante con mayor profundidad, ya que consideramos que requieren un nivel de anlisis distinto, dado el propsito de este Proyecto. Los conceptos bsicos de este modelo de datos son: Cluster: son los nodos en una instancia lgica de Cassandra. Cada cluster puede contener mltiples keyspaces. Keyspace: es el contenedor de ColumnFamilies, uno por aplicacin. ColumnFamilies: contiene mltiples columnas, cada una con nombre y valor (y timestamp), y son referencias por filas de datos. Column: es el menor tipo de dato, un arreglo nombre-valor SuperColumns: arreglo de Columns.
En detalle, encontramos: (http://www.javageneration.com/?p=70) (http://wiki.apache.org/cassandra/DataModel) Column: Contiene un nombre, valor y timestamp. Todos estos datos son provistos por el usuario. Es por ello que los relojes de los clientes deberan estar sincronizados, para evitar conflictos. A los propsitos de esta documentacin, el timestamp no ser representado. En resumen, es un par nombre-valor, la representacin ms pequea de un dato en el modelo Cassandra.
{ //Esto es una Column name: email, value: ejemplo@server.com } Ambos valores son binarios (tcnicamente byte[]), y pueden tener prcticamente cualquier longitud. SuperColumn: As como las Columns son arreglos nombre-valor, las SuperColumns tambin son arreglos nombre-valor, con la particularidad de que el valor es un mapeo (o arreglo) de columnas. Vale aclarar que las SuperColumns no poseen timestamp.
{ //Esto es una SuperColumn name: usuarios, value: { //Con un arreglo de Columns { name: nickname , value: JuanM }, { name: nombre , value: Juan }, { name: apellido , value: Martinez } } }
Agrupamiento: existe una estructura para agrupar Columns y SuperColumns, llamada ColumnFamily. Esta estructura puede ser del tipo Standard (simplemente la llamaremos ColumnFamily) y del tipo Super (que la llamaremos SuperColumnFamily). ColumnFamily: una ColumnFamily es una estructura que contiene una infinita cantidad de filas. Para entender lo que son las filas en el modelo Cassandra, podemos pensar en ellas como las tablas del clsico modelo relacional de base de datos (RDBMS). Cada fila tiene una clave provista por el usuario, y las filas tienen un arreglo ordenado de columnas. Las ColumnFamilies son definidas en el archivo storage-conf.xml. Ms adelante profundizaremos sobre las ColumnFamilies, el ordenamiento de columnas y sus los atributos.
Alumnos = { //Esta es la ColumnFamily 123321: { //Esta es la clave para la fila detalla a continuacin //Un infinito arreglo de columnas... legajo: 123321, nombre: Martn, apellido: Prez }, //fin de la fila 135791: { //Otra clave para una nueva fila en la ColumnFamily... //Un nuevo conjunto de columnas... legajo: 135791, telefono: 47996543, nombre: Juan, edad: 33 } //fin de la fila } //fin de la CF. Es un punto a notar que no existe un arreglo pre-definido de las columnas que debe contener una fila dentro de una ColumnFamily, ni en el nombre de las columnas, ni en la cantidad. Esto es lo que da a Cassandra la propiedad de schemaless (sin esquema).
SuperColumnFamily: as cmo las ColumnFamilies contienen filas, y stas contienen claves y arreglos de columnas, las SuperColumnFamilies tambin contienen filas, y stas contienen claves. La diferencia es que las claves no tienen arreglos de columnas, sino que tienen arreglos de SuperColumns.
(poner un ejemplo) Keyspaces: contenedor de ColumnFamilies. En el modelo relacional de base de datos, sera una coleccin lgica de base de datos. Ordenamiento: Ejemplos completos: (HACER!!)
Limitaciones de Cassandra
El valor de una Column no puede ser mayor a 2GB. Cassandra tiene dos niveles de indexacin: clave y columna. Pero en Super ColumnFamilies hay un tercer nivel de subcolumnas, y estas no son indexadas. Cualquier pedido por una subcolumna des-serializa todas las subcolumnas de esa SuperColumn. Se invita a no crear un modelo de datos que requiera una gran cantidad de subcolumnas. Los desarrolladores trabajan para eliminar esta limitacin (https://issues.apache.org/jira/browse/CASSANDRA-598). (completar)
1 Versin original de UUID, donde se concatena la version de UUID, con la direccin MAC de la computadora que genera el UUID, y el nmero de 100-nanosegundos de intervalos desde la adopcin del Calendario Gregoria en el Oeste. Versin criticada, ya que revela la identidad de quien genera el UUID, y el momento.
Comment: atributo opcional; til para aadir comentarios humanamente legibles, a fin de proveer informacin sobre la ColumnFamily. Ejemplo tomado del storage-conf.xml de Cassandra 0.6.6. :
<Keyspaces> <Keyspace Name="Keyspace1"> <ColumnFamily Name="Standard1" CompareWith="BytesType" KeysCached="1000" RowsCached="100" RowCacheSavePeriodInSeconds="0" KeyCacheSavePeriodInSeconds="3600"/> <ColumnFamily Name="Standard2" CompareWith="UTF8Type" KeysCached="100%"/> <ColumnFamily Name="StandardByUUID1" CompareWith="TimeUUIDType" /> <ColumnFamily Name="Super1" ColumnType="Super" CompareWith="BytesType" CompareSubcolumnsWith="BytesType" /> <ColumnFamily Name="Super2" ColumnType="Super" CompareWith="UTF8Type" CompareSubcolumnsWith="UTF8Type" RowsCached="10000" KeysCached="50%" Comment="A column family with supercolumns, whose column and subcolumn names are UTF8 strings"/> </Keyspace> </Keyspaces> Nota: en el ejemplo se omiten algunos elementos de Keyspace, preservando slo los pertinentes a ColumnFamily.
Thrift:
(Completar) Thrift es un framework, originalmente desarrollo en Facebook, para desarrollo de servicios escalable de lenguaje cruzado. Combina una pila de softeware (software stack) con un motor de generacin de cdigo para construir servicios que funcionan eficientemente y sin problemas entre C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk, and Ocaml. En el 2007 se realizacin la transicin de Facebook a apache. Hoy en da es un proyecto open source en el Apache Software Foundation Incubation (http://incubator.apache.org/thrift/). El cliente API de Cassandra est construido encima de Thrift. El release de Thrift vinculado a Cassandra 0.6.6. es el r917130 y se implementa como una librera JAR.
Por qu Homero?
Homero fue un poeta griego del Siglo VIII a.C., autor de las picas La Ilada y La Odisea. En su biografa se confunden hechos reales con leyendas. Se duda sobre su lugar de nacimiento y sobre si era ciego o no. El mundo que rodea a Cassandra est marcado por personajes de origen mitolgico griego, y decidimos mantenernos en esa linea, eligiendo a un poeta pico, cuya historia se mezcla en realidad y fantasa.
Bibliografa
http://en.wikipedia.org/wiki/Apache_Cassandra http://wiki.apache.org/cassandra/ http://cassandra.apache.org/ http://uvedobles.com/base-de-datos-cassandra/ http://www.javageneration.com/?p=70 http://wiki.apache.org/cassandra/DataModel ver: http://wiki.apache.org/cassandra/API ver: http://sentidoweb.com/tag/cassandra ver: http://www.riptano.com/docs/0.6.5/getting_started/index Cassandra GUI: http://code.google.com/p/cassandra-gui/ http://theagileadmin.com/2010/06/22/velocity-2010-cassandra-workshop/ A browser for Cassandra using GTK: http://github.com/driftx/chiton http://wiki.apache.org/cassandra/CassandraUsers http://engineering.twitter.com/2010/07/cassandra-at-twitter-today.html http://wiki.apache.org/cassandra/CassandraLimitations http://incubator.apache.org/thrift/ http://en.wikipedia.org/wiki/Apache_Thrift http://en.wikipedia.org/wiki/Software_framework http://www.codebox.es/glosario http://en.wikipedia.org/wiki/Universally_unique_identifier http://es.wikipedia.org/wiki/Cassandra http://es.wikipedia.org/wiki/Homero