Introducción a NoSQL - RubyFunDay 2013

Preview:

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

Introducción a NoSQLRubyFunDay Argentina 2013

Damian Martinelli@damianmarti

Introducción 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● Relación de datos mediante claves foráneas● SQL● ACID● Muchas features

Relacional - Motores

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

Relacional +1

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

Relacional -1

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

Clave/Valor

● Mapea claves a valores● Sin estructura● Muy rápidos 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● Compresión y versionado

Columnas -1

● Cuando no se sabe cómo 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● Desnormalización de datos

Documentos - Motores

● MongoDB● CouchDB● OrientDB

Documentos +1

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

Documentos -1

● Consultas complejas con joins (cada documento deberia contener toda la información 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

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

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

Recommended