SlideShare une entreprise Scribd logo
1  sur  85
Télécharger pour lire hors ligne
Bases de Datos No Relacionales (NoSQL)
                           4 de Julio de 2012
        Red de Innovación y Transferencia en Gestión de Datos
Fundación Universidad Rey Juan Carlos, Plaza Manuel Becerra,14, Madrid

                      Dr. Diego Lz. de Ipiña 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



                                           1
Infraestructura Virtualizada:
          Cloud Computing
Un paradigma de computación emergente donde los datos y servicios
residen en centros de datos muy escalables que pueden ser accedidos
ubicuamente desde cualquier dispositivo conectado a Internet1

                                                        Merrill Lynch:
                                                   Cloud computing market
                                                    opportunity by 2011 =
                                                    $95bn in business and
                                                     productivity apps +
                                                 $65bn in online advertising =
                                                           $160bn




                                                     (1) Source: IBM


                                  2
Cloud Computing es …
• …       capacidad       computacional     y
  almacenamiento       virtualizada  expuesta
  mediante infraestructura agnóstica a la
  plataforma y accedida por Internet
  – Recursos IT compartidos en demanda, creados y
    eliminados eficientemente y de modo escalable a
    través de una variedad de interfaces programáticos
    facturados en base a su uso


                         3
Evolución de Tecnologías de Cloud
           Computing
 • Maduración de tecnología de virtualización
 • La virtualización permite nubes de computación
 • Las nubes de computación demandan nubes de
   almacenamiento
 • Las nubes de almacenamiento y computación 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

                             4
Arquitectura Cloud Computing




             5
Introducción a NoSQL
• NoSQL – es un término 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 término fue acuñado 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 generación como “Big Data”


                               6
Introducción a NoSQL
• NoSQL – "not only SQL” – es una categoría general
  de sistemas de gestión de bases de datos que difiere
  de modelo relacionales clásicos (RDBMS) en
  diferente modos:
   – Estos datastores no requieren esquemas de información
     fijas
   – Evitan las operaciones JOIN y escalan horizontalmente
• De hecho, tanto las bases de datos NoSQL como las
  relacionales son tipos de Almacenamiento
  Estructurado
                            7
Introducción a NoSQL
• La principal diferencia radica en cómo guardan los datos (por
  ejemplo, almacenamiento de un recibo):
   – En una RDBMS tendríamos que partir la información en
     diferentes tablas y luego usar un lenguaje de programación 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 diseñas tus tablas y
        su estructura por adelantado
• ¡¡¡NoSQL no es la panacea!!!
   – Si tus datos son relacionales, quedarte con tu RDBMS sería la opción
     correcta
                                   8
El teorema CAP
• Teorema de Brewer: “es imposible para un sistema computacional
  distribuido ofrecer simultáneamente las siguientes tres garantías”:
    – Consistencia – todos los nodos ven los mismos datos al mismo tiempo
    – Disponibilidad (Availability) – garantiza que cada petición recibe una
      respuesta acerca de si tuvo éxito o no
    – Tolerancia a la partición (Partition) – el sistema continua funcionando a pesar
      de la pérdida de mensajes
• Equivalente a:
    – “You can have it good, you can have it fast, you can have it cheap: pick two.”




                                        9
Transacciones BASE
• Acrónimo análogo a ACID para NoSQL que prima disponibilidad
  frente a consistencia:
    – Basically Available,
    – Soft state,
    – Eventually Consistent
• Características:
    –   Consistencia débil – stale data OK
    –   Prima la disponibilidad
    –   Best effort
    –   Respuestas aproximadas OK
    –   Agresivo (optimista)
    –   Más sencillo y más rápido
• Comparativa en: http://queue.acm.org/detail.cfm?id=1394128


                                      10
¿Por qué NoSQL?
• Tendencia 1: Tamaño
   – Hemos creado más datos en los últimos dos años que en todos los
     años anteriores  Exabytes (1018) por año
• Tendencia 2: Conectividad
   – Los datos están cada vez más 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 más desestructurados
• Tendencia 4: Arquitectura
   – El software orientado a servicios actual donde cada servicio tiene su
     back-end


                                    11
RDBMS vs. NoSQL
•   Las bases de datos relacionales tradicionales nos permiten definir la estructura de
    un esquema que demanda reglas rígidas y garantizan ACID:
     –   Atomicity
     –   Consistency
     –   Isolation
     –   Durability
•   Las aplicaciones web modernas presentan desafíos 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


                                              12
Arquitectura de las BBDD NoSQL
• A menudo ofrecen sólo garantías de consistencia
  débiles, 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
                          13
Taxonomía de soluciones NoSQL
• Los principales tipos de BBDD de acuerdo con
  su implementación son los siguientes:
  – Almacenes de Clave-Valor
  – Almacenes de Familia de Columnas
  – Almacenes de documentos
  – Almacenes de Grafos




                      14
Características BBDD
      orientadas a Clave-Valor
• Su precursor fue Amazon Dynamo
  – Basadas en DHT (Distributed Hash Tables)
• Modelo de datos: colección de pares
  clave/valor
• Ejemplos: Dynamite, Voldemort, Tokyo




                        15
Características 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 configuración
  diferente de columnas
   – Cada clave está asociada con varios atributos (columnas)
• Ejemplos: HBase, Hypertable, Cassandra, Riak
• Buenas en:
   –   Gestión de tamaño
   –   Cargas de escrituras masivas orientas al stream
   –   Alta disponibilidad
   –   MapReduce

                                    16
Características 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 rápido
  –   Orientas a la web: CRUD
                             17
Características Bases de
     Datos Basadas en Grafos
• Inspiradas por Euler y la teoría 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

                        18
Apache Cassandra
• Es un almacén altamente escalable, eventualmente
  consistente y distribuido de estructuras clave-valor.
   – Iniciado por Facebook
   – Código abierto
   – Proyecto apache
        • Licencia: Apache License 2.0
   –   Escrito en Java
   –   Multiplataforma
   –   Versión actual: 1.0.9
   –   Web: http://cassandra.apache.org/
• Documentación: http://www.datastax.com/docs/1.0/index


                                         19
¿Quién usa Apache Cassandra?
• Algunos usuarios famosos de Cassandra son:
  – Digg
  – Facebook
  – Twitter
  – Rackspace
  – SimpleGEO
  –…



                     20
Ventajas de Cassandra para
             desarrolladores Web
•   Cassandra está desarrollada para ser un servidor distribuido, pero puede también
    ejecutarse como un nodo simple:
     –   Escalabilidad horizontal (añade nuevo hardware cuando sea preciso)
     –   Rápidas respuestas aunque la demanda crezca
     –   Elevadas velocidades de escritura para gestionar volúmenes de datos incrementales
     –   Almacenamiento distribuido
     –   Capacidad de cambiar la estructura de datos cuando los usuarios demandan más
         funcionalidad
     –   Una API sencilla y limpia para tu lenguaje de programación favorito
     –   Detección automática 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


                                             21
Desventajas de Cassandra
• Hay algunas desventajas que un sistema de
  almacenamiento tan escalable ofrece en
  contrapartida:
  – No hay joins (a cambio de más velocidad)
  – No permite ordenar resultados en tiempo de
    consulta
  – No tiene SQL
     • Pero desde la versión 0.8 tenemos CQL


                           22
Instalación de Cassandra
• Requisitos:
  – Java 1.6 en adelante
• Las últimas versiones estables disponibles en:
  – http://cassandra.apache.org/download/
• Documentación en:
  – Cassandra Wiki: GettingStarted,
    http://wiki.apache.org/cassandra/GettingStarted


                           23
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.




                                   24
Modelo de Datos en Cassandra
•   Diseñado para datos distribuidos de modo escalable  sacrifica ACID por ventajas
    en rendimiento, disponibilidad y gestión 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 básicos son:
     – Clúster: son las máquinas que componen una instancia de Cassandra
          • Pueden contener varios Keyspaces
     – Keyspace: espacio de nombres para un conjunto de ColumFamily, asociado a una
       aplicación
          • 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


                                                 25
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”:




                            26
Resumen Modelo de Datos




          27
Clúster
• Los datos en Cassandra se guardan en un
  Clúster o Ring donde se asignan datos a los
  nodos dentro de un ring
  – Un nodo tiene réplicas para diferentes rangos de
    datos
  – Si un nodo se cae su réplica puede responder
  – Un protocolo P2P hace que los datos se repliquen
    entre nodos acorde con un
    replication_factor

                        28
Ring, clúster y el protocolo
                  Gossip
• Cassandra usa un protocolo Gossip para permitir
  comunicación dentro de un ring, de tal modo que cada nodo
  sabe de otros nodos
   – Permite soportar descentralización y tolerancia a la partición
• Cassandra está diseñada para ser distribuida en varias
  máquinas que aparecen como una simple máquina a los ojos
  de los clientes
   – La estructura más externa de Cassandra es el cluster o ring
       • Un nodo tiene una réplica para diferentes rangos de datos, si algo va mal
         una réplica puede responder
           – El parámetro replication_factor en la creación de un KeySpace indica
             cuántas máquinas en el clúster recibirán copias de los mismos datos.



                                      29
Configuración de un Keyspace
• Los atributos básicos que puedes asociar a un
  keyspace son:
   – Replication factor: cuánto quieres pagar en rendimiento a
     favor de consistencia
   – Replica placement strategy: indica cómo se colocan las
     réplicas 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

                                 30
Configuración 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 más trabajo eligiendo node tokens
       • Más 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


                                     31
Diferencias entre un RDBMS y
              Cassandra
•   No hay lenguaje de consulta, tiene una API accesible a través de Thrift
     –   Verdad a medias: si existe desde la versión 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 decisión de diseño, 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

                                                  32
RDBS vs. KeySpace




       33
Comandos CLI Básicos
•   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'];
                                     34
Soporte Multi-lenguaje de
               Cassandra
