You are on page 1of 27

Introduccin a NoSQL

RubyFunDay Argentina 2013 Damian Martinelli @damianmarti

Introduccin a NoSQL
Conceptos Generales Relacional Clave/Valor Columnas Documentos Grafos

Conceptos Generales: ACID


Atomicidad Consistencia Aislamiento Durabilidad

Conceptos Generales: CAP


Consistente Disponibilidad Tolerante a particiones Teorema CAP: elegir 2 Depende del negocio

Conceptos Generales: Mapreduce


Map Reduce Paralelismo

Relacional
Tablas bidimensionales Estructurada Relacin de datos mediante claves forneas SQL ACID Muchas features

Relacional - Motores
MySQL MSSQL Oracle SQLite PostgreSQL MariaDB

Relacional +1
Se sabe cmo son los datos, pero no cmo se va a usar

Relacional -1
Datos muy variables Datos con muchas jerarquas Escalar

Clave/Valor
Mapea claves a valores Sin estructura Muy rpidos para accesos por clave Simples de distribuir Muchas veces usados como cache

Clave/Valor - Motores
Memcached Voldemort Redis Riak Tokyo/Kyoto Cabinet Google LevelDB

Clave/Valor +1
Escalar horizontalmente Muchos accesos solo por clave Datos poco relacionados

Clave/Valor -1
Necesidad de consultas complejas

Columnas
Sorted map (key: row, col, timestamp) Conceptualmente -> tabla, con filas y columnas Los datos se almacenan por columnas No es costoso agregar columnas Cada fila puede tener un conjunto distinto de columnas (valores nulos no ocupan espacio) Solo scan y get para consultas

Columnas - Motores
HBase Cassandra Hypertable Google BigTable Accumulo

Columnas +1
Escalabilidad horizontal Compresin y versionado

Columnas -1
Cuando no se sabe cmo se van a usar los datos Pocos datos (entran en un solo server)

Columnas != Columnas Relacional


Base de datos relacionales que guardan los datos por columnas Motores:
Sybase IQ C-Store Vertica VectorWise MonetDB ParAccel Infobright

Documentos
Esquemas flexibles Objetos anidados, no relacionados Facil de distribuir Desnormalizacin de datos

Documentos - Motores
MongoDB CouchDB OrientDB

Documentos +1
Cuando no se sabe cmo van a ser los datos

Documentos -1
Consultas complejas con joins (cada documento deberia contener toda la informacin que generalmente se va a querer sobre l)

Grafos
Datos almacenados en forma de grafo Los datos se navegan mediante nodos y aristas Los nodos y las relaciones pueden tener propiedades (pares clave/valor) ACID

Grafos - Motores
Neo4J InfiniteGraph

Grafos +1
Aplicaciones donde hay redes Datos muy interconectados

Grafos -1
Difcil de particionar una misma red (se puede usar el grafo para relaciones y los datos se almacenan en otra db)

Preguntas?
Repositorios con el cdigo del taller:
https://github.com/damianmarti/rubyfunday2013-redis https://github.com/damianmarti/rubyfunday2013-mongodb https://github.com/damianmarti/movies_graph