Bases de datos NoSQL - Huancayo - 2010

Post on 13-Jun-2015

1.695 views 1 download

description

Una introducción a las bases de datos agrupadas bajo la etiqueta "NoSQL", conceptos relacionados y problemática que origina su creación y evolución.

Transcript of Bases de datos NoSQL - Huancayo - 2010

Bases de Datos NoSQL

Antonio Ognioantonio@ognio.com

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 Ognioantonio@ognio.com