• Cassandra utiliza la librería Thrift (http://thrift.apache.org/)
  para proveer una API independiente del lenguaje de
  programación
   – Thrift API 1.0: http://wiki.apache.org/cassandra/API
   – Ejemplo en: http://wiki.apache.org/cassandra/ClientExamples
• Thrift soporta un gran número de lenguajes incluyendo: C++,
  Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa,
  JavaScript, Node.js, Smalltalk, y Ocaml
• Hay muchas librerías clientes disponibles:
   – Pycassa para Python: http://pycassa.github.com/pycassa/index.html
   – Hector para Java: https://github.com/rantav/hector


                                 35
Cassandra Query Language (CQL)
• Cassandra ha sido accedido principalmente mediante Thrift – una API RPC
  que proporciona un denominador común a clientes para lenguajes
  específicos
• 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 implementación
  complejos al servidor
    – Los clientes sólo tienen que saber cómo interpretar objetos en un “resultset”
• Documentación:
   •   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

                                       36
•
                              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> CREATE COLUMNFAMILY users (
        ...     key varchar PRIMARY KEY,
        ...     full_name varchar,
        ...     birth_date int,
        ...     state varchar
        ... );

     cqlsh> CREATE INDEX ON users (birth_date);
     cqlsh> CREATE INDEX ON users (state);

     cqlsh> INSERT INTO users (key, full_name, birth_date, state) VALUES ('bsanderson', 'Brandon
         Sanderson', 1975, 'UT');
     cqlsh> INSERT INTO users (key, full_name, birth_date, state) VALUES ('prothfuss', 'Patrick
         Rothfuss', 1973, 'WI');
     cqlsh> INSERT INTO users (key, full_name, birth_date, state) VALUES ('htayler', 'Howard Tayler',
         1968, 'UT');

     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 |

                                                       37
Base de Datos orientada a
             Documentos
• Una base de datos orientada a documentos es un programa
  diseñado para almacenar, recuperar y gestionar información
  semi-estructurada orientada a documentos:
   – Un documento encapsula información en un formato estándar (XML,
     YAML, JSON o BSON):
       • Los documentos en una BBDD orientada a documentos son similares a
         registros pero no requieren un esquema estándar con la mismas
         secciones, huecos, partes, claves y similar
       • Los documentos suelen ser direccionables por una clave que los
         representa unívocamente
       • Además de la búsqueda por clave de documento, estas BBDD suelen
         ofrecer una API o lenguaje de consultas que permite recuperar
         documentos en base a sus contenidos


                                   38
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 acrónimo de"Cluster Of Unreliable
     Commodity Hardware"
      • Su misión 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. I’ve 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
                                      39
Características de CouchDB
• CouchDB es una base de datos orientada a documentos JSON escrita en
  Erlang.
    – Parte de la generación de bases de datos NoSQL
    – Es un proyecto open source de la fundación Apache
    – Motor de almacenamiento basado en B-tree
• Es altamente concurrente, diseñada para ser replicada horizontalmente, a
  través de varios dispositivos y tolerante a fallos.
• Permite a las aplicaciones guardar documentos JSON a través de una
  interfaz RESTful
• Utiliza map/reduce para indexar y consultar la base de datos
• Permite escribir una aplicación cliente que habla directamente vía HTTP
  con CouchDB sin necesidad de una capa servidora intermedia
• Guarda datos en local en la propia máquina cliente para reducir latencia
    – Gestiona la replicación a la nube por ti
                                        40
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 característica 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 gestión documental
                                           41
Ventajas de CouchDB
• Documentos JSON – todo lo que se guarda en CouchDB son simplemente
  documentos JSON.
• Interfaz RESTful – desde la creación a la replicación a la inserción de
  datos, toda la gestión de datos en CouchDB puede ser realizada vía HTTP.
• Replicación N-Master – puedes hacer uso de un número ilimitado de
  ‘masters’, dando lugar a topologías de replicación muy interesantes.
• Escrita para ejecutarse offline – CouchDB puede replicarse en dispositivos
  (e.j. teléfonos Android) que pueden quedarse sin conexión y gestionar
  sincronización 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



                                      42
Conceptos clave en CouchDB:
             Documentos
•   Las BBDD CouchDB guardan documentos nombrados de modo unívoco 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 están asociados a un esquema de bases de datos estricto
•   Cada documento contiene metadatos (datos sobre datos) como el identificador
    unívoco del documento (id) y su número de revisión (rev)
•   Los campos de un documento pueden ser de varios tipos como strings, números,
    booleanos, colecciones, etc.
•   Cuando se hacen cambios sobre un documento CouchDB se crea una nueva
    versión del documento, denominado revisión
     – Se mantiene un historial de modificaciones gestionado automáticamente por la BBDD
•   CouchDB no dispone de mecanismos de bloqueo (locking) ante escrituras



                                               43
Conceptos clave en CouchDB:
               Vistas
• Son el mecanismo para añadir estructura a datos semi-
  estructurados
• El modelo de vistas en CouchDB usa JavaScript para
  describirlas
• Las vistas son el método para agregar y realizar informes
  sobre los documentos de un repositorio, siendo creados en
  demanda para agregar y agregar documentos.
• Las vistas se construyen dinámicamente y no afectan el
  documento subyacente, puedes tener tantas
  representaciones de vistas de los mismos datos como gustes.


                             44
Conceptos clave en CouchDB:
                 Vistas
•   CouchDB es desestructurado en naturaleza, adolece de un esquema estricto pero
    provee beneficios en términos 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 añadir estructura a los datos de modo que pueda
       agregarse para añadir 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 diseño y pueden ser replicadas a través de varias
       instancias
     – Estos documentos de diseño contienen funciones JavaScript que pueden ejecutar
       consultas mediante el concepto de MapReduce.
         • La función Map de la vista recibe un documento como argumento y realiza una
            serie de cálculos para determinar qué datos deberían ser disponibles en la vista
         • Si la vista tiene una función Reduce, es usada para agregar los resultados. A partir
            de un conjunto de pares clave/valor devuelve un sólo valor.

                                             45
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);
}

                         46
Conceptos clave en CouchDB:
           Sin esquema
• CouchDB está diseñado para almacenar y reportar sobre
  grandes volúmenes de datos orientados a documentos semi-
  estructurados.
• Con CouchDB, no se impone ningún esquema, nuevos tipos
  de documentos con distintos campos y significados se pueden
  unir a los existentes.
• El motor de vistas, apoyado en JavaScript, está diseñado para
  facilitar la gestión de nuevos tipos de documentos y variados
  pero similares documentos.



                              47
Conceptos clave: Distribuida
• CouchDB es un sistema distribuido de base de datos basado
  en nodos
   – Un número variable de nodos CouchDB (servidores y clientes offline)
     pueden tener “copias de réplicas” independientes de la misma BBDD,
     donde las aplicaciones pueden tener interactividad completa con la
     BBDD (consultar, añadir, editar y borrar)
       • Cuando vuelven a estar online o de modo planificado, los cambios de las
         bases de datos son replicados bidireccionalmente.
• CouchDB tiene gestión de conflictos incorporada de serie,
  haciendo que el proceso de replicación sea incremental y
  rápido, copiando sólo documentos y campos individuales
  modificados desde la última replicación.
   – Utiliza Multi-Version Concurrency Control (MVCC)
                                     48
Gestión 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 versión del mismo que coexiste con la versión antigua
• Las peticiones se ejecutan en paralelo haciendo que los
  servidores permitan una alta concurrencia
   – Una petición de lectura verá siempre la versión más reciente de la
     BBDD




                                   49
Detalles técnicos
• 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 (añadir, editar
     y borrar) documentos de la BBDD.
   – Los documentos son la unidad de datos primaria en CouchDB y
     consisten de un número variable de campos y adjuntos
   – Las modificaciones sobre documentos (añadir, editar, borrar) son del
     todo o de nada, o se modifican completamente o fallan
     completamente.
   – El modelo de modificación de documentos de CouchDB es optimista y
     no hace uso de locks.
   – Más detalles genéricos en:
     http://CouchDB.apache.org/docs/overview.html

                                   50
La API RESTful JSON
•   CouchDB ofrece una API como mecanismo para recuperar datos de una BBDD.
     – Donde siguiendo la convención 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 vía 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 aplicación web, sin necesidad de hacer uso de un lenguaje de
       parte servidora
     – La herramienta de línea de comando CURL pueden ser usada como cliente de línea 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




                                                  51
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 información 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}

                                             52
Programando CouchDB
• Gracias a la API RESTful, los desarrolladores pueden
  conectarse a CouchDB usando cualquier software
  que soporte HTTP
• La mayoría de los lenguajes modernos ofrecen algún
  tipo de interfaz HTTP, implicando que CouchDB
  puede ser usada en cualquier proyecto de desarrollo.
   – Revisar la siguiente página para diferentes clientes
     programáticos a CouchDB:
      • http://wiki.apache.org/CouchDB/Related_Projects



                                53
Vista de un documento en Futon




              54
Documentos de Diseño en
             CloudDB
• Los documentos de diseño son un tipo especial de documento
  en CouchDB que contiene código de aplicación:
   – Vistas MapReduce, validaciones, funciones show, list y update
• Se suele crear un documento de diseño por cada aplicación
• El documento de diseño es un documento CouchDB con un ID
  que comienza con _design/:
   – Se replica como otros documentos en la BBDD y soporta gestión de
     conflictos a través del parámetro rev
       • CouchDB mira las vistas y otras funciones de aplicación en él
       • Los contenidos estáticos de la aplicación aparecen como
         _attachments en el documento de diseño



                                      55
Estructura interna de un
               Documento de Diseño
•   Están compuestos de:
     –   Funciones de validación
     –   Definición de vistas
     –   Funciones show, list y update
     –   Attachments
•   Una BBDD CouchDB puede tener varios
    documentos de diseño.
     – _design/calendar
     – _design/contacts
•   Para recuperar un documento de
    diseño haz un GET con el siguiente
    patrón de URL:
     – http://localhost:5984/mydb/
       _design/calendar
     – http://127.0.0.1:5984/mydb/
       _design/contacts


                                         56
Replicación en CouchDB

• La replicación sincroniza dos copias de la misma
  BBDD, permitiendo que los usuarios tengan baja
  latencia de acceso a datos independientemente de
  su localización
  – La replicación consiste en enviar una petición HTTP a un
    servidor CouchDB incluyendo una BBDD de origen y otra
    de destino, haciendo que CouchDB envíe los cambios del
    origen al destino:
     • POST /_replicate HTTP/1.1
       {"source":"database","target":http://example.
       org/database}

                             57
