introducción a nosql - rubyfunday 2013
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.TRANSCRIPT
![Page 1: Introducción a NoSQL - RubyFunDay 2013](https://reader034.vdocuments.net/reader034/viewer/2022051513/5463d8d1b4af9f583f8b46fc/html5/thumbnails/1.jpg)
Introducción a NoSQLRubyFunDay Argentina 2013
Damian Martinelli@damianmarti
![Page 2: Introducción a NoSQL - RubyFunDay 2013](https://reader034.vdocuments.net/reader034/viewer/2022051513/5463d8d1b4af9f583f8b46fc/html5/thumbnails/2.jpg)
Introducción a NoSQL
● Conceptos Generales● Relacional● Clave/Valor● Columnas● Documentos● Grafos
![Page 3: Introducción a NoSQL - RubyFunDay 2013](https://reader034.vdocuments.net/reader034/viewer/2022051513/5463d8d1b4af9f583f8b46fc/html5/thumbnails/3.jpg)
Conceptos Generales: ACID
● Atomicidad● Consistencia● Aislamiento● Durabilidad
![Page 4: Introducción a NoSQL - RubyFunDay 2013](https://reader034.vdocuments.net/reader034/viewer/2022051513/5463d8d1b4af9f583f8b46fc/html5/thumbnails/4.jpg)
Conceptos Generales: CAP
● Consistente● Disponibilidad● Tolerante a particiones
Teorema CAP: elegir 2
Depende del negocio
![Page 5: Introducción a NoSQL - RubyFunDay 2013](https://reader034.vdocuments.net/reader034/viewer/2022051513/5463d8d1b4af9f583f8b46fc/html5/thumbnails/5.jpg)
Conceptos Generales: Mapreduce
● Map● Reduce● Paralelismo
![Page 6: Introducción a NoSQL - RubyFunDay 2013](https://reader034.vdocuments.net/reader034/viewer/2022051513/5463d8d1b4af9f583f8b46fc/html5/thumbnails/6.jpg)
Relacional
● Tablas bidimensionales● Estructurada● Relación de datos mediante claves foráneas● SQL● ACID● Muchas features
![Page 7: Introducción a NoSQL - RubyFunDay 2013](https://reader034.vdocuments.net/reader034/viewer/2022051513/5463d8d1b4af9f583f8b46fc/html5/thumbnails/7.jpg)
Relacional - Motores
● MySQL● MSSQL● Oracle● SQLite● PostgreSQL● MariaDB
![Page 8: Introducción a NoSQL - RubyFunDay 2013](https://reader034.vdocuments.net/reader034/viewer/2022051513/5463d8d1b4af9f583f8b46fc/html5/thumbnails/8.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022051513/5463d8d1b4af9f583f8b46fc/html5/thumbnails/9.jpg)
Relacional -1
● Datos muy variables● Datos con muchas jerarquías● Escalar
![Page 10: Introducción a NoSQL - RubyFunDay 2013](https://reader034.vdocuments.net/reader034/viewer/2022051513/5463d8d1b4af9f583f8b46fc/html5/thumbnails/10.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022051513/5463d8d1b4af9f583f8b46fc/html5/thumbnails/11.jpg)
Clave/Valor - Motores
● Memcached● Voldemort● Redis● Riak● Tokyo/Kyoto Cabinet● Google LevelDB
![Page 12: Introducción a NoSQL - RubyFunDay 2013](https://reader034.vdocuments.net/reader034/viewer/2022051513/5463d8d1b4af9f583f8b46fc/html5/thumbnails/12.jpg)
Clave/Valor +1
● Escalar horizontalmente● Muchos accesos solo por clave● Datos poco relacionados
![Page 13: Introducción a NoSQL - RubyFunDay 2013](https://reader034.vdocuments.net/reader034/viewer/2022051513/5463d8d1b4af9f583f8b46fc/html5/thumbnails/13.jpg)
Clave/Valor -1
● Necesidad de consultas complejas
![Page 14: Introducción a NoSQL - RubyFunDay 2013](https://reader034.vdocuments.net/reader034/viewer/2022051513/5463d8d1b4af9f583f8b46fc/html5/thumbnails/14.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022051513/5463d8d1b4af9f583f8b46fc/html5/thumbnails/15.jpg)
Columnas - Motores
● HBase● Cassandra● Hypertable● Google BigTable● Accumulo
![Page 16: Introducción a NoSQL - RubyFunDay 2013](https://reader034.vdocuments.net/reader034/viewer/2022051513/5463d8d1b4af9f583f8b46fc/html5/thumbnails/16.jpg)
Columnas +1
● Escalabilidad horizontal● Compresión y versionado
![Page 17: Introducción a NoSQL - RubyFunDay 2013](https://reader034.vdocuments.net/reader034/viewer/2022051513/5463d8d1b4af9f583f8b46fc/html5/thumbnails/17.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022051513/5463d8d1b4af9f583f8b46fc/html5/thumbnails/18.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022051513/5463d8d1b4af9f583f8b46fc/html5/thumbnails/19.jpg)
Documentos
● Esquemas flexibles● Objetos anidados, no relacionados● Facil de distribuir● Desnormalización de datos
![Page 20: Introducción a NoSQL - RubyFunDay 2013](https://reader034.vdocuments.net/reader034/viewer/2022051513/5463d8d1b4af9f583f8b46fc/html5/thumbnails/20.jpg)
Documentos - Motores
● MongoDB● CouchDB● OrientDB
![Page 21: Introducción a NoSQL - RubyFunDay 2013](https://reader034.vdocuments.net/reader034/viewer/2022051513/5463d8d1b4af9f583f8b46fc/html5/thumbnails/21.jpg)
Documentos +1
● Cuando no se sabe cómo van a ser los datos
![Page 22: Introducción a NoSQL - RubyFunDay 2013](https://reader034.vdocuments.net/reader034/viewer/2022051513/5463d8d1b4af9f583f8b46fc/html5/thumbnails/22.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022051513/5463d8d1b4af9f583f8b46fc/html5/thumbnails/23.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022051513/5463d8d1b4af9f583f8b46fc/html5/thumbnails/24.jpg)
Grafos - Motores
● Neo4J● InfiniteGraph
![Page 25: Introducción a NoSQL - RubyFunDay 2013](https://reader034.vdocuments.net/reader034/viewer/2022051513/5463d8d1b4af9f583f8b46fc/html5/thumbnails/25.jpg)
Grafos +1
● Aplicaciones donde hay redes● Datos muy interconectados
![Page 26: Introducción a NoSQL - RubyFunDay 2013](https://reader034.vdocuments.net/reader034/viewer/2022051513/5463d8d1b4af9f583f8b46fc/html5/thumbnails/26.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022051513/5463d8d1b4af9f583f8b46fc/html5/thumbnails/27.jpg)
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