Documentos de Académico
Documentos de Profesional
Documentos de Cultura
2
BBDD Orientada a Columnas
Tabla
Event Date Count
Disco
3
BBDD Columnar o Wide-Column
Tabla
row1 col1 col2
4
BBDD Columnar o Wide-Column
Disco
c1 c2 c1 c2 c1 c2 c1 c2 c1 c2 c1 c2
row1 row2 row3
5
En realidad no son
columnas, son diccionarios…
o diccionarios de
diccionarios
6
(rowkey, columnkey, timestamp) → value
7
8
uy.edu.ort.www
html link:ort.edu.uy/postgrados
<html lang="es"><head><link rel="shortcut icon"
href="https://www.ort.edu.uy/innovafront/theme/si/favicon.
Postgrados
ico" type="image/x-icon" /><meta name="description"
content="Con más de 11.000 estudiantes, ORT es
la universidad privada más importante de
Uruguay, elegida por quienes desean la mejor
opción para estudiar en Uruguay." /><meta
name="google-site-verification"
content="s4n1XH8-UqK-XqTVyccEWcvqS5S-EYOtMQP9
HT-1P6I" /><meta name="robots" content="index, follow"
/><meta name="generator" content="InnovaPortal -
Professional Content Management and Portal...
10
11
12
13
14
Cada dos semanas
https://conferences.oreilly.com/strata/strata-ca-2016/public/schedule/detail/46839 15
https://conferences.oreilly.com/strata/strata-ca-2016/public/schedule/detail/46839 16
Desafíos
● Migración total a AWS
● Eliminar SPoF de Oracle
● Eliminar tiempos muertos en cambios de
esquemas
● Soportar más de 2 mil millones de lecturas y 4
mil millones de escrituras por día
17
¿Cómo resolvemos esto?
18
● Modelo de datos de BigTable
● Modelo distribuido de Dynamo
● El sistema puede escribir y leer en cualquier nodo
(no hay single point of failure)
● Protocolo “chisme”: un nodo comparte sus datos y
los datos de otros nodos
● Hay un log de commits
● Escribe en un espacio de memoria y al llenarse, baja
a disco
19
● Se puede elegir C ó A a nivel de operación
● Esquema flexible, estructurado, semi
estructurado, no estructurado
● Las modificaciones de esquema son online y sin
tiempos muertos
● Ofrece CQL como lenguaje de consultas (muy
similar a SQL en sintaxis pero no en ejecución)
● Soporta mucha escritura
20
● No hay joins (no hay normalización ni FKs)
● No soporta agregación
● No está optimizada para muchos UPDATES o
DELETE
21
Column: unidad básica, nombre y valor (más timestamp)
RDBMS: Columna
22
Column (en realidad es una celda)
columnkey
rowkey valor timestamp
Row
Column Family
Keyspace
23
24
CQL y entidades
25
CREATE KEYSPACE mabd
WITH REPLICATION =
{
'class': 'SimpleStrategy',
'replication_factor': 3
};
26
Producto(Id, Empresa, Nombre, Categoria);
28
DROP TABLE Producto;
Id:Nombre Id:Categoría
Empresa val val
30
DROP TABLE Producto;
31
Clustering Key: ¿Cómo se agrupan los registros?
Id:Nombre Id:Categoría
País:Empresa val val
33
Podemos usar Cassandra para registrar eventos basados en tiempo:
INSERT INTO Evento (Id, Cuando, Obs) VALUES (1, dateof(now()), 'Llovió');
INSERT INTO Evento (Id, Cuando, Obs) VALUES (2, dateof(now()), 'Tronó');
INSERT INTO Evento (Id, Cuando, Obs)
VALUES (2, dateof(now()), 'Nevó') USING TTL 10;
34
Escritura y lectura
35
● Commit log: Log de operaciones de escritura, solo se agrega
● Memtable: Estructura en memoria que contiene los datos escritos
● SSTable: Archivos inmutables en los que Cassandra persiste los datos
en disco
https://docs.datastax.com/en/cassandra-oss/3.0/cassandra/dml/dmlHowDataWritten.html 36
Flujo escritura/actualización/eliminación
● Se tratan como un UPSERT
● Siempre se escribe
● Primero se escribe en el commit log
● Luego en la memtable
● Pasado cierto tiempo o alcanzado determinado umbral la memtable
se baja a disco (SSTable)
● Las operaciones DELETE solo insertan una marca (tombstone)
● Cada determinado tiempo se compactan las SSTable (se consolidan
en menos archivos y se quitan los eliminados)
● Solo se escribe la versión más nueva del registro
37
38
https://docs.datastax.com/en/cassandra-oss/3.0/cassandra/dml/dmlAboutReads.htm
Modelado
39
● Por más que lo parezca no es tabular
● No hay joins (no hay normalización ni FKs)
● No soporta agregación
● No soporta escaneo de datos AKA FULL SCAN
● No está optimizada para muchas actualizaciones
o eliminaciones
● La partition key es obligatoria en las consultas
● No se puede consultar por atributos secundarios
40
Se modela pensando en los
patrones de acceso a los
datos
41
Todos los productos de una empresa
44
¿Qué pasa cuando n
cambia?
45
Hay que disminuir los
remapeos
46
Hashing consistente
47
Solo se remapean
n/m claves promedio
n = cantidad de claves
m = cantidad de nodos
48
● Se crea un “anillo”
● Las funciones de hash retornan valores en un rango
MIN - MAX
● El anillo se une en los extremos MIN - MAX
● La función de hash se aplica al servidor (nombre por
ejemplo)
● La función de hash se aplica a la clave de los datos
● Se recorre en sentido horario
49
Tenemos 16 nodos y la
función MABD_HASH
retorna en el rango
-80:79
50
MIN - MAX
51
MABD_HASH(“BDNR”) = 45
52
{BDNR}
{BDNR}
53
¿Qué pasa si se cae el nodo 5?
MABD_HASH(“BDNR”) = 45
54
{BDNR}
{BDNR}
55
Lo que iba al 5 ahora va al 6.
El resto de cluster no cambió.
56
Lo mismo aplica para agregar
nodos
57