Está en la página 1de 57

Columnares – Wide Column

No confundir con las BBDD


orientadas a columnas

2
BBDD Orientada a Columnas
Tabla
Event Date Count

Disco

3
BBDD Columnar o Wide-Column
Tabla
row1 col1 col2

row2 col1 col2 col1 col2 col1 col2

row3 col1 col2 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&aacute;s de 11.000 estudiantes, ORT es
la universidad privada m&aacute;s importante de
Uruguay, elegida por quienes desean la mejor
opci&oacute;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...

De esta forma es más fácil agrupar y distribuir


9
uy.gabitoju.www
html link:gabitoju.uy/datalab/ link:gabitoju.uy/datalab/gnr.html
<html> Data Lab Appetite for Stats: Insights on the world's most dangerous
. band
.
.
</html>

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

Column family: un conjunto de columnas


RDBMS: Tabla

Keyspace: un contenedor de column families


RDBMS: Base de datos o esquema

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);

CREATE TABLE Producto (


Id timeuuid PRIMARY KEY,
Empresa int,
Nombre varchar,
Categoria varchar
);

INSERT INTO Producto(Id, Empresa, Nombre, Categoria) VALUES


(now(), 1, 'Coca Cola', 'Refresco');
27
Empresa Nombre Categoría
Id val val val

Partition Key: ¿A qué nodo va este registro?

28
DROP TABLE Producto;

CREATE TABLE Producto (


Id timeuuid,
Empresa int,
Nombre varchar,
Categoria varchar,
PRIMARY KEY (Empresa, Id)
);

INSERT INTO Producto(Id, Empresa, Nombre, Categoria) VALUES


(now(), 1, 'Coca Cola', 'Refresco');
29
Clustering Key: ¿Cómo se agrupan los registros?

Id:Nombre Id:Categoría
Empresa val val

Partition Key: ¿A qué nodo va este registro?

30
DROP TABLE Producto;

CREATE TABLE Producto (


Id timeuuid,
Empresa int,
Nombre varchar,
Categoria varchar,
Pais varchar,
PRIMARY KEY ((Pais, Empresa), Id)
);
INSERT INTO Producto(Id, Empresa, Nombre, Categoria, Pais) VALUES (now(), 1, 'Coca
Cola', 'Refresco', 'UY');
INSERT INTO Producto(Id, Empresa, Nombre, Categoria, Pais) VALUES (now(), 1, 'Coca
Cola', 'Refresco', 'CL');

31
Clustering Key: ¿Cómo se agrupan los registros?

Id:Nombre Id:Categoría
País:Empresa val val

Partition Key: ¿A qué nodo va este registro?


UY:1 y AR:1 pueden ir a distintos nodos
Esta fila y la anterior son “Wide rows”: n columnas
32
PRIMARY KEY(Att) → Partition Key

PRIMARY KEY(Att1, Att2) → Att1 Partition Key


→ Att2 Clustering Key

PRIMARY KEY( (Att1, Att2), Att3) → Att1, Att2 Partition Key


→ Att3 Clustering Key

33
Podemos usar Cassandra para registrar eventos basados en tiempo:

CREATE TABLE Evento (


Id INT,
Cuando timestamp,
Obs varchar,
PRIMARY KEY (Id, Cuando)
) WITH CLUSTERING ORDER BY (Cuando DESC);

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

Todas las empresas de un producto

Las películas de acción favoritas de


un usuario
42
Cluster
43
slot = MD5(key) % n

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ó.

Con 1000 claves la cantidad afectada es:


1000 / 16 = 62,5 claves

56
Lo mismo aplica para agregar
nodos

57

También podría gustarte