el zoo nosql

Cuaderno de Campo


¿Quién es este tío?


Programador / Desarrollador / Ingeniero de software / Sysadmin / DevOps / Cacharreador

Actualmente en MediaSmart Mobile

alejandrofer,  alexfernandez, @pinchito

Índice


¿Qué es SQL?

Desarrollos teóricos

Principios de NoSQL

Categorías de NoSQL

Eligiendo base de datos

Conclusión

Panorama pre-2000


Bases de datos libres:
MySQL, PostgreSQL

Bases de datos propietarias:
Oracle, MSSQL, DB2

Propietarias sobre Linux: sólo Oracle

Ecos del pasado:
Sybase, Ingres, Informix...

¿QUÉ ES SQL?


Lenguaje de consulta

Paradigma relacional

Normalización de tablas

ACID:

Atomicity

Consistency

Isolation

Durability

Transacciones


1494: Luca Pacioli, principios de contabilidad

Semántica: begin...commit/rollback

Deshacer / compensar / reconciliar una parte

"Cosido" a mano

Transacciones distribuídas

Limitaciones de SQL


Estándar limitado:
No es Turing-completo (al menos sin CTE)

Estándar ignorado: portabilidad casi nula
Mercado cautivo (hegemonía Oracle)

Semántica de bloqueo

Todo es una transacción (o casi)

Transacciones distribuídas

Tutorial: Rutas a caballo


Modelado de datos
Paseo: ruta + caballo + jinete + puntuación

¿Dos o más caballos, jinetes, rutas?
¿Cambio de puntuación?

Consultas: rutas más usuales, jinetes por caballo,
puntuación por caballo o jinete

Retos: consistencia, no repetición
normalización, transacciones


Presentando a NOSQL

Desarrollos teóricos


1998: Algoritmo Paxos

2000: Teorema CAP

2006: BigTable

2007: Dynamo paper

ALGORITMO PAXOS


Desarrollado en 1989, publicado en 1998

Consenso entre procesadores en presencia de errores

Partición de red (desconexión)

Red poco fiable → distintas vistas

Consenso en un cluster

Teorema CAP


2000: Conjetura de Brewer (Berkeley)

2002: Demostración de Gilbert y Lynch (MIT)

Consistency, Availability, network Partition: pick 2

En la práctica:
disponibilidad o consistencia

Scale out: replicación en maestro-maestro

Google's BigTable


En desarrollo desde 2004

Publicado en 2006

Base de datos multi-dimensional:
fila, columna, timestamp

Permite almacenar cantidades ingentes de datos
(a escala de Google)

Amazon Dynamo


Desarrollada para uso interno

Artículo publicado en 2007

Abierta al público en 2012

Almacenamiento clave-valor

Alta disponibilidad

Base de Riak, Cassandra, Voldemort

TUTORIAL: BD EN CLUSTER

Backup

Replicación diferida

Replicación en tiempo real

Configuración maestro-esclavo

Configuración maestro-maestro

Transacción pesimista / optimista

La horrible verdad

Principios de NoSQL


BASE: Basicly Available, Soft-state, Eventually consistent

Desnormalización

Consistencia eventual

Localidad de datos

Scale-out

Distribución geográfica

Desnormalización


Técnica conocida de antiguo...
... llevada al extremo

Almacenar cada dato en su sitio

Repetir cada dato las veces que haga falta

El desarrollador decide cuándo actualizar
y lo programa a mano

Consistencia controlada

Consistencia Eventual


Otra técnica conocida de antiguo...
... de nuevo aceptada y adoptada

Ataca directamente la consistencia y el aislamiento (CI)

Lectura inmediata: mismo valor

Escritura diferida

Reconciliación de datos

Localidad de Datos


Rendimiento lineal

Lecturas proporcionales a los accesos a disco

Full-scan → el demonio

Objetivo: una lectura por consulta ~ 1 ms

Disco SSD: acceso más rápido
mismo problema

Scale Out


Scale up: máquinas más gordas
Scale out: más máquinas

Reparto de los datos en muchos nodos
Redundancia + alta disponibilidad

Sharding, buckets, réplicas, vistas parciales

MapReduce

Distribución Geográfica


