Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introducción a BD NoSQL

Carlos Moro
September 22, 2016

Introducción a BD NoSQL

Carlos Moro

September 22, 2016
Tweet

More Decks by Carlos Moro

Other Decks in Technology

Transcript

  1. Índice • Un poco de Historia… • ¿Qué es eso

    de NoSQL? • Diferencias entre bases de datos SQL y NoSQL – ACID – BASE • Bases de datos NoSQL – Tipos de bases de datos NoSQL – Neo4J – ElasticSearch – Redis – MongoDB 2
  2. Índice • Un poco de Historia… • ¿Qué es eso

    de NoSQL? • Diferencias entre bases de datos SQL y NoSQL – ACID – BASE • Bases de datos NoSQL – Tipos de bases de datos NoSQL – Neo4J – ElasticSearch – Redis – MongoDB 3
  3. Un poco de Historia… • ¿Qué es una Base de

    Datos? – Conjunto o Colección de Datos – Organizados – Siguiendo una Estructura Lógica – Que Modeliza la realidad 6
  4. Un poco de Historia… • BD vs SGBD – Sistema

    de Gestión de Bases de Datos – Conjunto de Software – Permiten el almacenamiento, modificación y extracción de la información, así como la administración de una Base de Datos 7
  5. Un poco de Historia… • Allá por los 60… –

    Datos almacenados en Cintas – Acceso secuencial – Aparición de los primeros Discos – Acceso aleatorio 8
  6. Un poco de Historia… • Allá por los 60… –

    CODASYL – Committee on Data Systems Languages – Consorcio – Desarrollo de standards de computación 9
  7. Un poco de Historia… • Allá por los 60… –

    Renombrado a DBTG – Database Task Group – COBOL – CODASYL Data Model 10
  8. Un poco de Historia… • Allá por los 60… –

    Conceptos DDL y DML – Data Definition Language – Data Manipulation Language 11
  9. Un poco de Historia… • Allá por los 60… –

    Navigational Database – Registros localizados principalmente siguiendo referencias desde otros registros – Las referencias permitían localizar el lugar donde debía leerse el siguiente registro en la cinta 12
  10. Un poco de Historia… • Años 70 – Edgar Codd,

    IBM – Paper: A Relational Model of Data for Large Shared Data Banks – Aparece el concepto de Tabla 14
  11. Un poco de Historia… • Años 70 – Cada Tabla

    modeliza una Entidad – Normalización (ahorro de espacio) – Concepto de Relación – Mayor versatilidad – Concepto de Key o Clave 15
  12. Un poco de Historia… • Años 70 – System R

    – Primera Implementación BD Relacional – Mientras en Berkeley, Stonebraker y Wong comenzaron por su cuenta un proyecto de investigación… 16
  13. Un poco de Historia… • Años 70 – INGRES –

    Interactive Graphics Retrieval System – Evolución de System R – Código disponible a coste bajo – Lenguaje de acceso a datos QUEL 17
  14. Un poco de Historia… • Años 70 – QUEL –

    Query Language – INGRES y POSTGRES, implementaciones – POSTQUEL – PostgreSQL 18
  15. Un poco de Historia… • Años 70 – La disponibilidad

    del código de INGRES hizo que muchas organizaciones lo estudiaran y evolucionaran – SEQUEL, Structured English Query Language 19
  16. Un poco de Historia… • Años 70 – SEQUEL, predecesor

    de SQL – SQL, evolución – Structured Query Language – Standard ANSI 20
  17. Un poco de Historia… • Años 70 – System R

    evolucionó a un producto comercial denominado SQL/DS – SQL/DS, tiempo después, dio lugar a DB2 21
  18. Un poco de Historia… • Años 70 – Larry Ellison,

    Oracle – Basándose en los papers de System R, consiguió vencer a IBM al lanzar la primera versión comercial en 1978 26
  19. Un poco de Historia… • Años 80 – Personal Computer,

    PC – Ashton-Tate crea dBASE – SGBM para PCs – CP/M, Apple II y DOS – Modelo Cliente Servidor (arquitectura 2 capas) 28
  20. Un poco de Historia… • Años 80 – Lotus Development

    Corporation – Hoja de Cálculo – Lotus 1-2-3 29
  21. Un poco de Historia… • Años 90 – Programación Orientada

    a Objetos – Se empieza a tratar-interpretar los datos como objetos – Object-Relational Impedance Mismatch – Aparición de los ORMs (Object Relational Mappings) 30
  22. Un poco de Historia… • Años 90 – Arquitectura 3

    capas – Expansión de Internet y aparición de la Web 31
  23. Un poco de Historia… • Años 2000 – Aparece el

    Social Media – Expansión del e-Commerce – Ley de Moore: mayor capacidad de almacenamiento y procesado de información – Incremento masivo de los datos coleccionados 33
  24. Un poco de Historia… • Años 2000 – Incremento masivo

    de los datos coleccionados – Da lugar a un requerimiento continuo en el escalado 35
  25. Un poco de Historia… • Años 2000 – Al mismo

    tiempo aparecen y se popularizan las Metodologías de Desarrollo Ágil • Ciclos de desarrollo cortos • Constante evolución de requerimientos • Flexibilidad de diseño 36
  26. Un poco de Historia… • Años 2000 – El Modelo

    Relacional • Difícil de Evolucionar • Migraciones Lentas y Difíciles • En sincronía con la aplicación – Los programadores suelen tratar directamente con el ORM, perdiendo visibilidad de la capa de BD 37
  27. Un poco de Historia… • Años 2000 – Aunque los

    ORMs proporcionan una capa de abstracción que facilita y acelera el desarrollo, supone inherentemente una pérdida de rendimiento en la capa de datos, ya que las queries son autogeneradas y rara vez se manipulan para ser optimizadas 38
  28. Un poco de Historia… • Años 2000 – En este

    caldo de cultivo, aparece la necesidad de un nuevo paradigma en el mundo de las BD 39
  29. Un poco de Historia… • Años 2000 – Escalabilidad Horizontal

    – Más resultados en Tiempo Real – Desarrollo más veloz – Modelo de Datos Flexible – Bajo Costo Inicial – Bajo Costo de Operación 40
  30. Índice • Un poco de Historia… • ¿Qué es eso

    de NoSQL? • Diferencias entre bases de datos SQL y NoSQL – ACID – BASE • Bases de datos NoSQL – Tipos de bases de datos NoSQL – Neo4J – ElasticSearch – Redis – MongoDB 43
  31. ¿Qué es eso de NoSQL? • Primero, veremos una serie

    de Conceptos – Rendimiento – Alta Disponibilidad – Escalabilidad – Tolerancia a Fallos 44
  32. ¿Qué es eso de NoSQL? • 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 (misma capacidad) entonces tiene un mayor rendimiento 45
  33. ¿Qué es eso de NoSQL? • Alta Disponibilidad – Capacidad

    de un sistema de ofrecer cierto nivel de funcionalidad y servicio en sus operaciones de manera ininterrumpida – Generalmente esto require tener servidores redundantes, replicar la información y ofrecer tolerancia a fallos 46
  34. ¿Qué es eso de NoSQL? • Escalabilidad – Capacidad 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 – Capacidad de un sistema para reaccionar y adaptarse a la demanda sin pérdida de calidad – También aplica a los costes 47
  35. ¿Qué es eso de NoSQL? • Tipos de Escalabilidad –

    Vertical: el sistema aumenta su capacidad utilizando equipos más potentes y con más recursos – Horizontal: el sistema crece dividiendo su carga de trabajo entre más equipos de las mismas características 48
  36. ¿Qué es eso de NoSQL? • Tolerancia a Fallos –

    Capacidad de un sistema de poder recuperarse en caso de que alguno de sus componentes falle o deje de operar, sin pérdida de información 50
  37. ¿Qué es eso de NoSQL? • NoSQL (Not Only SQL)

    fue nombrado en 1998 por Carlo Strozzi para referirse a su base de datos no relacional • Subconjunto de bases de datos que difieren del modelo clásico de bases de datos típicamente por no usar SQL • Son usadas por Google, Amazon, Twitter, Facebook… para enfrentarse a problemas de rendimiento 51
  38. ¿Qué es eso de NoSQL? • Tanto las bases de

    datos relacionales (RBDMS) como las NoSQL son de Almacenamiento estructurado – En las bases de datos relacionales la estructura se define en las tablas – En las bases de datos no sql no es necesario definir una estructura, aunque si que es recomendable 52
  39. Índice • Un poco de Historia… • ¿Qué es eso

    de NoSQL? • Diferencias entre bases de datos SQL y NoSQL – ACID – BASE • Bases de datos NoSQL – Tipos de bases de datos NoSQL – Neo4J – ElasticSearch – Redis – MongoDB 53
  40. Diferencias entre bases de datos SQL y NoSQL SQL NoSQL

    Permite unir tablas con JOIN No permite el uso de JOINS o están muy limitados Dificultad para distribuir los datos Facilidad para distribuir los datos Escalabilidad vertical (mejorar potencia del servidor para obtener mejores resultados) Escalabilidad horizontal (repartir / distribuir base de datos en diferentes servidores) Los datos se estructuran siguiendo los esquemas de las tablas Los datos no siguen ningún esquema Posibilidad de crear restricciones, triggers, claves foráneas… sobre los datos Estas utilidades no suelen estar disponibles 54
  41. ACID • Características que tiene que garantizar una base de

    datos a la hora de realizar una transacción correctamente Atomicity Asegurar que la transacción se realice o no, sin quedar a medias ante fallos Consistency Asegurar el estado de validez de los datos en todo momento Isolation Asegurar independencia entre transacciones Durability Asegurar la persistencia de la transacción ante cualquier fallo 58
  42. BASE • Acrónimo análogo a ACID para NoSQL donde prima

    la disponibilidad frente a la consistencia • Características comunes entre todas las implementaciones de bases de datos distribuidas no relacionales Basically Available Disponibilidad como prioridad Soft state Delegación de la consistencia de datos a un motor externo Eventual consistency Se intenta lograr un estado consistente 60
  43. Índice • Un poco de Historia… • ¿Qué es eso

    de NoSQL? • Diferencias entre bases de datos SQL y NoSQL – ACID – BASE • Bases de datos NoSQL – Tipos de bases de datos NoSQL – Neo4J – ElasticSearch – Redis – MongoDB 62
  44. Tipos de bases de datos NoSQL Documentales Datos semi-estructurados en

    documentos (XML, YAML, JSON y BSON) Grafo Datos estructurados como nodos relacionados entre si Clave / valor Datos estructurados como clave / valor Familia de columnas Datos estructurados en columnas donde cada fila puede tener una configuración diferente 63
  45. Neo4j • Estructura de datos orientada a Grafos • Posibilidad

    de gestionar millones de grafos/nodos/relaciones/propiedades en una sola máquina • Completamente transaccional • Máxima escalabilidad • Software libre 65
  46. Neo4j • Un Grafo guarda datos en Nodos que tienen

    Propiedades – Una Propiedad es una relación clave / valor donde la clave es un identificador de tipo string • Los Nodos se organizan en Relaciones que también tienen Propiedades • Un Índice mapea Propiedades tanto de Nodos como de Relaciones para conseguir consultas de datos más eficientes 66
  47. 67 GRAFO RELACIÓN •Propiedad1:Valor •Propiedad2:Valor •…. •PropiedadN:Valor Nodo •Propiedad1:Valor •Propiedad2:Valor

    •…. •PropiedadN:Valor Nodo •Propiedad1:Valor •Propiedad2:Valor •…. •PropiedadN:Valor
  48. 68

  49. Neo4j - CYPHER • CYPHER: Lenguaje de consultas de Neo4j

    para consultar los grafos • Referenciar un nodo (nodo) • Uso de Labels para identificar los nodos (label:nodo) 70 Brewery Beer Style Brewery Geocode (BreweryGeocode) (Brewery) (Beer) (Style) (bg:BreweryGeocode) (br:Brewery) (be:Beer) (st:Style)
  50. Neo4j - CYPHER • Relaciones entre nodos simples --> ó

    <-- • Identificando el nombre de la relación –[:RELACION]-> 71 Brewery Beer Style Brewery Geocode <-- <-- <-- <-[:TIENE_FABRICA]- <-[:ESTILIZA]- -[:FABRICA]->
  51. Neo4j - CYPHER 72 (Brewery) –[: FABRICA]-> (Beer) (cerveceria:Brewery) -[relacion:

    FABRICA]-> (cerveza:Beer) cerveceria, relacion, cerveza: Labels Brewery, Beer: Nodos FABRICA: Relación Brewery Beer FABRICA
  52. Neo4j - CYPHER MATCH (style:Style) --> (beer:Beer) <-[:FABRICA]- (brewery:Brewery) -

    [:TIENE_FABRICA]-> (geocode:BreweryGeocode) WHERE beer.name = 'Estrella Damm' RETURN beer, brewery, geocode, style 73
  53. Elastic Search • Permite indexar y analizar grandes cantidades de

    datos de manera distribuida • Almacena documentos pudiendo estructurar su contenido con un schema / mapping • Indexa los datos en tiempo real • Utiliza JSON y un API web RESTFul • Permite agrupar / facetar el contenido de los documentos 74
  54. Elastic Search • Un Cluster almacena un conjunto de Nodos

    que mantienen la información distribuida • Un Nodo almacena la información y se encara de las tareas de indexación – No hay límite de Nodos • Un Índice es una colección de Documentos con características similares 75
  55. Elastic Search - Consultas simples • Consultas a través de

    llamadas RESTFul http://localhost:9200/<index>/<type>/<id> Index: nosqlbeers Type: beer, brewery, style, brewerygeocode Id: Identificador del documento http://localhost:9200/nosqlbeers/beer/5151 77
  56. Elastic Search - Consultas simples • Ejemplos de busquedas –

    Busqueda sobre el índice nosqlbeers • http://localhost:9200/nosqlbeers/_search?q=* – Busqueda sobre el tipo beer • http://localhost:9200/nosqlbeers/beer/_search?q=* – Busqueda sobre el tipo beer, por el parámetro name • http://localhost:9200/nosqlbeers/beer/_search?q=nam e:Estrella 78
  57. Elastic Search – Consultas complejas • Querys con datos extra

    en formato JSON como rangos y agregaciones • Imposible pasar esos parámetros por URL – Uso de curl desde línea de comandos – Plugin Sense de Elastic Search para Chrome 79
  58. Elastic Search – Consultas complejas • Agrupación de cervezas por

    su graduación POST /nosqlbeers/beer/_search?pretty { "size": 0, "aggs": { "Agrupacion_Graduacion_Cervezas": { "terms": { "field": "abv" } } } } • Consulta en SQLServer: SELECT COUNT(*) from beers GROUP BY abv ORDER BY COUNT(*) DESC 80
  59. Elastic Search – Consultas complejas • Rango de cervezas por

    su graduación: POST /nosqlbeers/beer/_search?pretty { "size": 0, "facets" : { "Rango_Cervezas_Graduacion" : { "range" : { "field" : "abv", "ranges" : [ { "to" : 5 }, { "from" : 5, "to" : 8 }, { "from" : 8, "to" : 10 }, { "from" : 10, "to" : 20 }, { "from" : 20, "to" : 50 }, { "from" : 50 } ] } } } } 81
  60. Redis • Base de datos de tipo clave / valor

    • Almacena los datos en memoria RAM • Permite poner una fecha de expiración a los datos • Se usa como memoria caché para cargas pesadas por su velocidad 82
  61. Redis • Posee diferentes Nodos donde se almacenan los datos

    en formato clave / valor 83 DB 0 DB X DB 1 •Clave1 / valor •Clave2 / valor … •ClaveN / valor
  62. Redis - Comandos • SELECT numero (0 al 15): Selecciona

    el nodo de redis datos donde se van a trabajar • KEYS cadena: busca las claves que coincidan con la cadena introducida • SET clave valor: almacena los datos en redis • GET clave: devuelve el valor almacenado en esa clave. Nil o -1 en caso de que no haya datos • DEL clave: borra la clave • CUIDADO: – Es sensible a mayúsculas y minúsculas – Si la clave existe la remplaza 84
  63. Redis - Comandos • Expire clave segundos: Establece los segundos

    que va a permanecer la clave en redis • Ttl clave: Obtiene el tiempo en segundos que le queda a la clave antes de desaparecer • lpush clave valor: Agrega el valor a la lista por la izquierda • Rpush clave valor: Agrega el valor a la lista por la derecha • Lrange clave inicio fin: Devuelve la lista de elemetos del inicio al fin 85
  64. MongoDB • Base de datos orientada a Documentos – Documentos

    JSON – Esquema flexible • Arquitectura Escalable – Auto-sharding – Replicación y Alta Disponibilidad 86
  65. MongoDB • Modelo de datos poderoso y flexible, adecuado a

    las necesidades modernas • Conversión transparente de objetos en la aplicación a documentos JSON • Flexiblidad para modelos de datos dinámicos • Mejor localidad de datos 87
  66. MongoDB • Escalabilidad lineal • Alta Disponibilidad • Incremento de

    capacidad sin downtime • Transparente para la aplicación • Redundancia de datos 88