Introduccin a NoSQL
Conceptos Generales Relacional Clave/Valor Columnas Documentos Grafos
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)
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