Reparto en muchos CPDs (datacenters)

Escala global

Vivir en las nubes

Cercanía al consumidor

Actualización diferida

Contadores

ALMACÉN DE DOCUMENTOS


Lo que se consume junto se guarda junto

Estructuras complejas

Esquema libre

Índices secundarios

Propietaria: Lotus Notes
Libres: CouchDB, MongoDB, CouchBase 2.0

Clave-valor


La herejía más radical de SQL

Clave -> valor, donde el valor es cualquier cosa

Se guarda lo que se necesita leer

El caso de uso decide la estructura

Propietaria: DynamoDB
Libres: Memcached, Riak, Redis, CouchBase, Voldemort

Multi-Valor


Múltiples valores por fila y columna

Indexados por fila, columna y timestamp

Grandes cantidades de datos

Parecido a OLAP

Propietaria: BigTable
Libres: Cassandra, HBase, Hypertable, LevelDB

Orientadas a grafo


Un punto de color

Aplicaciones específicas

Grafos sociales

Libres: FlockDB, Neo4J

NewSQL


Vuelta a SQL

Escalabilidad y rendimiento

Google Spanner: propietario, sobre BigTable

VoltDB: libre, procedimientos almacenados

MemSQL: backend propietario, cliente MySQL

INTERMEDIO



RETOS NOSQL


Big Data: ¿mantener todo?

Borrar datos es difícil

Escalabilidad lineal

Transaccionalidad

API común

Hitos Software libre


Software libre: pionero en varias áreas

2003: memcached

2005: CouchDB

2007: MongoDB

2009: Redis, Riak

Licencias


Base de datos sin soporte: ¿ahorro o mala idea?

Parches

Enterprise edition

Enterprise features: Replicación, clustering

Eligiendo Base de Datos



MongoDB

Orientada a documento

Escritura muy rápida

Sharding, replica set

Consola completa
Fácil para desarrollar
Difícil de administrar
Delicada de montar en cluster

Soporte comercial

Tutorial rutas: MongoDB


Documentos para caballo, jinete, paseo

Consistencia:
proceso batch
oportunista
asíncrona

MapReduce

Transacciones

Memcached

Clave-valor básica

Usada básicamente como caché

Datos en memoria

API: set, add, replace, append, prepend, cas
get, gets, delete, incr/decr
stats, flush_all

Sin soporte

Tutorial rutas: memcached


Cacheo de datos

Servidor de caché

Datos a cachear

Flujo de datos

Vida útil

Riak


Clave-valor avanzada

Alta disponibilidad

Réplicas, buckets, reconciliación manual

Quorum (número configurable de escrituras)

Desarrollada por Basho
Versión enterprise: replicación entre clusters

Tutorial Rutas: Riak


Diseño de claves

Actualización de contadores

Consistencia: versiones

Configuración:
Número de réplicas
Selección de quorum

Redis

Clave-valor

ZSETS: almacén de claves

Semántica atómica

Replicación maestro-esclavo

Cluster en desarrollo

Desarrollada por VMWare
Sin soporte

Tutorial Rutas: Redis


Diseño de claves

ZSETs:
jinetes, caballos
rutas por jinete y por caballo

Réplicas

Neo4J


Orientada a grafo

Sólo para usos específicos

Redes sociales

Versión enterprise: licencia comercial
clustering, monitoring

Neo4j Example


Tutorial Rutas: Neo4J


Diseño de red social de jinetes

Recomendaciones de caballos

Árbol genealógico equino

Precauciones


Peligros:
Matrices de producto
Benchmarks
Drivers multi-producto
Productos inmaduros

Uso práctico: la única guía

Ve siempre a por lo sencillo

Intenta mantener tus opciones abiertas

Para Terminar


Nuevas herramientas especializadas
Mundo en ebullición

Usa SQL donde tenga sentido

¡Cacharrea!

Pregunta: foros, StackOverflow
Casi todo en inglés

¡Gracias!


¿Preguntas?

¿Sugerencias?

¿Dudas?

¿Consultas abstrusas?

¿¿¿Algo???


(C) 2013 Alex Fernández -- CC BY 3.0 ES

el zoo nosql

By Alex Fernández