Acceso a Datos para soluciones altamente escalables usando SQL, NoSQL y Almacenamiento políglota Walter Montes Delgado Most Valuable Professional MCSA, MCSD, MCPD, MCITP, MCT @tewar93 http://waltermontes.com
#SQLSat443
Patrocinadores del SQL Saturday Gold Sponsor Bronze Sponsor Geek Sponsor
Walter Montes Delgado Solutions Architecture Consultant en Enhance Solutions Microsoft MVP ASP.NET/IIS CR Developers.NET http://waltermontes.com
Entrando en contexto??? 1998 NoSQL 1969 Relational Model
Modelos relacionales
Modelos relacionales
Modelos relacionales Capa de mappeo Bases de datos a entidades Entidades a base de datos Esfuerzo/tiempo Rendimiento
Modelos relacionales Los requerimientos cambian, los procedimientos cambian, y las aplicaciones? Análisis de impacto detallados Crecimiento de cantidad de datos Cientos? Ok Miles? Ummm Millones?
Modelos relacionales Alta disponibilidad y escalabilidad = altos costos
Modelos relacionales Agilidad y programabilidad Flexibilidad Rendimiento y escalabilidad Disponibilidad
Modelos relacionales Rendimiento y escalabilidad Scale up Aumentar proporcionalmente Scale out Escalar horizontalmente
Internet Usuarios concurrentes Volúmenes de tráfico Más datos a capturar Globalización
No sólo SQL Nube Llave/Valor No estructura Grafos Escalable No SQL Documentos No Relacional Internet Agilidad BigData Columna-Familia
Qué es NoSQL? No sólo SQL (relacional)
Entonces cómo se almacenan datos? Almacenamiento Llave/Valor (key/value store) Bases de datos de Documentos (document databases) Bases de datos Columna-Familia (column-family database) Bases de datos de Gráfos (graph databases)
Almacenamiento Llave/Valor Tablas de Hash 18
Almacenamiento Llave/Valor Función Hash 0 1 2 3 4 5 Toma la primera letra de la llave
Almacenamiento Llave/Valor Insert Key: Amarillo Función Hash 0 1 2 3 4 5 Resultado: Posición 0
Almacenamiento Llave/Valor Search Key: Dorado Función Hash 0 Amarillo 1 Blanco 2 Café 3 4 5 Resultado: Posición 3
Almacenamiento Llave/Valor Insert Key: Azul Función Hash Colisión 0 Amarillo Azul 1 Blanco 2 Café 3 4 5
Almacenamiento Llave/Valor n Insert Key: Ámbar Función Hash 0 Amarillo Azul Ámbar 1 Blanco 2 Café 3 k 4 5 Colisión n=10 k=1,000 10,000 0.01 microsegundos n=10 k=1 10 0.00001 microsegundos O(n/k) O(n)
Bases de datos de Documentos Documento: colección de campos nombrados y valores XML, YAML, JSON, BSON
Bases de datos de Documentos Participantes ParticipacionCharlas Charlas PK Cedula PK ParticipacionCharlaId PK CharlaId Nombre FK ParticipanteId Titulo ApellidoMaterno FK CharlaId HoraInicio ApellidoPaterno FK CedulaExpositor FechaNacimiento EmpresaId Expositores TelefonosParticipantes PK TelefonoId FK CedulaParticipante Telefono EmpresasParticipantes PK EmpresaId Nombre PK Cedula Nombre ApellidoMaterno ApellidoPaterno TipoTelefonoId
Bases de datos de Documentos Participantes PK Cedula Nombre ApellidoMaterno ApellidoPaterno FechaNacimiento EmpresaId TelefonosParticipantes EmpresasParticipantes PK TelefonoId PK EmpresaId FK CedulaParticipante Nombre Telefono TipoTelefonoId
Base de datos de Documentos Identificador 1234 { 1235 Valor } Cedula: 1000000, Nombre: { Nombre: Walter, ApellidoMaterno: Montes, ApellidoPaterno: Delgado }, FechaNacimiento: { Anno:0000, Mes: 00, Dia: 00 }, Telefonos:{ [ { Telefono: 1111-2222, TipoTelefono: Cel }, { Telefono: 1111-4444, TipoTelefono: Casa } ] }, EmpresaId: 1
Bases de datos Columna-Familia Denormalización
Bases de datos Columna-Familia
Bases de datos Columna-Familia
Bases de datos de gráfos Relaciones de las entidades Nodos (nodes) y bordes (edges) Consultas y analizar relaciones entre entidades
Bases de datos de gráfos
Bases de datos de gráfos
Importante Agregados siempre en mente Como se consultarán los datos Como se procesará la información en las operaciones 34
CÓMO FUNCIONA EN UN MUNDO REAL?
Algunos problemas comunes en sistemas distribuidos Alta Disponibilidad Escalabilidad y reducción de latencia de red Consistencia eventual? No uniformidad y esquemas
Alta disponibilidad SQL Consistencia Clustering Altos recursos No SQL Disponibilidad Consistencia baja prioridad Eventualmente consistente
Alta disponibilidad SQL Consistencia Clustering Altos recursos No SQL Disponibilidad Consistencia baja prioridad Eventualmente consistente
Alta disponibilidad Primary/Secondary Replication y Peer to Peer Replication
Alta disponibilidad Primary/Secondary Replication 1 Insertar 2 Confirmar Application1 4 Replicar Primary Secondary
Alta disponibilidad Peer to Peer Replication 1 Insertar 2 Confirmar Application1 Replicar Peer1 1 Insertar 2 Confirmar Application2 Peer2
Escalabilidad y reducir la latencia de red Diseñar con agregados y sharding en mente Distribución geográfica Tipos de Sharding Shared Nothing Auto Sharding
Escalabilidad y reducir la latencia de red Porqué Sharding es más sencillo en nosql? Usuarios Id Nombre Apellido Apellido2 1 Linus Benedict Torvalds 2 William Gates III 3 Shakira Mebarak Ripoll Telefonos Id UserId Telefono Tipo 134 1 1234-1234 Cel 135 2 2555-564 Cel 136 3 7896-1235 Cel 137 3 5555-5547 Home
Escalabilidad y reducir la latencia de red Porqué Sharding es más sencillo en nosql? Usuarios Telefonos Id Nombre Apellido Apellido2 Id UserId Telefono Tipo 1 Linus Benedict Torvalds 134 1 1234-1234 Cel Conocer las relaciones de Usuarios las tablas y datos Telefonos para hacer un sharding Id Nombre Apellido Apellido2 adecuado Id UserId Telefono Tipo 2 William Gates III 135 2 2555-564 Cel 3 Shakira Mebarak Ripoll 136 3 7896-1235 Cel 137 3 5555-5547 Home
Escalabilidad y reducir la latencia de red Porqué Sharding es más sencillo en nosql? Usuarios Id Nombre Apellido U1 Apellido2 1 Linus Benedict Torvalds Telefonos Id UserId Telefono T1 Tipo 134 1 1234-1234 Cel Usuarios Id Nombre Apellido Apellido2 U2 2 William Gates III 3 Shakira Mebarak Ripoll Telefonos Id UserId Telefono Tipo 135 2 2555-564 T2 Cel 136 3 7896-1235 Cel 137 3 5555-5547 Home
Escalabilidad y reducir la latencia de red Porqué Sharding es más sencillo en nosql? U1 U2 T2 T1
Escalabilidad y reducir la latencia de red Usando almacenamiento con documentos Usuarios Id: 1, Nombre: Linus, Apellido: Benedict, Apellido2: Torvalds, Telefonos: [ { Telefono:1234-1234, Tipo: Cel } ] Id: 2, Nombre: William, Apellido: Gates, Apellido2: III, Telefonos: [ { Telefono:2555-564, Tipo: Cel } ] Id: 1, Nombre: Shakira, Apellido: Mebarak, Apellido2: Ripoll, Telefonos: [ { Telefono:7896-1235, Tipo: Cel }, { Telefono: 5555-5547, Tipo: Home } ] Usuarios Id: 1, Nombre: Linus, Apellido: Benedict, Apellido2: Torvalds, Telefonos: [ { Telefono:1234-1234, Tipo: Cel } ] Usuarios Id: 2, Nombre: William, Apellido: Gates, Apellido2: III, Telefonos: [ { Telefono:2555-564, Tipo: Cel } ] Id: 1, Nombre: Shakira, Apellido: Mebarak, Apellido2: Ripoll, Telefonos: [ { Telefono:7896-1235, Tipo: Cel }, { Telefono: 5555-5547, Tipo: Home } ]
Escalabilidad y reducir la latencia de red Usando almacenamiento con documentos Usuarios Id: 1, Nombre: Linus, Apellido: Benedict, Apellido2: Torvalds, Telefonos: [ { Telefono:1234-1234, Tipo: Cel } ] Id: 2, Nombre: William, Apellido: Gates, Apellido2: III, Telefonos: [ { Telefono:2555-564, Tipo: Cel } ] Id: 1, Nombre: Shakira, Apellido: Mebarak, Apellido2: Ripoll, Telefonos: [ { Telefono:7896-1235, Tipo: Cel }, { Telefono: 5555-5547, Tipo: Home } ] Usuarios Id: 1, Nombre: Linus, Apellido: Benedict, Apellido2: Torvalds, U1 Telefonos: [ { Telefono:1234-1234, Tipo: Cel } ] Usuarios Id: 2, Nombre: William, Apellido: Gates, Apellido2: III, Telefonos: [ { Telefono:2555-564, Tipo: Cel } ] U2 Id: 1, Nombre: Shakira, Apellido: Mebarak, Apellido2: Ripoll, Telefonos: [ { Telefono:7896-1235, Tipo: Cel }, { Telefono: 5555-5547, Tipo: Home } ]
Escalabilidad y reducir la latencia de red Porqué Sharding es más sencillo en nosql? U2 U1
Mejorando la consistencia Sharding y replicación aumentan el riesgo de inconsistencias Quórums de lectura y escritura Como un consenso Versionar datos y resolver conflictos
Mejorando la consistencia - Quórums de lectura { Nombre: Walter, Apellido: Montes } Db.users.findOne( {Id:1} ) { Nombre: Walter, Apellido: Montes } { Nombre: Walter, Apellido: Montes } Read Quorum
Mejorando la consistencia - Quórums de escritura Ok, estoy listo Db.users.insert( {Nombre: Walter, Apellido: Montes } ) Esperando... Ok, estoy listo Write Quorum
Versionar datos y resolver conflictos Escenario común 4. Update object Bloqueo pesimista App1 Bloqueo optimista 1. Find(1) 3. Update Object App2 2. Find(1) Database
Versionar datos y resolver conflictos Bloqueo optimista 1. Obtiene el dato y la versión 2. Si intenta actualizar verifica la versión 3. Si no ha cambiado actualiza 4. Si cambió, retorna los datos actuales y retorna antes del paso 2 Identificador y timestamp
Versionar datos y resolver conflictos Problemas de sincronización de horarios Viernes 25 de Abril, 4:25am Jueves 24 de Abril, 1:25pm
Versionar datos y resolver conflictos Vector Clocks Vector Clocks App1 App2 Insertar A:1 Server:A Server:B
Versionar datos y resolver conflictos Vector Clocks Vector Clocks App1 App2 A:1 A:1 A:1 Sincroniza Server:A Server:B
Versionar datos y resolver conflictos Vector Clocks Vector Clocks App1 Modifica App2 Modifica A:2 A:1, B:1 Server:A Server:B
Versionar datos y resolver conflictos Vector Clocks Vector Clocks App1 App2 A:2 A:1, B:1 Conflicto Sincronizar Server:A Server:B
No uniformidad y esquemas Diseño de la base de datos Crear columnas con tipos de datos, rangos, si permite o no nulos, etc Depende Depende Cambia
No uniformidad y esquemas Con nosql y sin esquema Depende Depende Se actualiza sin problemas Cambia
Puedo usar NoSQL siempre?
Usos comunes de NoSQL Almacenamiento de sesiones y perfiles de usuario (preferencias) Contenido y metadatos Móviles Caché (búsquedas populares, objetos, páginas) E-Commerce Juegos y aplicaciones cambiantes Análisis y almacenamiento de datos sociales
Servidores Llave/Valor
Servidores Documentos
Servidores Columna-Familia
Servidores Gráfos
No SQL SOLUCIONES POLIGLOTAS
Soluciones políglotas
Demostración DocumentDB ESTUDIANTES SQL Azure DISTRIBUCIÓN AULAS Table Storage AULAS
PREGUNTAS Y RESPUESTAS contacto @waltermontes.com waltermontes.com Walter Montes Delhado @tewar93
Evaluaciones Evaluacion del evento http://www.sqlsaturday.com/443/eventeval.aspx Evaluacion de las charlas http://www.sqlsaturday.com/443/sessions/sessionevaluation.aspx
Proxima sesion Titulo proxima conferencia