Gestión de Conflictos
• Cuando replicas dos BBDD en CouchDB y se identifican
  conflictos, CouchDB los señala en los documentos afectados
  con el atributo "_conflicts":true
   – La versión que es seleccionada como última es la versión ganadora.
   – La revision perdedora es almacenada como versión anterior.
   – CouchDB no hace un merge de las revisiones conflictivas.
       • Tu aplicación es la que resuelve programáticamente los conflictos
   – La replicación garantiza que los conflictos se detecten y que cada
     instancia de CouchDB haga la misma selección respecto a ganadores y
     perdedores, independientemente de las instancias que existan.




                                      58
CouchApp
• A CouchApp es una framework para la creación 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 código en tu aplicación y volcarlos a una instancia
     de CouchDB:
       • http://couchapp.org/page/couchapp-python
                                    59
CouchApp
• CouchApp te simplifica la labor de crear aplicaciones web a
  partir de CouchDB:
   – Fragmenta un documento de diseño en un conjunto de directorios y
     ficheros del sistema local, representando views, shows, validations,
     attachments, etc. que serán enviados al servidor CouchDB
• Una aplicación de Couch, CouchApp, sigue más o menos el
  patrón de diseño Modelo/Vista/Controlador:
   – CouchDB es el Modelo
   – El árbol DOM representando el HTML mostrado al usuario sería la vista
   – El JavaScript sería el Controller




                                   60
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/


                         61
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 dinámico , haciendo que la
  integración de los datos en ciertas aplicaciones sea
  mas fácil y rápida.



                          62
Características Principales
•   Consultas Ad hoc
      –    MongoDB soporta la búsqueda por campos, consultas de rangos y expresiones regulares. Las consultas pueden devolver un campo
           específico del documento pero también puede ser una función JavaScript definida por el usuario.
•   Indexación
      –    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.
•   Replicación
      –    MongoDB soporta el tipo de replicación maestro-esclavo. El maestro puede ejecutar comandos de lectura y escritura. El esclavo puede copiar
           los datos del maestro y sólo 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 serán distribuidos los datos en una colección. los datos son divididos en rangos
           (basado en la llave shard) y distribuidos a través de múltiples shard.
      –    Un shard es un maestro con uno o más esclavos.
      –    MongoDB tiene la capacidad de ejecutarse en múltiple 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 replicación de datos utilizando múltiples servidores para el almacenamiento de archivos.
      –    Esta función (que es llamada GridFS ) está incluida en los drivers de MongoDB y disponible para los lenguajes de programación que soporta
           MongoDB.
•   Agregación
      –    La función MapReduce puede ser utilizada para el procesamiento por lotes de datos y operaciones de agregación. Esta función permite que
           los usuarios puedan obtener el tipo de resultado que se obtiene cuando se utiliza el comando SQL “group-by”.
•   Ejecución 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.

                                                                        63
Manipulación de Datos:
         colecciones y documentos
• MongoDB guarda la estructura de los datos en documentos tipo JSON con
  un esquema dinámico 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 colección puede tener un número indeterminado de documentos
    – Las colecciones son como tablas y los documentos como filas
    – Cada documento en una colección 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 programación
    – Como valor se pueden usar números, cadenas o datos binarios como
      imágenes o cualquier otro “key-value pairs”.



                                     64
Ejemplo de documento
            en MongoDB
{
    "_id": ObjectId("4efa8d2b7d284dad101e4bc7"),
    "Last Name": "PELLERIN",
    "First Name": "Franck",
    "Age": 29,
    "Address": {
        "Street": "1 chemin des Loges",
        "City": "VERSAILLES"
    }
}




                         65
Documentación e instalación
• La documentación 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 ..datadb
    – Ejecutar el cliente de mongo y los siguientes comandos en JavaScript:
        C:Programmingutilitiesmongodb-win32-x86_64-2.0.6bin>mongo
        MongoDB shell version: 2.0.6
        connecting to: test
        > db.test.save( {a:1} )
        > db.test.find()
        { "_id" : ObjectId("4fe6e41b184d3a26629be9b6"), "a" : 1 }
        >


                                     66
Usando MongoDB
•   mongo es un shell JavaScript completo, cualquier función JavaScript, sintáxis 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]);



                                              67
Documentos de consulta
• Documentos que indican el patrón 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 restricción:
        • printjson(db.things.findOne({name:"mongo"}));
    – Limitar el número de resultados:
        • db.things.find().limit(3);



                                         68
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




                                        69
Neo4j: Bases de Datos de Grafos
• Una colección 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 número arbitrario de pares
  clave/valor.
• Puede ser considerado como un key-value store, con soporte
  completo para relaciones:
   – http://neo4j.org/
• Sin esquemas, diseño de modelo de datos de abajo a arriba

                             70
Características 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 jerárquicos 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 máximo rendimiento y escalabilidad
    – Recorre grafos de profundidad 1000 a velocidad de milisegundos.
• Máxima escalabilidad, puede gestionar billones de grafos de
  nodos/relaciones/propiedades en una sola máquina y puede ser
  distribuido
• Completamente transaccional

                                      71
Modelo de datos
• Un Grafo—guarda datos en→ Nodos —que tienen→ Propiedades
   – El grafo más sencillo es un nodo con una colección 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 colección.
• Los Nodos —se organizan en→ Relaciones —que también 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é música tienen mis
     amigos que yo no tengo”
• Un Índice —mapea de→ Propiedades—bien a→ Nodos o a Relaciones
   – Permite encontrar un nodo o relación en función de una propiedad

                                      72
Modelo de datos
• Neo4j es una base de datos de grafos diseñada 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”




                                  73
Arquitectura lógica de Neo4j

                              Java   Ruby   …   Clojure
      REST API
                           JVM Language Bindings
          Traversal Framework        Graph Matching
                 Core API
                  Caches
          Memory-Mapped (N)IO
                 Filesystem




                      74
Cypher: lenguaje de consultas
•   Es el “SQL for graphs” y devuelve resultados en forma tabular
•   Cypher permite la consulta expresiva y eficiente de un almacén de grafos sin necesidad de
    escribir código para recorridos (traverse)
     –   De momento es sólo un lenguaje de consultas
     –   Permite agregar, ordenar y establecer límites en los resultados
     –   Hace uso de palabras clave como WHERE y ORDER BY, inspirado por SQL
     –   También adopta las capacidades de aplicar expresiones regulares en las consultas como SPARQL.
           •   Documentación: http://docs.neo4j.org/chunked/1.4/cypher-query-lang.html




                                                          75
Programación de Neo4j
• Neo4j tiene una librería java que te permite
  empotrarla en tu aplicación Java
• Documentación.
  http://docs.neo4j.org/chunked/milestone/tut
  orials-java-embedded-hello-world.html




                      76
Persistencia Políglota




          77
NoSQL or not NoSQL?
•   En NoSQL, generalmente los datos son recuperados de manera mucho más rápida
    que en un RDBMS, sin embargo las consultas que se pueden hacer son más
    limitadas y requieren trasladar complejidad a la aplicación
•   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 estadísticas, filtros, agrupaciones o ordenación.
•   Desde un punto de vista de sistemas deberíamos considerar la combinación de
    SQL y NoSQL:
     – LinkedIn comenzó sólo con un RDBMS, pero desarrolló su propia BBDD NoSQL
       (Voldemort)
     – Facebook tienen una arquitectura híbrida con Memcached y MySQL junto a un OLTP
       (envío de mensajes al Wall), y Cassandra para la búsqueda en la bandeja de entrada

                                            78
NoSQL or not NoSQL?
•   Los principales problemas de NoSQL son:
     – Su complejidad:
          • Instalación
          • Consultas (comprender bien MapReduce)
          • Los modelos de datos usados
     – Su falta de madurez
•   ¿Dónde usarlas?
     –   Datos sociales
     –   Procesado de datos (Hadoop)
     –   Búsqueda (Lucene)
     –   Caching (Memcache)
     –   Data Warehousing
•   ¿Qué problema quieres resolver?
     – Transacciones
     – Grandes volúmenes de datos (Exabytes)
     – Estructura de los datos

                                             79
Conclusión
• Las BBDD NoSQL son una clara alternativa a los RDBMS
   – Sobre todo para algunas aplicaciones sociales y web que requieren
     elevada escalabilidad
• No son idóneas para todo, de hecho en la mayoría de los
  casos las RDBMS deberían seguir siendo la primera opción:
   – La capacidad de hacer JOIN y las garantías ACID son muy importantes
     para muchas aplicaciones
• Es muy posible que los RDBMS actuales evolucionen
  para incorporar capacidades de NoSQL



                                  80
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/

                               81
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

                                         82
Referencias
• Neo4j
  – Página 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



                                83
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
                                         84
Bases de Datos No Relacionales (NoSQL)
                           4 de Julio de 2012
        Red de Innovación y Transferencia en Gestión de Datos
Fundación Universidad Rey Juan Carlos, Plaza Manuel Becerra,14, Madrid

                      Dr. Diego Lz. de Ipiña 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



                                           85

Contenu connexe

Tendances

NoSQL bases de datos no relacionales
NoSQL bases de datos no relacionalesNoSQL bases de datos no relacionales
NoSQL bases de datos no relacionalesAndrés Londoño
 
Sistema De Gestión De Base De Datos
Sistema De Gestión De Base De DatosSistema De Gestión De Base De Datos
Sistema De Gestión De Base De DatosGuillermo Chirinos
 
Bases de Datos NoSQL - Riak
Bases de Datos NoSQL - Riak Bases de Datos NoSQL - Riak
Bases de Datos NoSQL - Riak Andrei Amador
 
Fundamentos de Bases de Datos - Introducción
Fundamentos de Bases de Datos - IntroducciónFundamentos de Bases de Datos - Introducción
Fundamentos de Bases de Datos - IntroducciónManuel Padilla
 
Base de Datos
Base de DatosBase de Datos
Base de Datosvjgaby
 
Modelos de Base de Datos
Modelos de Base de DatosModelos de Base de Datos
Modelos de Base de DatosAxel Mérida
 
