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
el zoo nosql
- 6,836