Arquitectura de Sistemas de Software Departamento de Ciencia de la Computación Escuela de Ingeniería – PUC Hans Findel {hjfindel@uc.cl} Sem II – 2020 IIC2173 – Arquitectura de Sistemas de Software NoSQL NoSQL: Umbrella term Alternativa a DBs relacionales basadas en SQL Not Only SQL SQL es un DSL declarativo: ! “declaro que quiero que el sistema haga” y no de forma procedural ■ Ej: SELECT * FROM events WHERE day=3; ! Ocultar la complejidad de la organización de la data al programador ! Solo expertos aprenden a “tunnear" la DB Modelo Relacional: ! ! ! ! Entidades altamente estructuradas con relaciones estrictas entre ellas Complejidad y eficiencia impredecible Impone un modelo de datos que no siempre sirve (Objetos) Crecimiento-> Distribución física -> Replicación de datos (desnormalización) -> Ya no es relacional NoSQL Meta: ! Simplificar la manipulación de datos con tal de poder predecir el performance de las queries ! La complejidad de las queries las maneja el developer SQL: ! ACID (Atomicity, Consistency, Isolation, Durability) NoSQL: BASE ! Se relajan las propiedades acidas Consideraciones Modelos de datos y queries: ■ Filas? Objetos? Estructuras de datos? Documentos? Agregación? Durabilidad: ■ El cambio en un valor debe persistirse inmediatamente? En varias máquinas? Escalabilidad, Particiones, Consistencia: ■ ■ ■ Un solo disco o varios? Read-heavy? Write-heavy? Cómo se coordinan los múltiples servidores? Transacciones: ■ Qué propiedades ácidas son necesarias? Carga basada en análisis de comportamiento de usuarios? ¿Por qué? Crecimiento masivo de datos ■ Exabytes x año (2010) Conectividad ■ ■ ■ Web 1.0: Texto, hipertexto, wikis, RSS Web 2.0: Blogs, Contenido generado por usuario, tagging, RDF Web 3.0: Ontologías? Folksonomias? GGG (global Giant Graph) Datos semi-estructurados Arquitectura Limitaciones en el performance de RDBMS Paréntesis CAP Theorem CAP Theorem Eventualmente Consistente… SQL o NoSQL? NoSQL 4 categorias emergentes de NoSQL Tabla Grafo AllegroGraph (SPARQL) DEX (Java, C#) Neo4J (Java) Key-Value BigTable Apache Hadoop Apache Hbase Hypertable Objetos Eventualmente consitente Dynamo Cassandra Dynomite Voldemort Documentos LotusNotes (LotusScript) Apache CouchDB (Erlang) MongoDB (C++) MarkLogic (Xquery) Cacheado en RAM Memcached Oracle Coherence Velocity Cacheado en Disco BigTable MongoDB MemCacheDB Key-based Modelo de datos: ! Colección global de pares <key-value> Foco: Escalar enormes cantidades de datos Manejar cargas masivas Basadas en Dynamo (Amazon) ! Anillo de partición (hash) y replicación Dynamo, Voldemort, Dynomite, Azure, Memcache, BerkeleyDB, … Dynamo: anillo de Hash Key A A A B 1 A, B, ... 5 B, ... 4 B, … 2 A, C, ... 3 A, ... Node 1 2 3 1 Client Request Rendering Page Ruteo Agregador Ruteo Servicios Tabla (columnar) Tablas similares a RDBMS, pero maneja datos semiestructurados Google BigTable Modelo de datos: ➔ Familias de columnas ➔ACL ! Datos tienen Keys de : fila, columna, tiempo, índice ! Rango de filas (tableta) ➔ tabla ➔ distribución ! Columnas BigTable, HBase, Hypertable, Cassandra Google BigTable Cubo tridimensional: <rowKey, columnKey, Timestamp> Des-agregación: Tableta = rango de filas (SSTable) Tablet 64K block Start:aardvark 64K block 64K block End:apple SSTable Index 64K block 64K block 64K block SSTable Index Google BigTable Cubo tridimensional: <rowKey, columnKey, Timestamp> Des-agregación: Tabla = conjuntos de tabletas Tablet aardvark SSTable apple SSTable Tablet apple_two_E SSTable SSTable boat Google BigTable Cubo tridimensional: <rowKey, columnKey, Timestamp> Des-agregación: Servidores = conjuntos de tablas Grafos Inspiradas en la teoría de grafos Modelo de datos: Grafo de propiedades ! Nodo: First-class citizen ! Relaciones/Arcos entre Nodos ! Pares llave-valor para ambos ! Arcos pueden tener etiquetas o tipos Neo4j, AllegroGraph… Grafos User writtenBy memberOf Juan Blog Comment good authoredBy lang bad ok commentOn publishedOn Entry sql xml Xmen fun Documentos Similar a Key-Value pero la DB sabe cual es el value ! El value es un documento Inspirada en Lotus Notes Modelo de datos: ! Colecciones ■ de colecciones de pares llave-valor Asi no hay colisiones de keys ! Indices ! Bases de datos Documentos suelen estar versionados. MongoDB, CouchDB, Redis, … Formato de almacenamiento: Documentos JSON ■ Documentos BSON Replicación y alta disponibilidad Auto-Sharding ! Escalamiento horizontal (documentos: es como si fuera por filas no por columnas) Querying, indexing, updating ■ ■ Update: In-place, fast Indices en cualquier atributo Map/Reduce Grid File System Admin UIs: phpMoAdmin Modelo Relacional Vs Documentos Modelo Relacional Vs Documentos RDBMS Table, View Row Index Join Partition Partition Key Mongo Collection JSON Document Index Embedded Shard Shard Key