Upload
damianmarti
View
778
Download
0
Tags:
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
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