27
Introducción a NoSQL RubyFunDay Argentina 2013 Damian Martinelli @damianmarti

Introducción a NoSQL - RubyFunDay 2013

Embed Size (px)

DESCRIPTION

Introducción a los diferentes tipos de base de datos no relacionales, como ser clave/valor, por columnas, de documentos y de grafos. Contando las caracteristicas principales de cada una, cuándo es útil, cuándo no, y ejemplos de motores de base de datos disponibles para cada tipo.

Citation preview

Page 1: Introducción a NoSQL - RubyFunDay 2013

Introducción a NoSQLRubyFunDay Argentina 2013

Damian Martinelli@damianmarti

Page 2: Introducción a NoSQL - RubyFunDay 2013

Introducción a NoSQL

● Conceptos Generales● Relacional● Clave/Valor● Columnas● Documentos● Grafos

Page 3: Introducción a NoSQL - RubyFunDay 2013

Conceptos Generales: ACID

● Atomicidad● Consistencia● Aislamiento● Durabilidad

Page 4: Introducción a NoSQL - RubyFunDay 2013

Conceptos Generales: CAP

● Consistente● Disponibilidad● Tolerante a particiones

Teorema CAP: elegir 2

Depende del negocio

Page 5: Introducción a NoSQL - RubyFunDay 2013

Conceptos Generales: Mapreduce

● Map● Reduce● Paralelismo

Page 6: Introducción a NoSQL - RubyFunDay 2013

Relacional

● Tablas bidimensionales● Estructurada● Relación de datos mediante claves foráneas● SQL● ACID● Muchas features

Page 7: Introducción a NoSQL - RubyFunDay 2013

Relacional - Motores

● MySQL● MSSQL● Oracle● SQLite● PostgreSQL● MariaDB

Page 8: Introducción a NoSQL - RubyFunDay 2013

Relacional +1

● Se sabe cómo son los datos, pero no cómo se va a usar

Page 9: Introducción a NoSQL - RubyFunDay 2013

Relacional -1

● Datos muy variables● Datos con muchas jerarquías● Escalar

Page 10: Introducción a NoSQL - RubyFunDay 2013

Clave/Valor

● Mapea claves a valores● Sin estructura● Muy rápidos para accesos por clave● Simples de distribuir● Muchas veces usados como cache

Page 11: Introducción a NoSQL - RubyFunDay 2013

Clave/Valor - Motores

● Memcached● Voldemort● Redis● Riak● Tokyo/Kyoto Cabinet● Google LevelDB

Page 12: Introducción a NoSQL - RubyFunDay 2013

Clave/Valor +1

● Escalar horizontalmente● Muchos accesos solo por clave● Datos poco relacionados

Page 13: Introducción a NoSQL - RubyFunDay 2013

Clave/Valor -1

● Necesidad de consultas complejas

Page 14: Introducción a NoSQL - RubyFunDay 2013

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

Page 15: Introducción a NoSQL - RubyFunDay 2013

Columnas - Motores

● HBase● Cassandra● Hypertable● Google BigTable● Accumulo

Page 16: Introducción a NoSQL - RubyFunDay 2013

Columnas +1

● Escalabilidad horizontal● Compresión y versionado

Page 17: Introducción a NoSQL - RubyFunDay 2013

Columnas -1

● Cuando no se sabe cómo se van a usar los datos

● Pocos datos (entran en un solo server)

Page 18: Introducción a NoSQL - RubyFunDay 2013

Columnas != Columnas Relacional

● Base de datos relacionales que guardan los datos por columnas

● Motores:○ Sybase IQ○ C-Store○ Vertica○ VectorWise○ MonetDB○ ParAccel○ Infobright

Page 19: Introducción a NoSQL - RubyFunDay 2013

Documentos

● Esquemas flexibles● Objetos anidados, no relacionados● Facil de distribuir● Desnormalización de datos

Page 20: Introducción a NoSQL - RubyFunDay 2013

Documentos - Motores

● MongoDB● CouchDB● OrientDB

Page 21: Introducción a NoSQL - RubyFunDay 2013

Documentos +1

● Cuando no se sabe cómo van a ser los datos

Page 22: Introducción a NoSQL - RubyFunDay 2013

Documentos -1

● Consultas complejas con joins (cada documento deberia contener toda la información que generalmente se va a querer sobre él)

Page 23: Introducción a NoSQL - RubyFunDay 2013

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

Page 24: Introducción a NoSQL - RubyFunDay 2013

Grafos - Motores

● Neo4J● InfiniteGraph

Page 25: Introducción a NoSQL - RubyFunDay 2013

Grafos +1

● Aplicaciones donde hay redes● Datos muy interconectados

Page 26: Introducción a NoSQL - RubyFunDay 2013

Grafos -1

● Difícil de particionar una misma red (se puede usar el grafo para relaciones y los datos se almacenan en otra db)

Page 27: Introducción a NoSQL - RubyFunDay 2013

Preguntas?

Repositorios con el código del taller:

● https://github.com/damianmarti/rubyfunday2013-redis● https://github.com/damianmarti/rubyfunday2013-mongodb● https://github.com/damianmarti/movies_graph