Introducción a NoSQL
-
Upload
cycle-it -
Category
Technology
-
view
768 -
download
5
description
Transcript of Introducción a NoSQL
Advanced technology simplifies your world
Introducción a NoSQLLaboratorio Innovación
19/03/2014
@lasneyxes.linkedin.com/in/miguelmartinforero
Miguel Martín-Forero – COO en @Cycle_IT
Algo sobre mí
Introducción a NoSQL
• ¿Qué es NoSQL?
• Taxonomía
• Características
• Uso básico
• Vendedores
• Penetración en
mercado
• Pros & Contras
¿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”
¿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
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!
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.
Taxonomía: cuatro categorías principales
DocumentoColumn
a
Clave-valor Grafo
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.
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
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.
Columna: Vendedores
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”
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”.
Columna: Trends
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.
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" }
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.
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.
Vendedores
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.
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.
MarkLogic
• Última versión estable 7
• Privada: “Enterprise NoSQL”
• Utilizada por grandes como Warner Bros., Dow Jones,
Citigroup, Boeing, etc.
Documento: Trends
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.
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.
Key-value: ejemplo
{ "Great Expectations": "John", "Pride and Prejudice": "Alice", "Wuthering Heights": "Alice"}
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.
Vendedores
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.
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.
Riak
• Última versión estable 1.4.8
• Licencia Apache
• Sus fuertes son: disponibilidad, tolerancia a fallos,
simplicidad operacional y escalabilidad.
Key-value: Trends
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.
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.
Grafo: Ejemplo
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.
Grafo: vendedores
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”
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.
Grafo: Trends
Trends global
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/
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/