Diseño logico de una base de datos
Diseño logico de  una base de datosDiseño logico de  una base de datos
Diseño logico de una base de datosRobert Rodriguez
 
Procesos e Hilos en los Sistemas Operativos
Procesos e Hilos en los Sistemas OperativosProcesos e Hilos en los Sistemas Operativos
Procesos e Hilos en los Sistemas OperativosEmmanuel Fortuna
 

Tendances (20)

NoSQL bases de datos no relacionales
NoSQL bases de datos no relacionalesNoSQL bases de datos no relacionales
NoSQL bases de datos no relacionales
 
Sistema De Gestión De Base De Datos
Sistema De Gestión De Base De DatosSistema De Gestión De Base De Datos
Sistema De Gestión De Base De Datos
 
Bases de Datos NoSQL - Riak
Bases de Datos NoSQL - Riak Bases de Datos NoSQL - Riak
Bases de Datos NoSQL - Riak
 
ETL
ETLETL
ETL
 
Fundamentos de las bases de datos
Fundamentos de las bases de datosFundamentos de las bases de datos
Fundamentos de las bases de datos
 
NoSQL: Introducción a las Bases de Datos no estructuradas
NoSQL: Introducción a las Bases de Datos no estructuradasNoSQL: Introducción a las Bases de Datos no estructuradas
NoSQL: Introducción a las Bases de Datos no estructuradas
 
Fundamentos de Bases de Datos - Introducción
Fundamentos de Bases de Datos - IntroducciónFundamentos de Bases de Datos - Introducción
Fundamentos de Bases de Datos - Introducción
 
Integridad de datos
Integridad de datosIntegridad de datos
Integridad de datos
 
Ado net
Ado netAdo net
Ado net
 
Bases de Datos No Relacionales (NoSQL)
Bases de Datos No Relacionales (NoSQL) Bases de Datos No Relacionales (NoSQL)
Bases de Datos No Relacionales (NoSQL)
 
Modelo de datos
Modelo de datosModelo de datos
Modelo de datos
 
Transaccion
TransaccionTransaccion
Transaccion
 
Taller de Base de Datos - Unidad 6 SQL procedural
Taller de Base de Datos - Unidad 6 SQL proceduralTaller de Base de Datos - Unidad 6 SQL procedural
Taller de Base de Datos - Unidad 6 SQL procedural
 
Base de Datos
Base de DatosBase de Datos
Base de Datos
 
Modelos de Base de Datos
Modelos de Base de DatosModelos de Base de Datos
Modelos de Base de Datos
 
Diseño logico de una base de datos
Diseño logico de  una base de datosDiseño logico de  una base de datos
Diseño logico de una base de datos
 
NORMALIZACIÓN
NORMALIZACIÓN  NORMALIZACIÓN
NORMALIZACIÓN
 
Fcaps
FcapsFcaps
Fcaps
 
Procesos e Hilos en los Sistemas Operativos
Procesos e Hilos en los Sistemas OperativosProcesos e Hilos en los Sistemas Operativos
Procesos e Hilos en los Sistemas Operativos
 
1. Modelo de Datos
1. Modelo de Datos1. Modelo de Datos
1. Modelo de Datos
 

Similaire à Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j

Desarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQL
Desarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQLDesarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQL
Desarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQLRoanny Lamas
 
NoSQL: Un Cambio de Paradigma - Apache Cassandra
NoSQL: Un Cambio de Paradigma - Apache CassandraNoSQL: Un Cambio de Paradigma - Apache Cassandra
NoSQL: Un Cambio de Paradigma - Apache CassandraWladimir Cabarcas
 
Introducción mongodb y desarrollo
Introducción mongodb y desarrolloIntroducción mongodb y desarrollo
Introducción mongodb y desarrolloJuan Ladetto
 
Sistemas gestores de bases de datos
Sistemas gestores de bases de datosSistemas gestores de bases de datos
Sistemas gestores de bases de datosMalteadas
 
Base datos
Base datosBase datos
Base datosCbtis 22
 
Act4 base datos_reyes_rosalba
Act4 base datos_reyes_rosalbaAct4 base datos_reyes_rosalba
Act4 base datos_reyes_rosalbaRozzi Reyes
 
Act4 basesdedatos oscar_varona
Act4 basesdedatos oscar_varonaAct4 basesdedatos oscar_varona
Act4 basesdedatos oscar_varonaOscar Varona
 
base de datos para dispositivos móviles
base de datos para dispositivos móvilesbase de datos para dispositivos móviles
base de datos para dispositivos móvilesyavidamian
 
Sql o NoSql en Informática Médica
Sql o NoSql en Informática MédicaSql o NoSql en Informática Médica
Sql o NoSql en Informática MédicaLiz Armenteros
 
Unidad 1 - Introducción a los Sistemas de Gestión de Bases de Datos.pdf
Unidad 1 - Introducción a los Sistemas de Gestión de Bases de Datos.pdfUnidad 1 - Introducción a los Sistemas de Gestión de Bases de Datos.pdf
Unidad 1 - Introducción a los Sistemas de Gestión de Bases de Datos.pdfDanielMarquez902683
 
Introducción a NoSQL
Introducción a NoSQLIntroducción a NoSQL
Introducción a NoSQLCycle-IT
 

Similaire à Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j (20)

NoSQL: la siguiente generación de Base de Datos
NoSQL: la siguiente generación de Base de DatosNoSQL: la siguiente generación de Base de Datos
NoSQL: la siguiente generación de Base de Datos
 
MongoDB: la BBDD NoSQL más popular del mercado
MongoDB: la BBDD NoSQL más popular del mercadoMongoDB: la BBDD NoSQL más popular del mercado
MongoDB: la BBDD NoSQL más popular del mercado
 
Desarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQL
Desarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQLDesarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQL
Desarrollo de Almacenes de Datos con Sistemas Gestores de Bases de Datos NOSQL
 
NoSQL: Un Cambio de Paradigma - Apache Cassandra
NoSQL: Un Cambio de Paradigma - Apache CassandraNoSQL: Un Cambio de Paradigma - Apache Cassandra
NoSQL: Un Cambio de Paradigma - Apache Cassandra
 
Introducción mongodb y desarrollo
Introducción mongodb y desarrolloIntroducción mongodb y desarrollo
Introducción mongodb y desarrollo
 
Act4 bd teo
Act4 bd teoAct4 bd teo
Act4 bd teo
 
Sistemas gestores de bases de datos
Sistemas gestores de bases de datosSistemas gestores de bases de datos
Sistemas gestores de bases de datos
 
Base datos
Base datosBase datos
Base datos
 
Principales bases de datos
Principales bases de datosPrincipales bases de datos
Principales bases de datos
 
Principales bases de datos existentes
Principales bases de datos existentesPrincipales bases de datos existentes
Principales bases de datos existentes
 
Base de datos
Base de datosBase de datos
Base de datos
 
Act4 base datos_reyes_rosalba
Act4 base datos_reyes_rosalbaAct4 base datos_reyes_rosalba
Act4 base datos_reyes_rosalba
 
Principales bases de datos existentes
Principales bases de datos existentesPrincipales bases de datos existentes
Principales bases de datos existentes
 
Bases de datos
Bases de datosBases de datos
Bases de datos
 
Base de datos
Base de datosBase de datos
Base de datos
 
Act4 basesdedatos oscar_varona
Act4 basesdedatos oscar_varonaAct4 basesdedatos oscar_varona
Act4 basesdedatos oscar_varona
 
base de datos para dispositivos móviles
base de datos para dispositivos móvilesbase de datos para dispositivos móviles
base de datos para dispositivos móviles
 
Sql o NoSql en Informática Médica
Sql o NoSql en Informática MédicaSql o NoSql en Informática Médica
Sql o NoSql en Informática Médica
 
Unidad 1 - Introducción a los Sistemas de Gestión de Bases de Datos.pdf
Unidad 1 - Introducción a los Sistemas de Gestión de Bases de Datos.pdfUnidad 1 - Introducción a los Sistemas de Gestión de Bases de Datos.pdf
Unidad 1 - Introducción a los Sistemas de Gestión de Bases de Datos.pdf
 
Introducción a NoSQL
Introducción a NoSQLIntroducción a NoSQL
Introducción a NoSQL
 

Plus de Diego López-de-Ipiña González-de-Artaza

Humanized Computing: the path towards higher collaboration and reciprocal lea...
Humanized Computing: the path towards higher collaboration and reciprocal lea...Humanized Computing: the path towards higher collaboration and reciprocal lea...
Humanized Computing: the path towards higher collaboration and reciprocal lea...Diego López-de-Ipiña González-de-Artaza
 
Ontological Infrastructure for Interoperable Research Information Systems: HE...
Ontological Infrastructure for Interoperable Research Information Systems: HE...Ontological Infrastructure for Interoperable Research Information Systems: HE...
Ontological Infrastructure for Interoperable Research Information Systems: HE...Diego López-de-Ipiña González-de-Artaza
 
Fostering multi-stakeholder collaboration through co-production and rewarding
Fostering multi-stakeholder collaboration through co-production and rewarding Fostering multi-stakeholder collaboration through co-production and rewarding
Fostering multi-stakeholder collaboration through co-production and rewarding Diego López-de-Ipiña González-de-Artaza
 
A Collaborative Environment to Boost Sustainable Engaged Research & Co-Produc...
A Collaborative Environment to Boost Sustainable Engaged Research & Co-Produc...A Collaborative Environment to Boost Sustainable Engaged Research & Co-Produc...
A Collaborative Environment to Boost Sustainable Engaged Research & Co-Produc...Diego López-de-Ipiña González-de-Artaza
 
A Collaborative Environment to Boost Co-Production of Sustainable Public Serv...
A Collaborative Environment to Boost Co-Production of Sustainable Public Serv...A Collaborative Environment to Boost Co-Production of Sustainable Public Serv...
A Collaborative Environment to Boost Co-Production of Sustainable Public Serv...Diego López-de-Ipiña González-de-Artaza
 
Social Coin: Blockchain-mediated incentivization of citizens for sustainable ...
Social Coin: Blockchain-mediated incentivization of citizens for sustainable ...Social Coin: Blockchain-mediated incentivization of citizens for sustainable ...
Social Coin: Blockchain-mediated incentivization of citizens for sustainable ...Diego López-de-Ipiña González-de-Artaza
 
