Introducción a NoSQL

44
Advanced technology simplifies your world Introducción a NoSQL Laboratorio Innovación 19/03/2014

description

Breve introducción a las bases de datos NoSQL, es decir, no relacionadas, que tuvo lugar en @cycle_it durante uno de los laboratorios de innovación. Se trataron las bases de datos NoSQL, hablando de las principales categorías: Columna, Documento, Clave-Valor y Grafo. Se mencionan algunos ejemplos de vendedores en cada categoría como Cassandra, Hadoop/HBase, Redis, MongoDB, Riak, Neo4J, etc.

Transcript of Introducción a NoSQL

Page 1: Introducción a NoSQL

Advanced technology simplifies your world

Introducción a NoSQLLaboratorio Innovación

19/03/2014

Page 2: Introducción a NoSQL

@lasneyxes.linkedin.com/in/miguelmartinforero

Miguel Martín-Forero – COO en @Cycle_IT

Algo sobre mí

Page 3: Introducción a NoSQL

Introducción a NoSQL

• ¿Qué es NoSQL?

• Taxonomía

• Características

• Uso básico

• Vendedores

• Penetración en

mercado

• Pros & Contras

Page 4: Introducción a NoSQL

¿Qué es NoSQL?

Proporciona un mecanismo para el almacenamiento y obtención de info que se modela en un formato distinto a las

relaciones tabulares propias de las bases de datos relacionales1

1 Wikipedia: NoSQL

“”

“NoSQL realmente es NoREL, es decir, Base de Datos No-Relacional”

Page 5: Introducción a NoSQL

¿Qué es NoSQL?

Las bases de datos NoSQL están encontrando su lugar en el big data y en las aplicaciones web que necesitan tiempo real

Real Time Web

Applications

Page 6: Introducción a NoSQL

Beneficios NoSQL

• Preparadas para grandes volúmenes de información estructurada,

semi-estructurada o sin estructurar.

• Facilitan iteración rápida: metodologías ágiles y despliegue continuo.

• Coherente con la programación orientada a objetos.

• Arquitectura eficiente y escalable en lugar de una arquitectura cara y

monolítica. Y opensource!

Page 7: Introducción a NoSQL

Taxonomía

Es difícil clasificar este tipo de bases de

datos dada su heterogeneidad. No obstante

está ampliamente aceptada una clasificación

basada en el modelo de datos; lo que

comúnmente se conoce como Taxonomía.

Page 8: Introducción a NoSQL

Taxonomía: cuatro categorías principales

DocumentoColumn

a

Clave-valor Grafo

Page 9: Introducción a NoSQL

Columna

Es un objeto del nivel más bajo en un

keyspace o más fácil, es una tupla

compuesta por tres elementos:

Nombre único: Referencia la columna

Valor: Contenido de la columna

Timestamp: Determina validez

Un keyspace es un objeto que almacena todas las familias de columnas de un diseño; es como un esquema.

Page 10: Introducción a NoSQL

Columna: ejemplo

UserProfile = {

Cassandra = {emailAddress:”[email protected]” , age:”20”} TerryCho = {emailAddress:”[email protected]” , gender:”male”} Cath = {emailAddress:”[email protected]” , age:”20” , gender:”female” , address:”Seoul”}}

Familia Columna

Claves de fila

Columna

Page 11: Introducción a NoSQL

Columna: Pros y contras

• Más eficiente consultar la información

• Es costoso reconstruir “filas completas” al estar distribuida

la info en numerosos nodos.

• La ordenación y consultas tienen sus particularidades: las

columnas se ordenan tras ser insertadas y se ordena por

atributo.

• Hay que “pensar” cómo insertar la información.

• La forma de acceder queda del lado del programador.

Page 12: Introducción a NoSQL

Columna: Vendedores

Page 13: Introducción a NoSQL

Cassandra

• Última versión estable 2.0.6

• Licencia Apache

• Para cuando “necesitas escalabilidad y alta

disponibilidad sin castigar el rendimiento”.

• Utilizada en Netflix, eBay, Twitter, Reddit y otros.

• “Probada, tolerante a fallos, rendimiento,

descentralizada, durabilidad, control, flexible”

Page 14: Introducción a NoSQL

Apache Hbase (Hadoop)

• Última versión estable 0.94

• Licencia Apache

• Para cuando “necesitas acceso de escritura

aleatorio en tiempo real para acceder a tu Big

Data: tablas enormes con miles de millones de files

con millones de columnas”

• “Escalabilidad lineal y modular, consistente en

lecturas y escrituras, failover automático, Java

API”.

Page 15: Introducción a NoSQL

Columna: Trends

Page 16: Introducción a NoSQL

Documento (info semi-estructurada)

El documento encapsula la información en algún formato o codificación estándar:

