Subido por CHRISTIAN EILERS

IIC2173-10-NoSQL

Anuncio
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
Descargar