Human-centric Collaborative Services : IoT, Broad Data, Crowdsourcing, Engage...
Human-centric Collaborative Services : IoT, Broad Data, Crowdsourcing, Engage...Human-centric Collaborative Services : IoT, Broad Data, Crowdsourcing, Engage...
Human-centric Collaborative Services : IoT, Broad Data, Crowdsourcing, Engage...Diego López-de-Ipiña González-de-Artaza
 
Transiting to SMART COMMUNITIES by fostering Collaboration & CO-CREATION for ...
Transiting to SMART COMMUNITIES by fostering Collaboration & CO-CREATION for ...Transiting to SMART COMMUNITIES by fostering Collaboration & CO-CREATION for ...
Transiting to SMART COMMUNITIES by fostering Collaboration & CO-CREATION for ...Diego López-de-Ipiña González-de-Artaza
 
ROH: Proceso de Ingeniería Ontológica & Uso y Extensión de Vocabularios Estándar
ROH: Proceso de Ingeniería Ontológica & Uso y Extensión de Vocabularios EstándarROH: Proceso de Ingeniería Ontológica & Uso y Extensión de Vocabularios Estándar
ROH: Proceso de Ingeniería Ontológica & Uso y Extensión de Vocabularios EstándarDiego López-de-Ipiña González-de-Artaza
 

Plus de Diego López-de-Ipiña González-de-Artaza (20)

Humanized Computing: the path towards higher collaboration and reciprocal lea...
Humanized Computing: the path towards higher collaboration and reciprocal lea...Humanized Computing: the path towards higher collaboration and reciprocal lea...
Humanized Computing: the path towards higher collaboration and reciprocal lea...
 
Generative AI How It's Changing Our World and What It Means for You_final.pdf
Generative AI How It's Changing Our World and What It Means for You_final.pdfGenerative AI How It's Changing Our World and What It Means for You_final.pdf
Generative AI How It's Changing Our World and What It Means for You_final.pdf
 
Democratizing Co-Production Of Sustainable Public Services
Democratizing Co-Production Of Sustainable Public Services Democratizing Co-Production Of Sustainable Public Services
Democratizing Co-Production Of Sustainable Public Services
 
Ontological Infrastructure for Interoperable Research Information Systems: HE...
Ontological Infrastructure for Interoperable Research Information Systems: HE...Ontological Infrastructure for Interoperable Research Information Systems: HE...
Ontological Infrastructure for Interoperable Research Information Systems: HE...
 
Fostering multi-stakeholder collaboration through co-production and rewarding
Fostering multi-stakeholder collaboration through co-production and rewarding Fostering multi-stakeholder collaboration through co-production and rewarding
Fostering multi-stakeholder collaboration through co-production and rewarding
 
A Collaborative Environment to Boost Sustainable Engaged Research & Co-Produc...
A Collaborative Environment to Boost Sustainable Engaged Research & Co-Produc...A Collaborative Environment to Boost Sustainable Engaged Research & Co-Produc...
A Collaborative Environment to Boost Sustainable Engaged Research & Co-Produc...
 
A Collaborative Environment to Boost Co-Production of Sustainable Public Serv...
A Collaborative Environment to Boost Co-Production of Sustainable Public Serv...A Collaborative Environment to Boost Co-Production of Sustainable Public Serv...
A Collaborative Environment to Boost Co-Production of Sustainable Public Serv...
 
PrácticaParticipación-INTERLINK-realizingcoproduction_final.pdf
PrácticaParticipación-INTERLINK-realizingcoproduction_final.pdfPrácticaParticipación-INTERLINK-realizingcoproduction_final.pdf
PrácticaParticipación-INTERLINK-realizingcoproduction_final.pdf
 
INTERLINK: Engaged Research through co-production
INTERLINK: Engaged Research through co-production INTERLINK: Engaged Research through co-production
INTERLINK: Engaged Research through co-production
 
Internet of People: towards a Human-centric computing for Social Good
Internet of People: towards a Human-centric computing for Social GoodInternet of People: towards a Human-centric computing for Social Good
Internet of People: towards a Human-centric computing for Social Good
 
Boosting data-driven innovation in Europe with the support of DIHs
Boosting data-driven innovation in Europe with the support of DIHs Boosting data-driven innovation in Europe with the support of DIHs
Boosting data-driven innovation in Europe with the support of DIHs
 
Social Coin: Blockchain-mediated incentivization of citizens for sustainable ...
Social Coin: Blockchain-mediated incentivization of citizens for sustainable ...Social Coin: Blockchain-mediated incentivization of citizens for sustainable ...
Social Coin: Blockchain-mediated incentivization of citizens for sustainable ...
 
Human-centric Collaborative Services : IoT, Broad Data, Crowdsourcing, Engage...
Human-centric Collaborative Services : IoT, Broad Data, Crowdsourcing, Engage...Human-centric Collaborative Services : IoT, Broad Data, Crowdsourcing, Engage...
Human-centric Collaborative Services : IoT, Broad Data, Crowdsourcing, Engage...
 
Role of Data Incubators shaping European Data Spaces: EDI & REACH cases
Role of Data Incubators shaping European Data Spaces: EDI & REACH casesRole of Data Incubators shaping European Data Spaces: EDI & REACH cases
Role of Data Incubators shaping European Data Spaces: EDI & REACH cases
 
Transiting to SMART COMMUNITIES by fostering Collaboration & CO-CREATION for ...
Transiting to SMART COMMUNITIES by fostering Collaboration & CO-CREATION for ...Transiting to SMART COMMUNITIES by fostering Collaboration & CO-CREATION for ...
Transiting to SMART COMMUNITIES by fostering Collaboration & CO-CREATION for ...
 
ROH: Proceso de Ingeniería Ontológica & Uso y Extensión de Vocabularios Estándar
ROH: Proceso de Ingeniería Ontológica & Uso y Extensión de Vocabularios EstándarROH: Proceso de Ingeniería Ontológica & Uso y Extensión de Vocabularios Estándar
ROH: Proceso de Ingeniería Ontológica & Uso y Extensión de Vocabularios Estándar
 
Introduction to FAIR Data and Research Objects
Introduction to FAIR Data and Research ObjectsIntroduction to FAIR Data and Research Objects
Introduction to FAIR Data and Research Objects
 
Introducción a Linked Open Data (espacios enlazados y enlazables)
Introducción a Linked Open Data (espacios enlazados y enlazables)Introducción a Linked Open Data (espacios enlazados y enlazables)
Introducción a Linked Open Data (espacios enlazados y enlazables)
 
Red Ontologías Hércules – ROH
Red Ontologías Hércules – ROHRed Ontologías Hércules – ROH
Red Ontologías Hércules – ROH
 
Internet de las cosas y datos de ciencia ciudadana para uso público
Internet de las cosas y datos de ciencia ciudadana para uso públicoInternet de las cosas y datos de ciencia ciudadana para uso público
Internet de las cosas y datos de ciencia ciudadana para uso público
 

Dernier

4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE 9-4-24 (1).docx
4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE     9-4-24 (1).docx4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE     9-4-24 (1).docx
4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE 9-4-24 (1).docxMagalyDacostaPea
 
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdf
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdfFichas de matemática DE PRIMERO DE SECUNDARIA.pdf
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdfssuser50d1252
 
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...YobanaZevallosSantil1
 
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdf
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdfFichas de MatemáticA QUINTO DE SECUNDARIA).pdf
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdfssuser50d1252
 
Técnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materialesTécnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materialesRaquel Martín Contreras
 
libro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación iniciallibro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación inicialLorenaSanchez350426
 
Fichas de Matemática TERCERO DE SECUNDARIA.pdf
Fichas de Matemática TERCERO DE SECUNDARIA.pdfFichas de Matemática TERCERO DE SECUNDARIA.pdf
Fichas de Matemática TERCERO DE SECUNDARIA.pdfssuser50d1252
 
Contextualización y aproximación al objeto de estudio de investigación cualit...
Contextualización y aproximación al objeto de estudio de investigación cualit...Contextualización y aproximación al objeto de estudio de investigación cualit...
Contextualización y aproximación al objeto de estudio de investigación cualit...Angélica Soledad Vega Ramírez
 
Fichas de Matemática DE SEGUNDO DE SECUNDARIA.pdf
Fichas de Matemática DE SEGUNDO DE SECUNDARIA.pdfFichas de Matemática DE SEGUNDO DE SECUNDARIA.pdf
Fichas de Matemática DE SEGUNDO DE SECUNDARIA.pdfssuser50d1252
 
PRIMER GRADO SOY LECTOR PART1- MD EDUCATIVO.pdf
PRIMER GRADO SOY LECTOR PART1- MD  EDUCATIVO.pdfPRIMER GRADO SOY LECTOR PART1- MD  EDUCATIVO.pdf
PRIMER GRADO SOY LECTOR PART1- MD EDUCATIVO.pdfGabrieldeJesusLopezG
 
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALVOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALEDUCCUniversidadCatl
 
los cinco reinos biologicos 0 de los seres vivos
los cinco reinos biologicos 0 de los seres vivoslos cinco reinos biologicos 0 de los seres vivos
los cinco reinos biologicos 0 de los seres vivosOrdinolaSernaquIrene
 
Manejo del Dengue, generalidades, actualización marzo 2024 minsa
Manejo del Dengue, generalidades, actualización marzo 2024 minsaManejo del Dengue, generalidades, actualización marzo 2024 minsa
Manejo del Dengue, generalidades, actualización marzo 2024 minsaLuis Minaya
 
Secuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docxSecuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docxNataliaGonzalez619348
 
SIMULACROS Y SIMULACIONES DE SISMO 2024.docx
SIMULACROS Y SIMULACIONES DE SISMO 2024.docxSIMULACROS Y SIMULACIONES DE SISMO 2024.docx
SIMULACROS Y SIMULACIONES DE SISMO 2024.docxLudy Ventocilla Napanga
 
Presentación Bloque 3 Actividad 2 transversal.pptx
Presentación Bloque 3 Actividad 2 transversal.pptxPresentación Bloque 3 Actividad 2 transversal.pptx
Presentación Bloque 3 Actividad 2 transversal.pptxRosabel UA
 