XML, YAML, JSON o BSON e incluso formatos binarios como PDF, Microsoft

Office documents, etc.

“”

Los documentos son similares a las tablas de las bases de

datos relacionales, pero mucho menos rígidos: no existe

ningún esquema.

Page 17: Introducción a NoSQL

Documento: ejemplos

Al igual que con la categoría Columna ambos registros contienen valores similares, pero no tienen por qué compartir los mismos campos: no existen campos vacíos.

{    FirstName: "Jonathan",    Address: "15 Wanamassa Point Road",    Children: [         {Name: "Michael", Age: 10},         {Name: "Jennifer", Age: 8},         {Name: "Samantha", Age: 5},         {Name: "Elena", Age: 2}    ]}

  {     FirstName: "Bob",     Address: "5 Oak St.",     Hobby: "sailing"  }

Page 18: Introducción a NoSQL

Documento: conceptos

Keys: los documentos se acceden mediante una clave única

(cadena, URI o ruta).

Obtención: la base de datos ofrece una API o lenguaje de

consulta que permite obtener el contenido de los documentos.

Organización: en función de la implementación/vendedor

existen diferentes formas de organización: colecciones,

etiquetas, metadata, directorios, etc.

Page 19: Introducción a NoSQL

Documento: Pros y contras

• Todas las de NoSQL

• No hay joins: código feo, múltiples queries, pérdida

flexibilidad, posible duplicidad de info.

• Uso de memoria al tener que almacenar los nombres de

las claves con cada documento.

• Posibles problemas de concurrencia: las operaciones de

escritura tienen preferencia sobre las lecturas.

Page 20: Introducción a NoSQL

Vendedores

Page 21: Introducción a NoSQL

MongoDB

• Última versión estable 2.4.9

• Licencia GNU AGPL v3.0 y Comercial MongoDB, Inc.

• Almacenamiento BSON.

• Usada por muchos como eBay, SAP, sourceforge, etc.

• Soporte completo a índices para cualquier atributo.

• Replicación y alta disponibilidad.

• Map/Reduce: agregación flexible y procesamiento de

información.

• GridFS para almacenar ficheros de cualquier tamaño.

Page 22: Introducción a NoSQL

Apache CouchDB

• Última versión estable 1.5.0

• Licencia Apache

• Base de datos que “utiliza JSON para los documentos,

JavaScript para consultas MapReduce y HTTP como API de

acceso”

• Perfecta para aplicaciones web modernas y aplicaciones

móviles.

Page 23: Introducción a NoSQL

MarkLogic

• Última versión estable 7

• Privada: “Enterprise NoSQL”

• Utilizada por grandes como Warner Bros., Dow Jones,

Citigroup, Boeing, etc.

Page 24: Introducción a NoSQL

Documento: Trends

Page 25: Introducción a NoSQL

Key-value

Este tipo de motores de bases de datos almacenan información en «diccionarios».

Podemos imaginar una BD clave–valor como una colección de vectores asociativos (al estilo de los

tipos Object en ECMAScript, por ejemplo)

“”

La asociación entre la clave y el valor se conoce a menudo

como binding; palabra que también suele usarse para

nombrar al proceso de creación de una nueva asociación.

Page 26: Introducción a NoSQL

Key-value: operaciones

• Add: añade un nuevo valor.

• Reassign: reemplaza el valor de algún par que ya existe en la

colección.

• Remove: elimina una tupla de la colección eliminando el binding a

partir de la clave.

• Lookup: devuelve el valor a partir de una clave determinada.

Page 27: Introducción a NoSQL

Key-value: ejemplo

{ "Great Expectations": "John", "Pride and Prejudice": "Alice", "Wuthering Heights": "Alice"}

Page 28: Introducción a NoSQL

Key-value: Pros y contras

• Las habituales de NoSQL

• No existe forma de indicar que una columna es obligatoria:

NOT NULL.

• No hay forma de establecer tipos de datos para validar

entradas.

• No hay forma para indicar si los nombres de las claves son

correctos.

• No hay forma de indicar FK.

Page 29: Introducción a NoSQL

Vendedores

Page 30: Introducción a NoSQL

Amazon DynamoDB

• Solución Cloud

• Licencia comercial

• Utilizada en washingtonpost.com, AdRoll, scopely,

WeatherBug.

• Existe versión open-source del proyecto llamado

Project Voldemort utilizada en LinkedIn para

solucionar algunos problemas de almacenamiento

con alta escalabilidad.

Page 31: Introducción a NoSQL

Redis

• Última versión estable 2.8.7

• Licencia BSD

• Almacena información de forma estructurada ya

que las claves pueden contener: strings, hashes,

lists, sets y sorted sets.

