4 de Julio de 2012 Red de Innovacin y Transferencia en Gestin de Datos Fundacin Universidad Rey Juan Carlos, Plaza Manuel Becerra,14, Madrid
Dr. Diego Lz. de Ipia Glz. de Artaza DeustoTech-INTERNET2, DeustoTech Deusto Institute of Technology, Universidad de Deusto dipina@deusto.es http://paginaspersonales.deusto.es/dipina http://www.morelab.deusto.es 2 Infraestructura Virtualizada: Cloud Computing Un paradigma de computacin emergente donde los datos y servicios residen en centros de datos muy escalables que pueden ser accedidos ubicuamente desde cualquier dispositivo conectado a Internet 1
Merrill Lynch: Cloud computing market opportunity by 2011 = $95bn in business and productivity apps + $65bn in online advertising = $160bn (1) Source: IBM 3 Cloud Computing es capacidad computacional y almacenamiento virtualizada expuesta mediante infraestructura agnstica a la plataforma y accedida por Internet Recursos IT compartidos en demanda, creados y eliminados eficientemente y de modo escalable a travs de una variedad de interfaces programticos facturados en base a su uso
4 Evolucin de Tecnologas de Cloud Computing Maduracin de tecnologa de virtualizacin La virtualizacin permite nubes de computacin Las nubes de computacin demandan nubes de almacenamiento Las nubes de almacenamiento y computacin crean infraestructura cloud La infraestructura cloud da lugar a plataformas y aplicaciones cloud Diferentes tipos de cloud dan lugar a Cloud Aggregators Nichos de requisitos dan lugar a Cloud Extenders
5 Arquitectura Cloud Computing 6 Introduccin a NoSQL NoSQL es un trmino utilizado para describir un subconjunto de bases de datos que difiere en varios modos de bases de datos tradicionales (RDBMS). No tienen schemas, no permiten JOINs, no intentan garantizar ACID y escalan horizontalmente El trmino fue acuado en 1998 por Carlo Strozzi y resucitado en 2009 por Eric Evans El propio Evans sugiere mejor referirse a esta familia de BBDD de nueva generacin como Big Data 7 Introduccin a NoSQL NoSQL "not only SQL es una categora general de sistemas de gestin de bases de datos que difiere de modelo relacionales clsicos (RDBMS) en diferente modos: Estos datastores no requieren esquemas de informacin fijas Evitan las operaciones JOIN y escalan horizontalmente De hecho, tanto las bases de datos NoSQL como las relacionales son tipos de Almacenamiento Estructurado 8 Introduccin a NoSQL La principal diferencia radica en cmo guardan los datos (por ejemplo, almacenamiento de un recibo): En una RDBMS tendramos que partir la informacin en diferentes tablas y luego usar un lenguaje de programacin en la parte servidora para transformar estos datos en objetos de la vida real. En NoSQL, simplemente guardas el recibo: NoSQL es libre de schemas, t no diseas tus tablas y su estructura por adelantado NoSQL no es la panacea!!! Si tus datos son relacionales, quedarte con tu RDBMS sera la opcin correcta 9 El teorema CAP Teorema de Brewer: es imposible para un sistema computacional distribuido ofrecer simultneamente las siguientes tres garantas: Consistencia todos los nodos ven los mismos datos al mismo tiempo Disponibilidad (Availability) garantiza que cada peticin recibe una respuesta acerca de si tuvo xito o no Tolerancia a la particin (Partition) el sistema continua funcionando a pesar de la prdida de mensajes Equivalente a: You can have it good, you can have it fast, you can have it cheap: pick two. 10 Transacciones BASE Acrnimo anlogo a ACID para NoSQL que prima disponibilidad frente a consistencia: Basically Available, Soft state, Eventually Consistent Caractersticas: Consistencia dbil stale data OK Prima la disponibilidad Best effort Respuestas aproximadas OK Agresivo (optimista) Ms sencillo y ms rpido Comparativa en: http://queue.acm.org/detail.cfm?id=1394128 11 Por qu NoSQL? Tendencia 1: Tamao Hemos creado ms datos en los ltimos dos aos que en todos los aos anteriores Exabytes (10 18 ) por ao Tendencia 2: Conectividad Los datos estn cada vez ms entrelazados y conectados De documentos de texto a Wikis a RDF a grafos gigantes conectados Tendencia 3: Datos semi-estructurados Los datos son cada vez ms desestructurados Tendencia 4: Arquitectura El software orientado a servicios actual donde cada servicio tiene su back-end 12 RDBMS vs. NoSQL Las bases de datos relacionales tradicionales nos permiten definir la estructura de un esquema que demanda reglas rgidas y garantizan ACID: Atomicity Consistency Isolation Durability Las aplicaciones web modernas presentan desafos muy distintos a las que presentan los sistemas empresariales tradicionales (e.j. sistemas bancarios): Datos a escala web Alta frecuencia de lecturas y escrituras Cambios de esquema de datos frecuentes Las aplicaciones sociales (no bancarias) no necesitan el mismo nivel de ACID Algunas de las opciones de NoSQL actualmente disponibles son: Cassandra, MongoDB, Jackrabbit , CouchDB, BigTable y Dynamo
13 Arquitectura de las BBDD NoSQL A menudo ofrecen slo garantas de consistencia dbiles, como por ejemplo eventual consistency, o transacciones restringidas a elementos de datos simples Emplean una arquitectura distribuida, donde los datos se guardan de modo redundante en distintos servidores, a menudo usando tablas hash distribuidas Suelen ofrecer estructuras de datos sencillas como arrays asociativos o almacenes de pares clave-valor 14 Taxonoma de soluciones NoSQL Los principales tipos de BBDD de acuerdo con su implementacin son los siguientes: Almacenes de Clave-Valor Almacenes de Familia de Columnas Almacenes de documentos Almacenes de Grafos
15 Caractersticas BBDD orientadas a Clave-Valor Su precursor fue Amazon Dynamo Basadas en DHT (Distributed Hash Tables) Modelo de datos: coleccin de pares clave/valor Ejemplos: Dynamite, Voldemort, Tokyo
16 Caractersticas BBDD orientadas a Columnas Su precursor es Google BigTable Modelo de datos: familia de columnas, esto es, un modelo tabular donde cada fila puede tener una configuracin diferente de columnas Cada clave est asociada con varios atributos (columnas) Ejemplos: HBase, Hypertable, Cassandra, Riak Buenas en: Gestin de tamao Cargas de escrituras masivas orientas al stream Alta disponibilidad MapReduce
17 Caractersticas BBDD orientadas a Documentos La precursora fue Lotus Notes Modelo de datos: colecciones de documentos que contienen colecciones de claves-valor Guardan datos semi-estructurados: JSON Ejemplos: CouchDB, MongoDB Buenas en: Modelado de datos natural Amigables al programador Desarrollo rpido Orientas a la web: CRUD
18 Caractersticas Bases de Datos Basadas en Grafos Inspiradas por Euler y la teora de grafos Modelo de datos: nodos, relaciones con pares clave valor en ambos No son exactamente NoSQL Problemas para cumplir las propiedades CAE de NoSQL (Cost-efficiency, High Availability y Elasticity) Ejemplos: AllegroGraph, VertexBD, Neo4j 19 Apache Cassandra Es un almacn altamente escalable, eventualmente consistente y distribuido de estructuras clave-valor. Iniciado por Facebook Cdigo abierto Proyecto apache Licencia: Apache License 2.0 Escrito en Java Multiplataforma Versin actual: 1.0.9 Web: http://cassandra.apache.org/ Documentacin: http://www.datastax.com/docs/1.0/index
20 Quin usa Apache Cassandra? Algunos usuarios famosos de Cassandra son: Digg Facebook Twitter Rackspace SimpleGEO
21 Ventajas de Cassandra para desarrolladores Web Cassandra est desarrollada para ser un servidor distribuido, pero puede tambin ejecutarse como un nodo simple: Escalabilidad horizontal (aade nuevo hardware cuando sea preciso) Rpidas respuestas aunque la demanda crezca Elevadas velocidades de escritura para gestionar volmenes de datos incrementales Almacenamiento distribuido Capacidad de cambiar la estructura de datos cuando los usuarios demandan ms funcionalidad Una API sencilla y limpia para tu lenguaje de programacin favorito Deteccin automtica de fallos No hay un punto de fallo nico (cada nodo conoce de los otros) Descentralizada Tolerante a fallos Permite el uso de Hadoop para implementar Map Reduce Hinted hand off
22 Desventajas de Cassandra Hay algunas desventajas que un sistema de almacenamiento tan escalable ofrece en contrapartida: No hay joins (a cambio de ms velocidad) No permite ordenar resultados en tiempo de consulta No tiene SQL Pero desde la versin 0.8 tenemos CQL
23 Instalacin de Cassandra Requisitos: Java 1.6 en adelante Las ltimas versiones estables disponibles en: http://cassandra.apache.org/download/ Documentacin en: Cassandra Wiki: GettingStarted, http://wiki.apache.org/cassandra/GettingStarted
24 Modelo de Datos en Cassandra Est basado en un modelo orientado a columnas Extiende el modelo clave-valor con dos niveles de anidamiento Su modelo de datos representa un mapa de 4 o 5 dimensiones. El modo de referirse a un registro de datos es: Un keyspace, una column family, una key, una super column opcional, y una column. Al final siempre tenemos un valor nico que es la columna.
25 Modelo de Datos en Cassandra Diseado para datos distribuidos de modo escalable sacrifica ACID por ventajas en rendimiento, disponibilidad y gestin operacional Los modelos que se crean son desnormalizados: Se suele crear una column family por cada consulta (query) a realizar Varias filas en un column family suelen dar respuesta a una consulta Los conceptos bsicos son: Clster: son las mquinas que componen una instancia de Cassandra Pueden contener varios Keyspaces Keyspace: espacio de nombres para un conjunto de ColumFamily, asociado a una aplicacin Suele vincularse con una BBDD en el modelo relacional ColumFamily: contienen varias columnas Suelen vincularse con una tabla en el modelo relacional SuperColumn: columnas que ellas mismas tienen sub-columnas Column: compuestas de un nombre, valor y timestamp
26 KeySpaces Un espacio de claves o KeySpace es un esquema de alto nivel que contiene familias de columnas. Supercolumn Family Estado de Usuario
Column Family Entradas en Twitter: tweets: 27 Resumen Modelo de Datos 28 Clster Los datos en Cassandra se guardan en un Clster o Ring donde se asignan datos a los nodos dentro de un ring Un nodo tiene rplicas para diferentes rangos de datos Si un nodo se cae su rplica puede responder Un protocolo P2P hace que los datos se repliquen entre nodos acorde con un replication_factor 29 Ring, clster y el protocolo Gossip Cassandra usa un protocolo Gossip para permitir comunicacin dentro de un ring, de tal modo que cada nodo sabe de otros nodos Permite soportar descentralizacin y tolerancia a la particin Cassandra est diseada para ser distribuida en varias mquinas que aparecen como una simple mquina a los ojos de los clientes La estructura ms externa de Cassandra es el cluster o ring Un nodo tiene una rplica para diferentes rangos de datos, si algo va mal una rplica puede responder El parmetro replication_factor en la creacin de un KeySpace indica cuntas mquinas en el clster recibirn copias de los mismos datos. 30 Configuracin de un Keyspace Los atributos bsicos que puedes asociar a un keyspace son: Replication factor: cunto quieres pagar en rendimiento a favor de consistencia Replica placement strategy: indica cmo se colocan las rplicas en el anillo: SimpleStrategy, OldNetworkTopologyStrategy y NetworkTopologyStrategy Revisar: http://answers.oreilly.com/topic/2408-replica-placement- strategies-when-using-cassandra/ Column families: al menos una por Keyspace, es un contenedor de filas, que contienen columnas
31 Configuracin de un Keyspace Cassandra ofrece soporte para particionado distribuido de datos RandomPartitioner te da buen balanceo de carga OrderPreservingPartitionioner te permite ejecutar consultas de rangos, pero exige ms trabajo eligiendo node tokens Ms info en: http://abel-perez.com/cassandra-partitioner-order- preserving-partit Cassandra tiene consistencia reconfigurable http://www.datastax.com/docs/0.8/dml/data_consistency Con Cassandra tienes que pensar en las consultas que quieres ejecutar y luego realizar el modelo en torno a ellas 32 Diferencias entre un RDBMS y Cassandra No hay lenguaje de consulta, tiene una API accesible a travs de Thrift Verdad a medias: si existe desde la versin 0.8 CQL No hay integridad referencial, no hay joins, se puede emular almacenando claves a otras filas en un column family ndices secundarios en una tabla dan lugar a nuevos column families que mapean un campo a la clave de la primera column family Verdad a medias: desde Cassandra 0.7 se pueden crear ndices secundarios: http://www.datastax.com/dev/blog/whats-new-cassandra-07-secondary-indexes Ordenar es una decisin de diseo, las definiciones de familias de columnas incluyen un elemento CompareWith BytesType, UTF8Type, AsciiType, LongType, LexicalUUIDType, TimeUUIDType Las filas son agrupadas y ordenadas (distribuidas en el cluster) por el Partitioner RandomPartitioner, OrderPreservingPartitioner, CollatingOrderPreservingPartitioner Cassandra tiene mejor rendimiento con datos desnormalizados Modelas las consultas y luego defines la estructura de datos a su alrededor 33 RDBS vs. KeySpace 34 Comandos CLI Bsicos Para crear un KeySpace con el cliente cassandra-cli: Una familia de columnas es algo as como una tabla drop keyspace MyKeySpace; create keyspace MyKeySpace; use MyKeySpace; create column family User; describe MyKeySpace; assume User keys as Ascii; assume User comparator as Ascii; set User['dipina']['lname']='Lopez-de-Ipina'; set User['dipina']['fname']='Diego'; set User['dipina']['email']='dipina@deusto.es'; count User['dipina']; get User['dipina']; del User['dipina']['email']; del User['dipina']; get User['dipina']; 35 Soporte Multi-lenguaje de Cassandra Cassandra utiliza la librera Thrift (http://thrift.apache.org/) para proveer una API independiente del lenguaje de programacin Thrift API 1.0: http://wiki.apache.org/cassandra/API Ejemplo en: http://wiki.apache.org/cassandra/ClientExamples Thrift soporta un gran nmero de lenguajes incluyendo: C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, y Ocaml Hay muchas libreras clientes disponibles: Pycassa para Python: http://pycassa.github.com/pycassa/index.html Hector para Java: https://github.com/rantav/hector 36 Cassandra Query Language (CQL) Cassandra ha sido accedido principalmente mediante Thrift una API RPC que proporciona un denominador comn a clientes para lenguajes especficos Pero: Thrift es de demasiado bajo nivel para ser usado de modo productivo o dar soporte a nuevas funcionalidades como los ndices secundarios en 0.7 o los contadores distribuidos en 0.8 CQL da respuesta a esto pasando todos los detalles de implementacin complejos al servidor Los clientes slo tienen que saber cmo interpretar objetos en un resultset Documentacin: http://www.datastax.com/dev/blog/what%E2%80%99s-new-in-cassandra-0-8- part-1-cql-the-cassandra-query-language http://www.datastax.com/docs/0.8/dml/using_cql#use-cql
37 Un poco de CQL Ejemplos tomados de: http://www.datastax.com/dev/blog/what%E2%80%99s-new-in-cassandra-0-8-part-1-cql-the- cassandra-query-language cqlsh> CREATE KEYSPACE test with strategy_class = 'SimpleStrategy' and strategy_options:replication_factor=1; cqlsh> USE test;
cqlsh> SELECT key, state FROM users; key | state | bsanderson | UT | prothfuss | WI | htayler | UT |
cqlsh> SELECT * FROM users WHERE state='UT' AND birth_date > 1970; KEY | birth_date | full_name | state | bsanderson | 1975 | Brandon Sanderson | UT |
38 Base de Datos orientada a Documentos Una base de datos orientada a documentos es un programa diseado para almacenar, recuperar y gestionar informacin semi-estructurada orientada a documentos: Un documento encapsula informacin en un formato estndar (XML, YAML, JSON o BSON): Los documentos en una BBDD orientada a documentos son similares a registros pero no requieren un esquema estndar con la mismas secciones, huecos, partes, claves y similar Los documentos suelen ser direccionables por una clave que los representa unvocamente Adems de la bsqueda por clave de documento, estas BBDD suelen ofrecer una API o lenguaje de consultas que permite recuperar documentos en base a sus contenidos 39 CouchDB CouchDB es una base de datos open source orientada a documentos, accesible mediante una API RESTful que hace uso extensivo de JavaScript Object Notation (JSON) "Couch" es el acrnimo de"Cluster Of Unreliable Commodity Hardware" Su misin es ser muy escalable, con alta disponibilidad y robustez, incluso cuando se ejecuta en hardware convencional Creada como database of the Web Django may be built for the Web, but CouchDB is built of the Web. Ive never seen software that so completely embraces the philosophies behind HTTP. CouchDB makes Django look old-school in the same way that Django makes ASP look outdated. Jacob Kaplan-Moss, Django developer 40 Caractersticas de CouchDB CouchDB es una base de datos orientada a documentos JSON escrita en Erlang. Parte de la generacin de bases de datos NoSQL Es un proyecto open source de la fundacin Apache Motor de almacenamiento basado en B-tree Es altamente concurrente, diseada para ser replicada horizontalmente, a travs de varios dispositivos y tolerante a fallos. Permite a las aplicaciones guardar documentos JSON a travs de una interfaz RESTful Utiliza map/reduce para indexar y consultar la base de datos Permite escribir una aplicacin cliente que habla directamente va HTTP con CouchDB sin necesidad de una capa servidora intermedia Guarda datos en local en la propia mquina cliente para reducir latencia Gestiona la replicacin a la nube por ti 41 CouchDB: BBDD orientada a documentos Una BBDD document-oriented est compuesta de una serie de documentos Son libres de esquema; no existe un esquema definido a priori, antes de usar la BBDD Si un documento necesita un nuevo campo, puedes incluirlo, sin afectar a otros documentos en la BBDD CouchDB no tiene una funcionalidad de auto-increment o secuencia Asigna un Universally Unique Identifier (UUID) a cada documento, haciendo casi imposible que otra base de datos seleccione el mismo identificador No soporta JOINs como las bases de datos relacionales Una caracterstica denominada vista permite crear relaciones arbitrarias entre documentos que no son definidas en las propias bases de datos. CouchDB ofrece una alternativa a todos aquellos proyectos donde un modelo orientado a documentos encaja mejor que una base de datos relacional: wikis, blogs y sistemas de gestin documental 42 Ventajas de CouchDB Documentos JSON todo lo que se guarda en CouchDB son simplemente documentos JSON. Interfaz RESTful desde la creacin a la replicacin a la insercin de datos, toda la gestin de datos en CouchDB puede ser realizada va HTTP. Replicacin N-Master puedes hacer uso de un nmero ilimitado de masters, dando lugar a topologas de replicacin muy interesantes. Escrita para ejecutarse offline CouchDB puede replicarse en dispositivos (e.j. telfonos Android) que pueden quedarse sin conexin y gestionar sincronizacin de datos cuando el dispositivo est online de nuevo Filtros de replicado puedes filtrar de modo preciso los datos que quieres replicar a distintos nodos. http://wiki.apache.org/couchdb/Replication#Filtered_Replication
43 Conceptos clave en CouchDB: Documentos Las BBDD CouchDB guardan documentos nombrados de modo unvoco y proporcionan una API RESTful JSON que permite a las aplicaciones leer y modificar estos documentos Cada documento puede tener campos no definidos en otros documentos: Los documentos no estn asociados a un esquema de bases de datos estricto Cada documento contiene metadatos (datos sobre datos) como el identificador unvoco del documento (id) y su nmero de revisin (rev) Los campos de un documento pueden ser de varios tipos como strings, nmeros, booleanos, colecciones, etc. Cuando se hacen cambios sobre un documento CouchDB se crea una nueva versin del documento, denominado revisin Se mantiene un historial de modificaciones gestionado automticamente por la BBDD CouchDB no dispone de mecanismos de bloqueo (locking) ante escrituras
44 Conceptos clave en CouchDB: Vistas Son el mecanismo para aadir estructura a datos semi- estructurados El modelo de vistas en CouchDB usa JavaScript para describirlas Las vistas son el mtodo para agregar y realizar informes sobre los documentos de un repositorio, siendo creados en demanda para agregar y agregar documentos. Las vistas se construyen dinmicamente y no afectan el documento subyacente, puedes tener tantas representaciones de vistas de los mismos datos como gustes. 45 Conceptos clave en CouchDB: Vistas CouchDB es desestructurado en naturaleza, adolece de un esquema estricto pero provee beneficios en trminos de flexibilidad y escalabilidad, explotar sus datos en aplicaciones reales a veces puede hacerse complicado Los datos se guardan en un espacio de almacenamiento plano, algo as como un repositorio de datos desnormalizados. Proporciona un modelo de vistas para aadir estructura a los datos de modo que pueda agregarse para aadir significado til Las vistas se crean en demanda y son utilizadas para agregar, enlazar y reportar sobre documentos en la base de datos Se definen en documentos de diseo y pueden ser replicadas a travs de varias instancias Estos documentos de diseo contienen funciones JavaScript que pueden ejecutar consultas mediante el concepto de MapReduce. La funcin Map de la vista recibe un documento como argumento y realiza una serie de clculos para determinar qu datos deberan ser disponibles en la vista Si la vista tiene una funcin Reduce, es usada para agregar los resultados. A partir de un conjunto de pares clave/valor devuelve un slo valor.
46 Ejemplo de Vista en CouchDB map: function(doc) { if (doc._attachments) { emit("with attachment", 1); } else { emit("without attachment", 1); } }
reduce: function(keys, values) { return sum(values); } 47 Conceptos clave en CouchDB: Sin esquema CouchDB est diseado para almacenar y reportar sobre grandes volmenes de datos orientados a documentos semi- estructurados. Con CouchDB, no se impone ningn esquema, nuevos tipos de documentos con distintos campos y significados se pueden unir a los existentes. El motor de vistas, apoyado en JavaScript, est diseado para facilitar la gestin de nuevos tipos de documentos y variados pero similares documentos. 48 Conceptos clave: Distribuida CouchDB es un sistema distribuido de base de datos basado en nodos Un nmero variable de nodos CouchDB (servidores y clientes offline) pueden tener copias de rplicas independientes de la misma BBDD, donde las aplicaciones pueden tener interactividad completa con la BBDD (consultar, aadir, editar y borrar) Cuando vuelven a estar online o de modo planificado, los cambios de las bases de datos son replicados bidireccionalmente. CouchDB tiene gestin de conflictos incorporada de serie, haciendo que el proceso de replicacin sea incremental y rpido, copiando slo documentos y campos individuales modificados desde la ltima replicacin. Utiliza Multi-Version Concurrency Control (MVCC) 49 Gestin de Conflictos MVCC Los documentos en CouchDB son versionados, de modo similar a como se realiza en sistemas de control de versiones como Subversion. Si cambias un valor de un documento, realmente creas una nueva versin del mismo que coexiste con la versin antigua Las peticiones se ejecutan en paralelo haciendo que los servidores permitan una alta concurrencia Una peticin de lectura ver siempre la versin ms reciente de la BBDD 50 Detalles tcnicos Un servidor CouchDB gestiona bases de datos bajo un nombre, que almacenan documentos: Cada documento tiene un nombre nico en la BBDD y CouchDB proporciona una API HTTP RESTful para leer y modificar (aadir, editar y borrar) documentos de la BBDD. Los documentos son la unidad de datos primaria en CouchDB y consisten de un nmero variable de campos y adjuntos Las modificaciones sobre documentos (aadir, editar, borrar) son del todo o de nada, o se modifican completamente o fallan completamente. El modelo de modificacin de documentos de CouchDB es optimista y no hace uso de locks. Ms detalles genricos en: http://CouchDB.apache.org/docs/overview.html 51 La API RESTful JSON CouchDB ofrece una API como mecanismo para recuperar datos de una BBDD. Donde siguiendo la convencin REST: (si no aparece la sabes para crear POST y sino PUT) POST crea un nuevo registro GET lee registros PUT actualiza un registro DELETE borra un registro Esta API es accesible va HTTP GET y POST y retorna datos en el formato de objetos JavaScript mediante JSON. Una ventaja de este enfoque es que puede usarse una framework AJAX como Prototype o jQuery para crear una aplicacin web, sin necesidad de hacer uso de un lenguaje de parte servidora La herramienta de lnea de comando CURL pueden ser usada como cliente de lnea de comandos HTTP: Descargable de: http://curl.haxx.se/ Permite realizar peticiones GET, POST, PUT, y DELETE, mostrando la respuesta HTTP recibida del servidor web 52 Probando la API RESTful de CouchDB con curl Podemos borrar una base de datos con el siguiente comando: $ curl -uadmin:enpresadigitala -X DELETE http://127.0.0.1:5984/vegetables Respuesta: {"ok":true} Para crear un documento: $ curl -uadmin:enpresadigitala -X PUT http://127.0.0.1:5984/fruit/apple -H "Content-Type: application/json" -d {} Respuesta: {"ok":true,"id":"apple","rev":"1- 967a00dff5e02add41819138abb3284d"} Para recuperarlo: $ curl -X GET http://127.0.0.1:5984/fruit/apple Respuesta: {"_id":"apple","_rev":"1-967a00dff5e02add41819138abb3284d"} Para recuperar informacin de la BBDD: $ curl -X GET http://127.0.0.1:5984/fruit Respuesta: {"db_name":"fruit","doc_count":1,"doc_del_count":0,"update_seq":1,"p urge_seq":0, "compact_running":false,"disk_size":4179,"instance_start_time":"1321 991208171560","disk_format_version":5,"committed_update_seq":1} 53 Programando CouchDB Gracias a la API RESTful, los desarrolladores pueden conectarse a CouchDB usando cualquier software que soporte HTTP La mayora de los lenguajes modernos ofrecen algn tipo de interfaz HTTP, implicando que CouchDB puede ser usada en cualquier proyecto de desarrollo. Revisar la siguiente pgina para diferentes clientes programticos a CouchDB: http://wiki.apache.org/CouchDB/Related_Projects 54 Vista de un documento en Futon 55 Documentos de Diseo en CloudDB Los documentos de diseo son un tipo especial de documento en CouchDB que contiene cdigo de aplicacin: Vistas MapReduce, validaciones, funciones show, list y update Se suele crear un documento de diseo por cada aplicacin El documento de diseo es un documento CouchDB con un ID que comienza con _design/: Se replica como otros documentos en la BBDD y soporta gestin de conflictos a travs del parmetro rev CouchDB mira las vistas y otras funciones de aplicacin en l Los contenidos estticos de la aplicacin aparecen como _attachments en el documento de diseo
56 Estructura interna de un Documento de Diseo Estn compuestos de: Funciones de validacin Definicin de vistas Funciones show, list y update Attachments Una BBDD CouchDB puede tener varios documentos de diseo. _design/calendar _design/contacts Para recuperar un documento de diseo haz un GET con el siguiente patrn de URL: http://localhost:5984/mydb/ _design/calendar http://127.0.0.1:5984/mydb/ _design/contacts 57 Replicacin en CouchDB La replicacin sincroniza dos copias de la misma BBDD, permitiendo que los usuarios tengan baja latencia de acceso a datos independientemente de su localizacin La replicacin consiste en enviar una peticin HTTP a un servidor CouchDB incluyendo una BBDD de origen y otra de destino, haciendo que CouchDB enve los cambios del origen al destino: POST /_replicate HTTP/1.1 {"source":"database","target":http://example. org/database} 58 Gestin de Conflictos Cuando replicas dos BBDD en CouchDB y se identifican conflictos, CouchDB los seala en los documentos afectados con el atributo "_conflicts":true La versin que es seleccionada como ltima es la versin ganadora. La revision perdedora es almacenada como versin anterior. CouchDB no hace un merge de las revisiones conflictivas. Tu aplicacin es la que resuelve programticamente los conflictos La replicacin garantiza que los conflictos se detecten y que cada instancia de CouchDB haga la misma seleccin respecto a ganadores y perdedores, independientemente de las instancias que existan. 59 CouchApp A CouchApp es una framework para la creacin de aplicaciones JavaScript con CouchDB Como son aplicaciones JavaScript y HTML5 son servidas directamente desde CouchDB Como efecto lateral consigues la flexibilidad y escalabilidad de CouchDB http://couchapp.org/ Para crear una CouchApp, necesitas un modo para meter JavaScript, HTML y otros recursos en CouchDB La herramienta CouchApp escrita en Python es la recomendada para generar plantillas de cdigo en tu aplicacin y volcarlos a una instancia de CouchDB: http://couchapp.org/page/couchapp-python
60 CouchApp CouchApp te simplifica la labor de crear aplicaciones web a partir de CouchDB: Fragmenta un documento de diseo en un conjunto de directorios y ficheros del sistema local, representando views, shows, validations, attachments, etc. que sern enviados al servidor CouchDB Una aplicacin de Couch, CouchApp, sigue ms o menos el patrn de diseo Modelo/Vista/Controlador: CouchDB es el Modelo El rbol DOM representando el HTML mostrado al usuario sera la vista El JavaScript sera el Controller 61 MongoDB Similar a CouchDB Pretende combinar lo mejor de los almacenes clave/valor, bases de datos de documentos y RDBMS Hace uso de JSON y tiene su propio lenguaje de consultas Implementada en C++ Usada por SourceForge, Bit.ly, Foursquare o GitHub URL: http://www.mongodb.org/ 62 MongoDB MongoDB (de la palabra en ingles humongous que significa enorme) es un sistema de base de datos NoSQL orientado a documentos MongoDB guarda estructuras de datos en documentos tipo BSON (Binary JSON (JSON Binario) con un esquema dinmico , haciendo que la integracin de los datos en ciertas aplicaciones sea mas fcil y rpida. 63 Caractersticas Principales Consultas Ad hoc MongoDB soporta la bsqueda por campos, consultas de rangos y expresiones regulares. Las consultas pueden devolver un campo especfico del documento pero tambin puede ser una funcin JavaScript definida por el usuario. Indexacin Cualquier campo en un documento de MongoDB puede ser indexado, al igual que es posible hacer ndices secundarios. El concepto de ndices en MongoDB es similar a los encontrados en base de datos relacionales. Replicacin MongoDB soporta el tipo de replicacin maestro-esclavo. El maestro puede ejecutar comandos de lectura y escritura. El esclavo puede copiar los datos del maestro y slo se puede usar para lectura o para copia de seguridad, pero no se pueden realizar escrituras. El esclavo tiene la habilidad de poder elegir un nuevo maestro en caso del que se caiga el servicio con el maestro actual. Balanceo de carga MongoDB se puede escalar de forma horizontal usando el concepto de shard.
El desarrollador elije una llave shard, la cual determina como sern distribuidos los datos en una coleccin. los datos son divididos en rangos (basado en la llave shard) y distribuidos a travs de mltiples shard. Un shard es un maestro con uno o ms esclavos. MongoDB tiene la capacidad de ejecutarse en mltiple servidores, balanceando la carga y/o duplicando los datos para poder mantener el sistema funcionando en caso que exista un fallo de hardware. Almacenamiento de archivos MongoDB puede ser utilizado con un sistema de archivos, tomando la ventaja de la capacidad que tiene MongoDB para el balanceo de carga y la replicacin de datos utilizando mltiples servidores para el almacenamiento de archivos. Esta funcin (que es llamada GridFS ) est incluida en los drivers de MongoDB y disponible para los lenguajes de programacin que soporta MongoDB. Agregacin La funcin MapReduce puede ser utilizada para el procesamiento por lotes de datos y operaciones de agregacin. Esta funcin permite que los usuarios puedan obtener el tipo de resultado que se obtiene cuando se utiliza el comando SQL group-by. Ejecucin de JavaScript del lado del servidor MongoDB tiene la capacidad de realizar consultas utilizando JavaScript, haciendo que estas sean enviadas directamente a la base de datos para ser ejecutadas.
64 Manipulacin de Datos: colecciones y documentos MongoDB guarda la estructura de los datos en documentos tipo JSON con un esquema dinmico llamado BSON, lo que implica que no existe un esquema predefinido. Los elementos de los datos son llamados documentos y se guardan en colecciones Una coleccin puede tener un nmero indeterminado de documentos Las colecciones son como tablas y los documentos como filas Cada documento en una coleccin puede tener diferentes campos. La estructura de un documento es simple y compuesta por key-value pairs parecido a las matrices asociativas en un lenguaje de programacin Como valor se pueden usar nmeros, cadenas o datos binarios como imgenes o cualquier otro key-value pairs.
65 Ejemplo de documento en MongoDB { "_id": ObjectId("4efa8d2b7d284dad101e4bc7"), "Last Name": "PELLERIN", "First Name": "Franck", "Age": 29, "Address": { "Street": "1 chemin des Loges", "City": "VERSAILLES" } } 66 Documentacin e instalacin La documentacin completa de MongoDB puede encontrarse en: http://docs.mongodb.org/manual/ Instrucciones para instalar MongoDB en Windows: Descargar de: http://docs.mongodb.org/manual/tutorial/install-mongodb-on- windows/ Crear directorio de datos: mkdir data/db Ejecutar el comando: mongod.exe --dbpath ..\data\db Ejecutar el cliente de mongo y los siguientes comandos en JavaScript: C:\Programming\utilities\mongodb-win32-x86_64-2.0.6\bin>mongo MongoDB shell version: 2.0.6 connecting to: test > db.test.save( {a:1} ) > db.test.find() { "_id" : ObjectId("4fe6e41b184d3a26629be9b6"), "a" : 1 } > 67 Usando MongoDB mongo es un shell JavaScript completo, cualquier funcin JavaScript, sintxis o clase puede usarse en el shell mydb j = { name : "mongo" }; t = { x : 3 }; db.things.save(j); db.things.save(t); db.things.find(); for (var i = 1; i <= 20; i++) db.things.save({x : 4, j : i}); db.things.find(); // Iterate through the remaining items it // Store the cursor of the DB in a variable var cursor = db.things.find(); while (cursor.hasNext()) printjson(cursor.next()); // Use functional features of JavaScript db.things.find().forEach(printjson); // cursos like an array var cursor = db.things.find(); printjson(cursor[4]); 68 Documentos de consulta Documentos que indican el patrn de claves y valores que deben ser localizados Ejemplos: SELECT * FROM things WHERE name="mongo db.things.find({name:"mongo"}).forEach(printjson); SELECT * FROM things WHERE x=4 db.things.find({x:4}).forEach(printjson); SELECT j FROM things WHERE x=4 db.things.find({x:4}, {j:true}).forEach(printjson); Recuperar el primer elemento que cumple alguna restriccin: printjson(db.things.findOne({name:"mongo"})); Limitar el nmero de resultados: db.things.find().limit(3); 69 Neo4j A graph database uses nodes, relationships between nodes and key-value properties instead of tables to represent information. This model is typically substantially faster for associative data sets and uses a schema- less, bottoms-up model that is ideal for capturing ad-hoc and rapidly changing data [Emil Eifrem founder of the Neo4j] Open source AGPLv3 Licencia comercial dual disponible 70 Neo4j: Bases de Datos de Grafos Una coleccin de nodos (cosas) y aristas (relaciones) que conectan pares de nodos Se asocian propiedades (key-value pairs) sobre nodos y propiedades Las relaciones conectan dos nodos y tanto nodos como relaciones pueden alojar un nmero arbitrario de pares clave/valor. Puede ser considerado como un key-value store, con soporte completo para relaciones: http://neo4j.org/ Sin esquemas, diseo de modelo de datos de abajo a arriba
71 Caractersticas de Neo4j Licencia dual: abierta y comercial Apropiada para casos de uso de la web como etiquetado, anotaciones de metadatos, redes sociales, wikis y otros conjuntos de datos jerrquicos o en forma de red Modelo de datos flexible consistente de nodos, relaciones y propiedades Tiene un rendimiento de 1000x que RDBMS Almacenamiento en disco nativo optimizado para guardar estructuras de grafos para mximo rendimiento y escalabilidad Recorre grafos de profundidad 1000 a velocidad de milisegundos. Mxima escalabilidad, puede gestionar billones de grafos de nodos/relaciones/propiedades en una sola mquina y puede ser distribuido Completamente transaccional 72 Modelo de datos Un Grafoguarda datos en Nodos que tienen Propiedades El grafo ms sencillo es un nodo con una coleccin de pares clave-valor o propiedades Una propiedad consta de una clave de tipo string que apunta a un valor primitivo o en forma de coleccin. Los Nodos se organizan en Relaciones que tambin tienen Propiedades Las relaciones hacen que los Nodos se conviertan en estructuras arbitrarias Un Traversal navega un Grafo; identifica Caminos que ordenan Nodos Permite encontrar respuestas a preguntas como qu msica tienen mis amigos que yo no tengo Un ndice mapea de Propiedadesbien a Nodos o a Relaciones Permite encontrar un nodo o relacin en funcin de una propiedad 73 Modelo de datos Neo4j es una base de datos de grafos diseada y construida para ser robusta y optimizada para grafos en vez de tablas Aporta la expresividad del grafo con la robustez de una BBDD A Graph Database manages a Graph and also manages related Indexes 74 Arquitectura lgica de Neo4j Core API REST API JVM Language Bindings Traversal Framework Caches Memory-Mapped (N)IO Filesystem Java Ruby Clojure Graph Matching 75 Cypher: lenguaje de consultas Es el SQL for graphs y devuelve resultados en forma tabular Cypher permite la consulta expresiva y eficiente de un almacn de grafos sin necesidad de escribir cdigo para recorridos (traverse) De momento es slo un lenguaje de consultas Permite agregar, ordenar y establecer lmites en los resultados Hace uso de palabras clave como WHERE y ORDER BY, inspirado por SQL Tambin adopta las capacidades de aplicar expresiones regulares en las consultas como SPARQL. Documentacin: http://docs.neo4j.org/chunked/1.4/cypher-query-lang.html 76 Programacin de Neo4j Neo4j tiene una librera java que te permite empotrarla en tu aplicacin Java Documentacin. http://docs.neo4j.org/chunked/milestone/tut orials-java-embedded-hello-world.html 77 Persistencia Polglota 78 NoSQL or not NoSQL? En NoSQL, generalmente los datos son recuperados de manera mucho ms rpida que en un RDBMS, sin embargo las consultas que se pueden hacer son ms limitadas y requieren trasladar complejidad a la aplicacin RDBMS para escribir usan locks y redos para garantizar ACID, pero NoSQL no soporta a menudo Atomicy, Consistency o Durability Si quieres soporte transaccional integral debes seguir usando RDBMS Aplicaciones que generan informes emplean consultas complejas para las que NoSQL no es muy adecuado Aplicando MapReduce, las bases de datos NoSQL pueden paralelizar operaciones complejas como agregaciones estadsticas, filtros, agrupaciones o ordenacin. Desde un punto de vista de sistemas deberamos considerar la combinacin de SQL y NoSQL: LinkedIn comenz slo con un RDBMS, pero desarroll su propia BBDD NoSQL (Voldemort) Facebook tienen una arquitectura hbrida con Memcached y MySQL junto a un OLTP (envo de mensajes al Wall), y Cassandra para la bsqueda en la bandeja de entrada 79 NoSQL or not NoSQL? Los principales problemas de NoSQL son: Su complejidad: Instalacin Consultas (comprender bien MapReduce) Los modelos de datos usados Su falta de madurez Dnde usarlas? Datos sociales Procesado de datos (Hadoop) Bsqueda (Lucene) Caching (Memcache) Data Warehousing Qu problema quieres resolver? Transacciones Grandes volmenes de datos (Exabytes) Estructura de los datos 80 Conclusin Las BBDD NoSQL son una clara alternativa a los RDBMS Sobre todo para algunas aplicaciones sociales y web que requieren elevada escalabilidad No son idneas para todo, de hecho en la mayora de los casos las RDBMS deberan seguir siendo la primera opcin: La capacidad de hacer JOIN y las garantas ACID son muy importantes para muchas aplicaciones Es muy posible que los RDBMS actuales evolucionen para incorporar capacidades de NoSQL 81 Referencias Cassandra NoSQL Not only SQL (Introduction to Apache Cassandra) http://www.scriptandscroll.com/3508/technology/nosql-not-only- sql-introduction-to-apache-cassandra/#.TtonPmMk6nA DataSax company: http://www.datastax.com/about-us/about-datastax Getting started with CQL: http://www.datastax.com/docs/0.8/dml/using_cql http://cassandra.apache.org/ 82 Referencias CouchDB Exploring CouchDB, Joe Lennon, http://www.ibm.com/developerworks/opensource/library/os-CouchDB/index.html CouchDB tutorial http://net.tutsplus.com/tutorials/getting-started-with-couchdb/ CouchDB for geeks: http://www.slideshare.net/svdgraaf/CouchDB-for-geeks?from=share_email CouchDB site: http://CouchDB.apache.org/ CouchApp.org: The Do It Yourself Evently Tutorial http://couchapp.org/page/evently-do-it-yourself CouchApp.org: What the HTTP is CouchApp? http://wiki.couchapp.org/page/what-is-couchapp Tutorial: Using JQuery and CouchDB to build a simple AJAX web application http://blog.edparcell.com/using-jquery-and-CouchDB-to-build-a-simple-we CouchApp site: http://couchapp.org/page/getting-started
83 Referencias Neo4j Pgina web de Neo4j: http://neo4j.org/ Neo4j: a NOSQL overview and the benefits of graph databases: http://www.slideshare.net/emileifrem/nosql-east-a-nosql- overview-and-the-benefits-of-graph-databases Neo4j - A Graph Database That Kicks Buttox http://highscalability.com/neo4j-graph-database-kicks-buttox/ Graph databases and Neo4j http://www.slideshare.net/thobe/nosqleu-graph- databases-and-neo4j
84 Referencias NoSQL vs. RDBMS The future is: Polyglot Persistence http://martinfowler.com/articles/nosql-intro.pdf NoSQL databases http://www.slideshare.net/marin_dimitrov/nosql-databases-3584443 Riyaz -- Thanks for the question regarding "NOSQL vs. RDBMS databases", version 10r2 http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:2664632 900346253817 NoSQL or not NoSQL? http://www.slideshare.net/ruflin/nosql-or-not-nosql/download Comparativa de diferentes soluciones NoSQL: http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis SQL vs. NoSQL http://www.linuxjournal.com/article/10770
85 Bases de Datos No Relacionales (NoSQL) 4 de Julio de 2012 Red de Innovacin y Transferencia en Gestin de Datos Fundacin Universidad Rey Juan Carlos, Plaza Manuel Becerra,14, Madrid
Dr. Diego Lz. de Ipia Glz. de Artaza DeustoTech-INTERNET2, DeustoTech Deusto Institute of Technology, Universidad de Deusto dipina@deusto.es http://paginaspersonales.deusto.es/dipina http://www.morelab.deusto.es