libro grafismo fonético guía de uso para el lenguaje
libro grafismo fonético guía de uso para el lenguajelibro grafismo fonético guía de uso para el lenguaje
libro grafismo fonético guía de uso para el lenguajeKattyMoran3
 

Dernier (20)

4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE 9-4-24 (1).docx
4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE     9-4-24 (1).docx4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE     9-4-24 (1).docx
4° SES MATE DESCOMP. ADIT. DE NUMEROS SOBRE CASOS DE DENGUE 9-4-24 (1).docx
 
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdf
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdfFichas de matemática DE PRIMERO DE SECUNDARIA.pdf
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdf
 
recursos naturales america cuarto basico
recursos naturales america cuarto basicorecursos naturales america cuarto basico
recursos naturales america cuarto basico
 
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...
 
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdf
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdfFichas de MatemáticA QUINTO DE SECUNDARIA).pdf
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdf
 
Técnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materialesTécnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materiales
 
libro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación iniciallibro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación inicial
 
Fichas de Matemática TERCERO DE SECUNDARIA.pdf
Fichas de Matemática TERCERO DE SECUNDARIA.pdfFichas de Matemática TERCERO DE SECUNDARIA.pdf
Fichas de Matemática TERCERO DE SECUNDARIA.pdf
 
Contextualización y aproximación al objeto de estudio de investigación cualit...
Contextualización y aproximación al objeto de estudio de investigación cualit...Contextualización y aproximación al objeto de estudio de investigación cualit...
Contextualización y aproximación al objeto de estudio de investigación cualit...
 
Fichas de Matemática DE SEGUNDO DE SECUNDARIA.pdf
Fichas de Matemática DE SEGUNDO DE SECUNDARIA.pdfFichas de Matemática DE SEGUNDO DE SECUNDARIA.pdf
Fichas de Matemática DE SEGUNDO DE SECUNDARIA.pdf
 
TL/CNL – 2.ª FASE .
TL/CNL – 2.ª FASE                       .TL/CNL – 2.ª FASE                       .
TL/CNL – 2.ª FASE .
 
PRIMER GRADO SOY LECTOR PART1- MD EDUCATIVO.pdf
PRIMER GRADO SOY LECTOR PART1- MD  EDUCATIVO.pdfPRIMER GRADO SOY LECTOR PART1- MD  EDUCATIVO.pdf
PRIMER GRADO SOY LECTOR PART1- MD EDUCATIVO.pdf
 
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALVOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
 
los cinco reinos biologicos 0 de los seres vivos
los cinco reinos biologicos 0 de los seres vivoslos cinco reinos biologicos 0 de los seres vivos
los cinco reinos biologicos 0 de los seres vivos
 
Manejo del Dengue, generalidades, actualización marzo 2024 minsa
Manejo del Dengue, generalidades, actualización marzo 2024 minsaManejo del Dengue, generalidades, actualización marzo 2024 minsa
Manejo del Dengue, generalidades, actualización marzo 2024 minsa
 
Secuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docxSecuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docx
 
SIMULACROS Y SIMULACIONES DE SISMO 2024.docx
SIMULACROS Y SIMULACIONES DE SISMO 2024.docxSIMULACROS Y SIMULACIONES DE SISMO 2024.docx
SIMULACROS Y SIMULACIONES DE SISMO 2024.docx
 
Presentación Bloque 3 Actividad 2 transversal.pptx
Presentación Bloque 3 Actividad 2 transversal.pptxPresentación Bloque 3 Actividad 2 transversal.pptx
Presentación Bloque 3 Actividad 2 transversal.pptx
 
Sesión La luz brilla en la oscuridad.pdf
Sesión  La luz brilla en la oscuridad.pdfSesión  La luz brilla en la oscuridad.pdf
Sesión La luz brilla en la oscuridad.pdf
 
