Bases de Datos NoSQL
Antonio [email protected]
Conceptosbásicos
Rendimiento
Capacidad de llevar a cabo una tarea comparada con los recursos utilizados
Si un sistema puede hacer más que otro usando la misma cantidad de recursos entonces tiene un mayor rendimiento
Alta disponibilidad
Capacidad de un sistema de ofrecer cierto nivel de funcionalidad y servicio en sus operaciones de manera ininterrumpida.
Generalmente esto requiere tener servidores redundantes, replicar la información y ofrecer tolerancia a los fallos
Escalabilidad
Generalmente requiere piezas independientes, particionamiento de la información y tolerancia a los fallosCapacidad de un sistema de poder crecer en número de usuarios y operaciones realizadas de manera continua sin que la calidad de su servicio se vea afectada.
Tipos de escalabilidad
Vertical: El sistema cree al usuario equipos más potentes y con más recursos.
Horizontal: El sistema crece dividiendo la carga de trabajo entre más equipos de las mismas características
Tolerancia a fallos
Capacidad de un sistema de poder recuperarse en caso de que alguno de sus componentes falle o deje de operar.
Generalmente mente requiere utilizar equipos con funciones redundantes y replicar la información constantemente.
Sistema Distribuido
Es un sistema en el que las características ofrecidas solo se logran entregar utilizando distintos equipos trabajando en simultáneo de manera conjunta y colaborativa.
Modelo Relacional
Las entidades del dominio del problema se modelan como tablasLas tablas tienen columnas y registrosLos atributos van como columnas y son los mismos para todos los registrosCada tabla tiene una estructura definida (Schema) Las relaciones se logran asociando los valores de ciertas columnas de una tabla con ciertas columnas de otras tablas
ACID
Atomicidad (Atomicity)
Consistencia (Consistency)
Independencia (Isolation)
Durabilidad (Durability)
Teorema CAP
Solo es posible obtener dos de las propiedades al mismo tiempo
Map/Reduce
Estrategia para calcular un resultado que divide la entrada de datos en un montón de partes procesadas independientemente en paralelo para luego consolidar todos los resultados en un solo valor o conjunto.
NoSQL(No solo SQL)
Motivaciones
Enormes volúmenes de datos
Dificultad de escalar operaciones de escritura
Dificultad de gestionar esquemas a gran escala
Necesidad de mayor velocidad y rendimiento
Datos en Facebook
161 EB
988 EB
2006 2010
6 veces en 4 años
322 millones de HD de 500GB
1 980 millones de HD de 500 GB
Características
No relacionales
Distribuídas
Escalabilidad horizontal
Schema-less (Sin estructura)
Eventualmente consistentes
Categorías
Key-Value stores
Document stores
Column-oriented stores
Graph Databases
Key-Value Storehash / diccionario
Memcached
Dynamo (inspiración de otras)
Redis
Riak
Tokyo Cabinet
Document Storessemi-estructuradas
IBM Lotus
MongoDB
CouchDB
Column-Oriented Storessemi-estructuradas
BigTable (inspiración de otras)
HBase
Cassandra
Hypertable
Graph Database
InfoGrid
Neo4j
Mongo DBorientada a documentos
Documentos estilo JSON (BSON)
Colección (Similar a tabla)
Consultas simples con JSON
Consultas complejas con Map/Reduce empleando Javascript
Apache Cassandraorientada a columnasCreada por Facebook
Particionamiento automático
Enfoque en op. de escritura
Consistencia ajustable (CAP)
Servidor en Java usando Thrift
Modelo de datos de Cassandra
Si solo tienes un martillo, todo te parece
un clavo.
REDIS(Remote Dictionary Server)
“La memoria es el nuevo
disco, el disco es la nueva
cinta” — jim gray
FortalezasDisco duro
- durabilidad
- capacidad
- acceso sequencial (= “cinta”)
memoria
- acceso aleatorio
- baja latencia
Latencia relativa
Registros 0.1
Memoria Cache 1
Memoria RAM 10
Disco Duro 1.000.000
Latencia relativa
Registros 0.1
Memoria Cache 1
Memoria RAM 10
Disco Duro 1.000.000
flickr.com/photos/36688133@N00/3655892919
Berlin - Londres
F-16 6 minutos
Avión 1 hora
Tren 10 horas
Automóvilmalogrado
114 años
flickr.com/photos/64498037@N00/3107322938
flickr.com/photos/atzu/2645776918
redis
4897 GET/s 5128 SET/s
benchmark
code.google.com/p/redis/wiki/Benchmarks
flickr.com/photos/mbiddulph/3836727468
flickr.com/photos/mbiddulph/3836727468
sheeva plug
flickr.com/photos/mbiddulph/3836727468
sheeva plug
$99 99
CaracterísticasEstructuras de datos
- enteros, cadenas
- listas, conjuntos, diccionarios
- canales
Operaciones atómicas
- get, set, increment
- push, pop ...
Memoria virtual
- llaves siempre en memoria
- Intercambio sobre demandaDurabilidad
- append-only log file
- background snapshots
Replicación
Características
Implementación
- 10k lineas de ANSI C
- Base de código clara y legible
- Salvatore Sanfilipo (Italia)
- Sponsor de VMware
Librerías cliente
- redis-cli, telnet
- c, c#
- ruby, python, perl
- java, scala
- php
- [muchas más ...]
Instalación en Linux (UNIX en general)
> wget redis.tgz
> tar xzf redis.tgz> cd redis> make
> ./redis-server
CADENAS
SETGETDELGETSETMGETINCR / DECR
LISTAS
RPUSH / RPOPLPUSH / LPOP
LRANGERPOPLPUSHSORT
CONJUNTOS(SETS)
SADD / SREMSMOVESINTER / SINTERSTORESUNION / SUNIONSTORESDIFF / SDIFFSTORESORT
CONJUNTOS ORDENADOS(ZSETS)
ZADDZREM
ZRANGE? ZINTER / ZUNION / ZDIFF ?
DICCIONARIOS(HASHES)
HSETHGET
HDELHGETALLHEXISTS
EJEMPLO: BLOG(BITÁCORA DE INTERNET)
posts:contador (COUNTER)post:id:1 (HASH)
post:id:1:tags (SET)tag:nombre:posts (ZSET)posts (ZSET)
EJEMPLO: BLOG(CONTINUACION)
tags (SET)posts:mes:<m>:anio:<a> (ZSET)
post:slug:<slug> (STRING)meses (ZSET)visitas (ZSET)
Aplicación de Ejemplo:- Un blog muy simple escrito en PHP
- No usa ningún framework MVC o mapeador de objetos
- La interacción con Redis está en el archivo modelos.inc.phphttp://bitbucket.org/nosqldemos/redis-blog-demo/
Un agradecimiento a Ernesto Anaya (texai) por el trabajo en CSS.
Resúmen- NoSQL = No solo SQL
- Elegir la herramienta adecuada
- No hay que cruzar la línea roja
- Nueva manera de modelar
- Casi todos productos opensource
- Redis es simple y bastante flexible
ENLACES
http://redis.iohttp://code.google.com/p/redis/
http://rediscookbook.orghttp://mongodb.orghttp://cassandra.apache.org
preguntas
CréditosAlgunos slides y la plantillade la presentación tomadas
desde:
http://www.slideshare.net/tim.lossen.de/redis-memory-as-the-new-disk
Bases de Datos NoSQL
Antonio [email protected]
Top Related