introducción a nosql

Post on 28-May-2015

768 Views

Category:

Technology

5 Downloads

Preview:

Click to see full reader

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

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:”casandra@apache.org” , age:”20”} TerryCho = {emailAddress:”terry.cho@apache.org” , gender:”male”} Cath = {emailAddress:”cath@apache.org” , 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/

top related