libro grafismo fonético guía de uso para el lenguaje
libro grafismo fonético guía de uso para el lenguajelibro grafismo fonético guía de uso para el lenguaje
libro grafismo fonético guía de uso para el lenguaje
 

Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j

  • 1. Bases de Datos No Relacionales (NoSQL) 4 de Julio de 2012 Red de Innovación y Transferencia en Gestión de Datos Fundación Universidad Rey Juan Carlos, Plaza Manuel Becerra,14, Madrid Dr. Diego Lz. de Ipiña 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 1
  • 2. Infraestructura Virtualizada: Cloud Computing Un paradigma de computación emergente donde los datos y servicios residen en centros de datos muy escalables que pueden ser accedidos ubicuamente desde cualquier dispositivo conectado a Internet1 Merrill Lynch: Cloud computing market opportunity by 2011 = $95bn in business and productivity apps + $65bn in online advertising = $160bn (1) Source: IBM 2
  • 3. Cloud Computing es … • … capacidad computacional y almacenamiento virtualizada expuesta mediante infraestructura agnóstica a la plataforma y accedida por Internet – Recursos IT compartidos en demanda, creados y eliminados eficientemente y de modo escalable a través de una variedad de interfaces programáticos facturados en base a su uso 3
  • 4. Evolución de Tecnologías de Cloud Computing • Maduración de tecnología de virtualización • La virtualización permite nubes de computación • Las nubes de computación demandan nubes de almacenamiento • Las nubes de almacenamiento y computación 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 4
  • 6. Introducción a NoSQL • NoSQL – es un término 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 término fue acuñado 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 generación como “Big Data” 6
  • 7. Introducción a NoSQL • NoSQL – "not only SQL” – es una categoría general de sistemas de gestión de bases de datos que difiere de modelo relacionales clásicos (RDBMS) en diferente modos: – Estos datastores no requieren esquemas de información fijas – Evitan las operaciones JOIN y escalan horizontalmente • De hecho, tanto las bases de datos NoSQL como las relacionales son tipos de Almacenamiento Estructurado 7
  • 8. Introducción a NoSQL • La principal diferencia radica en cómo guardan los datos (por ejemplo, almacenamiento de un recibo): – En una RDBMS tendríamos que partir la información en diferentes tablas y luego usar un lenguaje de programación 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 diseñas tus tablas y su estructura por adelantado • ¡¡¡NoSQL no es la panacea!!! – Si tus datos son relacionales, quedarte con tu RDBMS sería la opción correcta 8
  • 9. El teorema CAP • Teorema de Brewer: “es imposible para un sistema computacional distribuido ofrecer simultáneamente las siguientes tres garantías”: – Consistencia – todos los nodos ven los mismos datos al mismo tiempo – Disponibilidad (Availability) – garantiza que cada petición recibe una respuesta acerca de si tuvo éxito o no – Tolerancia a la partición (Partition) – el sistema continua funcionando a pesar de la pérdida de mensajes • Equivalente a: – “You can have it good, you can have it fast, you can have it cheap: pick two.” 9
  • 10. Transacciones BASE • Acrónimo análogo a ACID para NoSQL que prima disponibilidad frente a consistencia: – Basically Available, – Soft state, – Eventually Consistent • Características: – Consistencia débil – stale data OK – Prima la disponibilidad – Best effort – Respuestas aproximadas OK – Agresivo (optimista) – Más sencillo y más rápido • Comparativa en: http://queue.acm.org/detail.cfm?id=1394128 10
  • 11. ¿Por qué NoSQL? • Tendencia 1: Tamaño – Hemos creado más datos en los últimos dos años que en todos los años anteriores  Exabytes (1018) por año • Tendencia 2: Conectividad – Los datos están cada vez más 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 más desestructurados • Tendencia 4: Arquitectura – El software orientado a servicios actual donde cada servicio tiene su back-end 11
  • 12. RDBMS vs. NoSQL • Las bases de datos relacionales tradicionales nos permiten definir la estructura de un esquema que demanda reglas rígidas y garantizan ACID: – Atomicity – Consistency – Isolation – Durability • Las aplicaciones web modernas presentan desafíos 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 12
  • 13. Arquitectura de las BBDD NoSQL • A menudo ofrecen sólo garantías de consistencia débiles, 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 13
  • 14. Taxonomía de soluciones NoSQL • Los principales tipos de BBDD de acuerdo con su implementación son los siguientes: – Almacenes de Clave-Valor – Almacenes de Familia de Columnas – Almacenes de documentos – Almacenes de Grafos 14
  • 15. Características BBDD orientadas a Clave-Valor • Su precursor fue Amazon Dynamo – Basadas en DHT (Distributed Hash Tables) • Modelo de datos: colección de pares clave/valor • Ejemplos: Dynamite, Voldemort, Tokyo 15
  • 16. Características 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 configuración diferente de columnas – Cada clave está asociada con varios atributos (columnas) • Ejemplos: HBase, Hypertable, Cassandra, Riak • Buenas en: – Gestión de tamaño – Cargas de escrituras masivas orientas al stream – Alta disponibilidad – MapReduce 16
  • 17. Características 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 rápido – Orientas a la web: CRUD 17
  • 18. Características Bases de Datos Basadas en Grafos • Inspiradas por Euler y la teoría 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 18
  • 19. Apache Cassandra • Es un almacén altamente escalable, eventualmente consistente y distribuido de estructuras clave-valor. – Iniciado por Facebook – Código abierto – Proyecto apache • Licencia: Apache License 2.0 – Escrito en Java – Multiplataforma – Versión actual: 1.0.9 – Web: http://cassandra.apache.org/ • Documentación: http://www.datastax.com/docs/1.0/index 19
  • 20. ¿Quién usa Apache Cassandra? • Algunos usuarios famosos de Cassandra son: – Digg – Facebook – Twitter – Rackspace – SimpleGEO –… 20
  • 21. Ventajas de Cassandra para desarrolladores Web • Cassandra está desarrollada para ser un servidor distribuido, pero puede también ejecutarse como un nodo simple: – Escalabilidad horizontal (añade nuevo hardware cuando sea preciso) – Rápidas respuestas aunque la demanda crezca – Elevadas velocidades de escritura para gestionar volúmenes de datos incrementales – Almacenamiento distribuido – Capacidad de cambiar la estructura de datos cuando los usuarios demandan más funcionalidad – Una API sencilla y limpia para tu lenguaje de programación favorito – Detección automática 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 21
  • 22. Desventajas de Cassandra • Hay algunas desventajas que un sistema de almacenamiento tan escalable ofrece en contrapartida: – No hay joins (a cambio de más velocidad) – No permite ordenar resultados en tiempo de consulta – No tiene SQL • Pero desde la versión 0.8 tenemos CQL 22
  • 23. Instalación de Cassandra • Requisitos: – Java 1.6 en adelante • Las últimas versiones estables disponibles en: – http://cassandra.apache.org/download/ • Documentación en: – Cassandra Wiki: GettingStarted, http://wiki.apache.org/cassandra/GettingStarted 23
  • 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. 24
  • 25. Modelo de Datos en Cassandra • Diseñado para datos distribuidos de modo escalable  sacrifica ACID por ventajas en rendimiento, disponibilidad y gestión 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 básicos son: – Clúster: son las máquinas que componen una instancia de Cassandra • Pueden contener varios Keyspaces – Keyspace: espacio de nombres para un conjunto de ColumFamily, asociado a una aplicación • 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 25
  • 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”: 26
  • 27. Resumen Modelo de Datos 27
  • 28. Clúster • Los datos en Cassandra se guardan en un Clúster o Ring donde se asignan datos a los nodos dentro de un ring – Un nodo tiene réplicas para diferentes rangos de datos – Si un nodo se cae su réplica puede responder – Un protocolo P2P hace que los datos se repliquen entre nodos acorde con un replication_factor 28
  • 29. Ring, clúster y el protocolo Gossip • Cassandra usa un protocolo Gossip para permitir comunicación dentro de un ring, de tal modo que cada nodo sabe de otros nodos – Permite soportar descentralización y tolerancia a la partición • Cassandra está diseñada para ser distribuida en varias máquinas que aparecen como una simple máquina a los ojos de los clientes – La estructura más externa de Cassandra es el cluster o ring • Un nodo tiene una réplica para diferentes rangos de datos, si algo va mal una réplica puede responder – El parámetro replication_factor en la creación de un KeySpace indica cuántas máquinas en el clúster recibirán copias de los mismos datos. 29
  • 30. Configuración de un Keyspace • Los atributos básicos que puedes asociar a un keyspace son: – Replication factor: cuánto quieres pagar en rendimiento a favor de consistencia – Replica placement strategy: indica cómo se colocan las réplicas 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 30
  • 31. Configuración 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 más trabajo eligiendo node tokens • Más 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 31
  • 32. Diferencias entre un RDBMS y Cassandra • No hay lenguaje de consulta, tiene una API accesible a través de Thrift – Verdad a medias: si existe desde la versión 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 decisión de diseño, 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 32
  • 34. Comandos CLI Básicos • 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']; 34
  • 35. Soporte Multi-lenguaje de Cassandra • Cassandra utiliza la librería Thrift (http://thrift.apache.org/) para proveer una API independiente del lenguaje de programación – Thrift API 1.0: http://wiki.apache.org/cassandra/API – Ejemplo en: http://wiki.apache.org/cassandra/ClientExamples • Thrift soporta un gran número de lenguajes incluyendo: C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, y Ocaml • Hay muchas librerías clientes disponibles: – Pycassa para Python: http://pycassa.github.com/pycassa/index.html – Hector para Java: https://github.com/rantav/hector 35
  • 36. Cassandra Query Language (CQL) • Cassandra ha sido accedido principalmente mediante Thrift – una API RPC que proporciona un denominador común a clientes para lenguajes específicos • 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 implementación complejos al servidor – Los clientes sólo tienen que saber cómo interpretar objetos en un “resultset” • Documentación: • 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 36
  • 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> CREATE COLUMNFAMILY users ( ... key varchar PRIMARY KEY, ... full_name varchar, ... birth_date int, ... state varchar ... ); cqlsh> CREATE INDEX ON users (birth_date); cqlsh> CREATE INDEX ON users (state); cqlsh> INSERT INTO users (key, full_name, birth_date, state) VALUES ('bsanderson', 'Brandon Sanderson', 1975, 'UT'); cqlsh> INSERT INTO users (key, full_name, birth_date, state) VALUES ('prothfuss', 'Patrick Rothfuss', 1973, 'WI'); cqlsh> INSERT INTO users (key, full_name, birth_date, state) VALUES ('htayler', 'Howard Tayler', 1968, 'UT'); 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 | 37
  • 38. Base de Datos orientada a Documentos • Una base de datos orientada a documentos es un programa diseñado para almacenar, recuperar y gestionar información semi-estructurada orientada a documentos: – Un documento encapsula información en un formato estándar (XML, YAML, JSON o BSON): • Los documentos en una BBDD orientada a documentos son similares a registros pero no requieren un esquema estándar con la mismas secciones, huecos, partes, claves y similar • Los documentos suelen ser direccionables por una clave que los representa unívocamente • Además de la búsqueda por clave de documento, estas BBDD suelen ofrecer una API o lenguaje de consultas que permite recuperar documentos en base a sus contenidos 38
  • 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 acrónimo de"Cluster Of Unreliable Commodity Hardware" • Su misión 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. I’ve 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 39
  • 40. Características de CouchDB • CouchDB es una base de datos orientada a documentos JSON escrita en Erlang. – Parte de la generación de bases de datos NoSQL – Es un proyecto open source de la fundación Apache – Motor de almacenamiento basado en B-tree • Es altamente concurrente, diseñada para ser replicada horizontalmente, a través de varios dispositivos y tolerante a fallos. • Permite a las aplicaciones guardar documentos JSON a través de una interfaz RESTful • Utiliza map/reduce para indexar y consultar la base de datos • Permite escribir una aplicación cliente que habla directamente vía HTTP con CouchDB sin necesidad de una capa servidora intermedia • Guarda datos en local en la propia máquina cliente para reducir latencia – Gestiona la replicación a la nube por ti 40
  • 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 característica 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 gestión documental 41
  • 42. Ventajas de CouchDB • Documentos JSON – todo lo que se guarda en CouchDB son simplemente documentos JSON. • Interfaz RESTful – desde la creación a la replicación a la inserción de datos, toda la gestión de datos en CouchDB puede ser realizada vía HTTP. • Replicación N-Master – puedes hacer uso de un número ilimitado de ‘masters’, dando lugar a topologías de replicación muy interesantes. • Escrita para ejecutarse offline – CouchDB puede replicarse en dispositivos (e.j. teléfonos Android) que pueden quedarse sin conexión y gestionar sincronización 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 42
  • 43. Conceptos clave en CouchDB: Documentos • Las BBDD CouchDB guardan documentos nombrados de modo unívoco 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 están asociados a un esquema de bases de datos estricto • Cada documento contiene metadatos (datos sobre datos) como el identificador unívoco del documento (id) y su número de revisión (rev) • Los campos de un documento pueden ser de varios tipos como strings, números, booleanos, colecciones, etc. • Cuando se hacen cambios sobre un documento CouchDB se crea una nueva versión del documento, denominado revisión – Se mantiene un historial de modificaciones gestionado automáticamente por la BBDD • CouchDB no dispone de mecanismos de bloqueo (locking) ante escrituras 43
  • 44. Conceptos clave en CouchDB: Vistas • Son el mecanismo para añadir estructura a datos semi- estructurados • El modelo de vistas en CouchDB usa JavaScript para describirlas • Las vistas son el método para agregar y realizar informes sobre los documentos de un repositorio, siendo creados en demanda para agregar y agregar documentos. • Las vistas se construyen dinámicamente y no afectan el documento subyacente, puedes tener tantas representaciones de vistas de los mismos datos como gustes. 44
  • 45. Conceptos clave en CouchDB: Vistas • CouchDB es desestructurado en naturaleza, adolece de un esquema estricto pero provee beneficios en términos 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 añadir estructura a los datos de modo que pueda agregarse para añadir 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 diseño y pueden ser replicadas a través de varias instancias – Estos documentos de diseño contienen funciones JavaScript que pueden ejecutar consultas mediante el concepto de MapReduce. • La función Map de la vista recibe un documento como argumento y realiza una serie de cálculos para determinar qué datos deberían ser disponibles en la vista • Si la vista tiene una función Reduce, es usada para agregar los resultados. A partir de un conjunto de pares clave/valor devuelve un sólo valor. 45
  • 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); } 46
  • 47. Conceptos clave en CouchDB: Sin esquema • CouchDB está diseñado para almacenar y reportar sobre grandes volúmenes de datos orientados a documentos semi- estructurados. • Con CouchDB, no se impone ningún esquema, nuevos tipos de documentos con distintos campos y significados se pueden unir a los existentes. • El motor de vistas, apoyado en JavaScript, está diseñado para facilitar la gestión de nuevos tipos de documentos y variados pero similares documentos. 47
  • 48. Conceptos clave: Distribuida • CouchDB es un sistema distribuido de base de datos basado en nodos – Un número variable de nodos CouchDB (servidores y clientes offline) pueden tener “copias de réplicas” independientes de la misma BBDD, donde las aplicaciones pueden tener interactividad completa con la BBDD (consultar, añadir, editar y borrar) • Cuando vuelven a estar online o de modo planificado, los cambios de las bases de datos son replicados bidireccionalmente. • CouchDB tiene gestión de conflictos incorporada de serie, haciendo que el proceso de replicación sea incremental y rápido, copiando sólo documentos y campos individuales modificados desde la última replicación. – Utiliza Multi-Version Concurrency Control (MVCC) 48
  • 49. Gestión 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 versión del mismo que coexiste con la versión antigua • Las peticiones se ejecutan en paralelo haciendo que los servidores permitan una alta concurrencia – Una petición de lectura verá siempre la versión más reciente de la BBDD 49
  • 50. Detalles técnicos • 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 (añadir, editar y borrar) documentos de la BBDD. – Los documentos son la unidad de datos primaria en CouchDB y consisten de un número variable de campos y adjuntos – Las modificaciones sobre documentos (añadir, editar, borrar) son del todo o de nada, o se modifican completamente o fallan completamente. – El modelo de modificación de documentos de CouchDB es optimista y no hace uso de locks. – Más detalles genéricos en: http://CouchDB.apache.org/docs/overview.html 50
  • 51. La API RESTful JSON • CouchDB ofrece una API como mecanismo para recuperar datos de una BBDD. – Donde siguiendo la convención 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 vía 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 aplicación web, sin necesidad de hacer uso de un lenguaje de parte servidora – La herramienta de línea de comando CURL pueden ser usada como cliente de línea 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 51
  • 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 información 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} 52
  • 53. Programando CouchDB • Gracias a la API RESTful, los desarrolladores pueden conectarse a CouchDB usando cualquier software que soporte HTTP • La mayoría de los lenguajes modernos ofrecen algún tipo de interfaz HTTP, implicando que CouchDB puede ser usada en cualquier proyecto de desarrollo. – Revisar la siguiente página para diferentes clientes programáticos a CouchDB: • http://wiki.apache.org/CouchDB/Related_Projects 53
  • 54. Vista de un documento en Futon 54
  • 55. Documentos de Diseño en CloudDB • Los documentos de diseño son un tipo especial de documento en CouchDB que contiene código de aplicación: – Vistas MapReduce, validaciones, funciones show, list y update • Se suele crear un documento de diseño por cada aplicación • El documento de diseño es un documento CouchDB con un ID que comienza con _design/: – Se replica como otros documentos en la BBDD y soporta gestión de conflictos a través del parámetro rev • CouchDB mira las vistas y otras funciones de aplicación en él • Los contenidos estáticos de la aplicación aparecen como _attachments en el documento de diseño 55
  • 56. Estructura interna de un Documento de Diseño • Están compuestos de: – Funciones de validación – Definición de vistas – Funciones show, list y update – Attachments • Una BBDD CouchDB puede tener varios documentos de diseño. – _design/calendar – _design/contacts • Para recuperar un documento de diseño haz un GET con el siguiente patrón de URL: – http://localhost:5984/mydb/ _design/calendar – http://127.0.0.1:5984/mydb/ _design/contacts 56
  • 57. Replicación en CouchDB • La replicación sincroniza dos copias de la misma BBDD, permitiendo que los usuarios tengan baja latencia de acceso a datos independientemente de su localización – La replicación consiste en enviar una petición HTTP a un servidor CouchDB incluyendo una BBDD de origen y otra de destino, haciendo que CouchDB envíe los cambios del origen al destino: • POST /_replicate HTTP/1.1 {"source":"database","target":http://example. org/database} 57
  • 58. Gestión de Conflictos • Cuando replicas dos BBDD en CouchDB y se identifican conflictos, CouchDB los señala en los documentos afectados con el atributo "_conflicts":true – La versión que es seleccionada como última es la versión ganadora. – La revision perdedora es almacenada como versión anterior. – CouchDB no hace un merge de las revisiones conflictivas. • Tu aplicación es la que resuelve programáticamente los conflictos – La replicación garantiza que los conflictos se detecten y que cada instancia de CouchDB haga la misma selección respecto a ganadores y perdedores, independientemente de las instancias que existan. 58
  • 59. CouchApp • A CouchApp es una framework para la creación 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 código en tu aplicación y volcarlos a una instancia de CouchDB: • http://couchapp.org/page/couchapp-python 59
  • 60. CouchApp • CouchApp te simplifica la labor de crear aplicaciones web a partir de CouchDB: – Fragmenta un documento de diseño en un conjunto de directorios y ficheros del sistema local, representando views, shows, validations, attachments, etc. que serán enviados al servidor CouchDB • Una aplicación de Couch, CouchApp, sigue más o menos el patrón de diseño Modelo/Vista/Controlador: – CouchDB es el Modelo – El árbol DOM representando el HTML mostrado al usuario sería la vista – El JavaScript sería el Controller 60
  • 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/ 61
  • 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 dinámico , haciendo que la integración de los datos en ciertas aplicaciones sea mas fácil y rápida. 62
  • 63. Características Principales • Consultas Ad hoc – MongoDB soporta la búsqueda por campos, consultas de rangos y expresiones regulares. Las consultas pueden devolver un campo específico del documento pero también puede ser una función JavaScript definida por el usuario. • Indexación – 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. • Replicación – MongoDB soporta el tipo de replicación maestro-esclavo. El maestro puede ejecutar comandos de lectura y escritura. El esclavo puede copiar los datos del maestro y sólo 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 serán distribuidos los datos en una colección. los datos son divididos en rangos (basado en la llave shard) y distribuidos a través de múltiples shard. – Un shard es un maestro con uno o más esclavos. – MongoDB tiene la capacidad de ejecutarse en múltiple 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 replicación de datos utilizando múltiples servidores para el almacenamiento de archivos. – Esta función (que es llamada GridFS ) está incluida en los drivers de MongoDB y disponible para los lenguajes de programación que soporta MongoDB. • Agregación – La función MapReduce puede ser utilizada para el procesamiento por lotes de datos y operaciones de agregación. Esta función permite que los usuarios puedan obtener el tipo de resultado que se obtiene cuando se utiliza el comando SQL “group-by”. • Ejecución 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. 63
  • 64. Manipulación de Datos: colecciones y documentos • MongoDB guarda la estructura de los datos en documentos tipo JSON con un esquema dinámico 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 colección puede tener un número indeterminado de documentos – Las colecciones son como tablas y los documentos como filas – Cada documento en una colección 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 programación – Como valor se pueden usar números, cadenas o datos binarios como imágenes o cualquier otro “key-value pairs”. 64
  • 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" } } 65
  • 66. Documentación e instalación • La documentación 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 ..datadb – Ejecutar el cliente de mongo y los siguientes comandos en JavaScript: C:Programmingutilitiesmongodb-win32-x86_64-2.0.6bin>mongo MongoDB shell version: 2.0.6 connecting to: test > db.test.save( {a:1} ) > db.test.find() { "_id" : ObjectId("4fe6e41b184d3a26629be9b6"), "a" : 1 } > 66
  • 67. Usando MongoDB • mongo es un shell JavaScript completo, cualquier función JavaScript, sintáxis 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]); 67
  • 68. Documentos de consulta • Documentos que indican el patrón 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 restricción: • printjson(db.things.findOne({name:"mongo"})); – Limitar el número de resultados: • db.things.find().limit(3); 68
  • 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 69
  • 70. Neo4j: Bases de Datos de Grafos • Una colección 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 número arbitrario de pares clave/valor. • Puede ser considerado como un key-value store, con soporte completo para relaciones: – http://neo4j.org/ • Sin esquemas, diseño de modelo de datos de abajo a arriba 70
  • 71. Características 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 jerárquicos 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 máximo rendimiento y escalabilidad – Recorre grafos de profundidad 1000 a velocidad de milisegundos. • Máxima escalabilidad, puede gestionar billones de grafos de nodos/relaciones/propiedades en una sola máquina y puede ser distribuido • Completamente transaccional 71
  • 72. Modelo de datos • Un Grafo—guarda datos en→ Nodos —que tienen→ Propiedades – El grafo más sencillo es un nodo con una colección 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 colección. • Los Nodos —se organizan en→ Relaciones —que también 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é música tienen mis amigos que yo no tengo” • Un Índice —mapea de→ Propiedades—bien a→ Nodos o a Relaciones – Permite encontrar un nodo o relación en función de una propiedad 72
  • 73. Modelo de datos • Neo4j es una base de datos de grafos diseñada 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” 73
  • 74. Arquitectura lógica de Neo4j Java Ruby … Clojure REST API JVM Language Bindings Traversal Framework Graph Matching Core API Caches Memory-Mapped (N)IO Filesystem 74
  • 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 almacén de grafos sin necesidad de escribir código para recorridos (traverse) – De momento es sólo un lenguaje de consultas – Permite agregar, ordenar y establecer límites en los resultados – Hace uso de palabras clave como WHERE y ORDER BY, inspirado por SQL – También adopta las capacidades de aplicar expresiones regulares en las consultas como SPARQL. • Documentación: http://docs.neo4j.org/chunked/1.4/cypher-query-lang.html 75
  • 76. Programación de Neo4j • Neo4j tiene una librería java que te permite empotrarla en tu aplicación Java • Documentación. http://docs.neo4j.org/chunked/milestone/tut orials-java-embedded-hello-world.html 76
  • 78. NoSQL or not NoSQL? • En NoSQL, generalmente los datos son recuperados de manera mucho más rápida que en un RDBMS, sin embargo las consultas que se pueden hacer son más limitadas y requieren trasladar complejidad a la aplicación • 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 estadísticas, filtros, agrupaciones o ordenación. • Desde un punto de vista de sistemas deberíamos considerar la combinación de SQL y NoSQL: – LinkedIn comenzó sólo con un RDBMS, pero desarrolló su propia BBDD NoSQL (Voldemort) – Facebook tienen una arquitectura híbrida con Memcached y MySQL junto a un OLTP (envío de mensajes al Wall), y Cassandra para la búsqueda en la bandeja de entrada 78
  • 79. NoSQL or not NoSQL? • Los principales problemas de NoSQL son: – Su complejidad: • Instalación • Consultas (comprender bien MapReduce) • Los modelos de datos usados – Su falta de madurez • ¿Dónde usarlas? – Datos sociales – Procesado de datos (Hadoop) – Búsqueda (Lucene) – Caching (Memcache) – Data Warehousing • ¿Qué problema quieres resolver? – Transacciones – Grandes volúmenes de datos (Exabytes) – Estructura de los datos 79
  • 80. Conclusión • Las BBDD NoSQL son una clara alternativa a los RDBMS – Sobre todo para algunas aplicaciones sociales y web que requieren elevada escalabilidad • No son idóneas para todo, de hecho en la mayoría de los casos las RDBMS deberían seguir siendo la primera opción: – La capacidad de hacer JOIN y las garantías ACID son muy importantes para muchas aplicaciones • Es muy posible que los RDBMS actuales evolucionen para incorporar capacidades de NoSQL 80
  • 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/ 81
  • 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 82
  • 83. Referencias • Neo4j – Página 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 83
  • 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 84
  • 85. Bases de Datos No Relacionales (NoSQL) 4 de Julio de 2012 Red de Innovación y Transferencia en Gestión de Datos Fundación Universidad Rey Juan Carlos, Plaza Manuel Becerra,14, Madrid Dr. Diego Lz. de Ipiña 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 85