Sei sulla pagina 1di 12

Proyecto Final HOMERO

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

PRIMERA PARTE: CASSANDRA


Breve descripcin
Cassandra es un motor de base de datos open source. Actualmente es un proyecto desarrollado por la Apache Software Foundation. Est desarrollado en lenguaje Java. Para este Proyecto de Ingeniera usaremos la versin 0.6.6. de Cassandra. En la mitologa griega, Cassandra era hija de Hcuba y Pramo, reyes de Troya. Vaticin la cada de Troya, aunque nadie le crey, ya que su don de profeca haba sido maldito por el dios Apolo al no corresponderle el amor.

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)

Usuarios / Implementaciones (actuales y no actuales)


Despegar (http://www.despegar.com): utiliza un pequeo cluster de Cassandra para almacenar informacin de la sesin de usuario en el sistema de reserva de hoteles. Planean migrar a un cache persistente el itinerario de vuelos. Digg: su re-lanzamiento es 100% Cassandra. Internamente implmentan mltiples clusters, y el ms grande es de 40 nodos. Facebook: utiliza la versin de Cassandra que desarrollaron internamente, y posee el cluster de implementacin ms grande que se conoce, con 150 nodos. Twitter: se utiliza Cassandra en diversos mbitos, por ejemplo, para guardar lugares de inters, para hacer operaciones de data mining en toda la base de datos de usuarios, mostrar resultados de los principales tweets y tendencias locales. Se implementa para analizar en tiempo real a gran escala. Por el momento no se utiliza Cassandra para almacenar Tweets (que se almacenan en una base de datos MySQL) Otros: Imagini, Ooyala, Rackspace, reddit, SimpleGEO, Cisco, IBM

Atributos de las ColumFamilies


A continuacin se detallarn los atributos de las ColumnFamilies, indicando si es requerido u opcional. Trabajaremos con los nombres en ingls, para preservar la integridad de la documentacin. El origen de esta informacin, en su gran mayora, es de la documentacin provista por Apache, en el archivo storage-conf.xml de la base de datos Cassandra, versin 0.6.6. El resto es complemento de distintas fuentes de datos. Estos atributos deben definirse para cada <Keysapce>, dentro del elemento <Keyspaces>. Name: atributo requerido; indica el nombre de la ColumnFamily. ColumnType: (completar) CompareWith: atributo opcional; ste atributo indica a cassandra cmo ordenar las columnas, necesario a la hora de hacer las tajadas (slicing). El valor por default es BytesTypes, una comparacin lxica directa de bytes en cada columna. Otras opciones son AsciiType, UTF8Type, LexicalUUIDType, TimeUUIDType, y LongType. Tambin se puede el nombre de una clase que extienda de org.apache.cassandra.db.marshal.AbstractType. CompareSubColumnsWith: atributo opcional; es el atributo que se define para comparar las Columns en las SuperColumns. BytesType: simple ordenamiento por bytes. No se efectua ninguna validacin. AsciiType: como BytesType, pero se valida que la entrada pueda ser convertida (parsed) a US-ASCII. UTF8Type: un String codificado como UTF8. LongType: 64 bits LexicalUUIDType: un UUID de 128 bits, comparacin lxica por valor en bytes. TimeUUIDType: un UUID version 11 de 128 bits. RowsCached: atributo opcional; especifica el nmero de filas cuyos contenidos son guardados en memoria (en cache). No debe usarse en ColumnFamilies con largas filas, o ColumnFamilies con grandes ratios de escritura/lectura. Debe especificarse una fraccin (un valor menor a 1), un porcentaje (terminar el valor con el smbolo %), o un valor absoluto de filas a guardar en cache. El valor por default es 0, es decir, RowChached no est activado por default. RowCacheSavePeriodInSeconds: atributo opcional; KeysCached: atributo opcional; the number of keys per sstable whose locations we keep in memory in "mostly LRU" order. (JUST the key locations, NOT any column values.). Debe especificarse una fraccin (un valor menor a 1), un porcentaje (terminar el valor con el smbolo %), o un valor absoluto de filas a guardar en cache. El valor por default es de 200000 claves. KeyCacheSavePeriodInSeconds: atributo opcional;

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.

Cmo Conectarse a la Base de Datos


(HACER!!)

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.

SEGUNDA PARTE: HOMERO


Qu es un Framework?
En el desarrollo de software, un framework es una abstraccin en la que el cdigo comn provee funcionalidades genricas que pueden ser sobre-escritas (overridden) or especializadas de manera selectiva por cdigo provisto por el usuario que utiliza el framework. Son un caso especial de libreras, donde la abstraccin de cdigo puede ser re-utilizada. Un framework puede incluir soporte de programas, bibliotecas, y hasta un lenguaje interpretado. La idea es que el framework provea un marco de desarrollo para quien construye y desarrolla aplicaciones.

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.

Nuestra Propuesta: Framework Homero


Con este Proyecto Final de Ingeniera, proponemos construir una librera Java de mapeo ObjetoCassandra, proveyendo un framework para realizar las operaciones comunes como inserciones, actualizaciones, bsquedas, y borrados contra la base de datos. Siendo concientes de la existencia de otros frameworks Java-Cassandra, como por ejemplo Pelops 2 o Hector3, nos encontramos con que dichas libreras presentan ciertas limitaciones tales como, el no haber logrado una buena abstraccin, estar incompletos o no estar activos.

Implementacin estilo JPA y Thrift


(completar) Nuestra propuesta plantea la creacin de una librera en el mismo espritu de cualquier implementacin de la Java Persistance API4. Es decir, se implementarn mecanismos para identificar las entidades y sus relaciones, y herramientas para las operaciones contra la base de datos, tales como inserts, updates, deletes y mecanismos de bsquedas. Se utilizarn anotaciones para definir: Column, ColumnFamily, Key, TimeStamp y Value. Se planea utilizar para las conexiones a Cassandra, los mtodos ofrecidos por la librera Thrift.
2 http://code.google.com/p/pelops/ 3 http://github.com/rantav/hector 4 http://www.oracle.com/technetwork/articles/javaee/jpa-137156.html http://en.wikipedia.org/wiki/Java_Persistence_API

TERCERA PARTE: CONCLUSIN


Conclusin
(hacer)

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

Potrebbero piacerti anche