• Usada por stackoverflow, flickr, digg, Blizzard

Entertainment, etc.

Page 32: Introducción a NoSQL

Riak

• Última versión estable 1.4.8

• Licencia Apache

• Sus fuertes son: disponibilidad, tolerancia a fallos,

simplicidad operacional y escalabilidad.

Page 33: Introducción a NoSQL

Key-value: Trends

Page 34: Introducción a NoSQL

Grafo

La info se representa como nodos de un grafo y sus relaciones con las aristas del mismo, de manera que se pueda usar teoría de grafos para recorrer la base de datos ya que esta

puede describir atributos de los nodos (entidades) y las aristas (relaciones).

”Estas bases de datos están absolutamente normalizadas ya que

necesitan que cada tabla contenga una única columna y cada relación

tan solo dos; así cualquier cambio en la estructura tiene sólo efecto

local.

Page 35: Introducción a NoSQL

Grafo: conceptos

• Nodo: representa entidades como personas, negocios,

etc.

• Propiedad: información relevante relacionada con los

nodos.

• Aristas: son las líneas que conectan nodos entre sí o

nodos y propiedades. Representan relaciones: la info

importante se almacena en aristas.

Page 36: Introducción a NoSQL

Grafo: Ejemplo

Page 37: Introducción a NoSQL

Grafo: Pros y contras

• Son habitualmente más rápidas para conjuntos de datos

asociativos.

• Mapean fácilmente en aplicaciones orientadas a objetos.

• Escalan de forma más natural hacia conjuntos de datos ya

que no suelen requerir operaciones costosas basadas en

joins.

• Las habituales de NoSQL.• Las bases de datos relacionales son habitualmente más

rápidas cuando realizan la misma operación en grandes

volúmenes de info.

Page 38: Introducción a NoSQL

Grafo: vendedores

Page 39: Introducción a NoSQL

Neo4j

• Última versión estable 2.0.1

• Licencia GPLv3 / AGPLv3 y Comercial

• “Alta escalabilidad, robusta (completamente

ACID)”

• “Usada en aplicaciones críticas por miles de

startups, empresas y gobiernos alrededor del

mundo”

Page 40: Introducción a NoSQL

OrientDB

• Última versión estable 1.6.3

• Licencia Apache

• Soporte transacciones ACID: recupera info

pendiente ante problemas.

• Soporta lenguaje SQL con extensiones para

gestionar relaciones sin SQL join, gestionar

árboles y grafos.

• Preparada para la web: soporte nativo HTTP,

protocolo RESTful y JSON.

Page 41: Introducción a NoSQL

Grafo: Trends

Page 42: Introducción a NoSQL

Trends global

Page 43: Introducción a NoSQL

Enlaces externosGeneral[1] http://nosql-database.org/[2] NoSQL Explained: http://www.mongodb.com/learn/nosql[3] Comparación varias: http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis[4] NoSQL: http://en.wikipedia.org/wiki/Nosql

Columna[1] Column (data store): http://en.wikipedia.org/wiki/Column_(data_store)[2] ColumnFamily: http://en.wikipedia.org/wiki/ColumnFamily[2] Keyspace (data store): http://en.wikipedia.org/wiki/Keyspace_(data_model)[3] CAP theorem: http://en.wikipedia.org/wiki/CAP_theorem[4] ACID: http://en.wikipedia.org/wiki/ACID[5] Cassandra: http://cassandra.apache.org/[6] Cassandra data model: http://rubyscale.com/blog/2010/09/13/understanding-the-cassandra-data-model-from-a-sql-perspective/[7]: Hbase: https://hbase.apache.org/[8]: Accumulo: https://accumulo.apache.org/

Page 44: Introducción a NoSQL

Enlaces externosDocumento[1] Document (data store): http://en.wikipedia.org/wiki/Document-oriented_database[2] MongoDB: http://www.mongodb.org/[3] Pros & cons MongoDB: http://halls-of-valhalla.org/beta/articles/the-pros-and-cons-of-mongodb,45/[4] Who uses mongoDB: http://www.mongodb.org/about/production-deployments/ http://www.mongodb.org/about/applications/[5] MarkLogic: http://www.marklogic.com/

Key value[1] Key-value: http://en.wikipedia.org/wiki/Key-value_store[2] Amazon DynamoDB: http://aws.amazon.com/es/dynamodb/[3] Project Voldemort: http://www.project-voldemort.com/voldemort/[4] Redis: http://redis.io/[5] Riak: http://basho.com/riak/

Grafo[1] Graph: http://en.wikipedia.org/wiki/Graph_database[2] Neo4j: http://www.neo4j.org/[3] Clientes usando Neo4j: http://www.neotechnology.com/customers/[4] OrientDB: http://www.orientechnologies.com/orientdb/