13 ORM - NoSQL + MongoDB y Full Text Search & Retrieval
13 ORM - NoSQL + MongoDB y Full Text Search & Retrieval
Contamos con:
• Un DBMS
• Django (Python):
Framework de alto nivel que fomenta el desarrollo rápido y el
diseño limpio. Incluye muchas características integradas,
como autenticación, administración, y ORM.
ORM
ORM
Un ORM (Object-Relational Mapping) es una técnica de
programación que facilita la interacción entre modelos de
datos en un lenguaje orientado a objetos y una base de datos
relacional. Este traduce operaciones CRUD (Create, Read,
Update, Delete) de objetos en el código a comandos SQL.
Tiene las siguientes características:
• Mapeo automático: Genera tablas y columnas desde clases y
atributos.
• Consultas expresivas: Construye consultas complejas en el
lenguaje de programación.
• Validación y restricciones: Asegura datos consistentes y
válidos.
• Gestión de relaciones: Maneja relaciones entre entidades (uno a
uno, uno a muchos, muchos a muchos).
ORM - Ejemplo
Un ORM permite linkear el código a una base de datos, veamos un ejemplo en
SQLAlchemy y Python:
ORM - Ejemplo
Se conecta a la
BDD
Se hace la
tabla y se sube
a la base de
datos con
SQLAlchemy
Se
añade
un User
Se hace una
consulta
SQL en frameworks web
SQL en frameworks web
class Musician(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
instrument = models.CharField(max_length=100)
class Album(models.Model):
artist = models.ForeignKey(Musician, on_delete=models.CASCADE)
name = models.CharField(max_length=100)
release_date = models.DateField() n
um_stars = models.IntegerField()
ORM
Ejemplo - Consultas
• Tiendas(id, nombre)
¿Cómo lo solucionamos?
Migraciones - Ejemplo
Una opción es:
CREATE TABLE Precios(
id_cerveza INT NOT NULL,
id_tienda INT NOT NULL,
precio DECIMAL(10, 2),
FOREIGN KEY id_cerveza REFERENCES Cervezas(id),
FOREIGN KEY id_tienda REFERENCES Tiendas(id)
)
return render(
request,
"my_view.html",
{"article": article, "author": article.author}
)
Las NoSQL
NoSQL
Término común para denominar bases de datos con:
• Menos esquema
128
Consistencia
¿Cuántos userID hay empezando con "A"?
128
128
128
Consistenci
a
¿Cuántos userID hay empezando con "A"?
128
128
128
Consistencia
¿Cuántos userID hay empezando con "A"?
128
128
d
re
128
la
en
a
m
le
ob
pr
Availability
¿Cuántos userID hay empezando con "A"?
128
Availability
¿Cuántos userID hay empezando con "A"?
Availability
¿Cuántos userID hay empezando con "A"?
130 (quizás)
Partition tolerance
¿Cuántos userID hay empezando con "A"?
128
Partition tolerance
¿Cuántos userID hay empezando con "A"?
128
d
re
la
en
a
m
le
ob
pr
Teorema
CAP
Plantea que para una base de datos distribuida es imposible
mantener simultáneamente estas tres características:
• Consistency
• Availablity
• Partition tolerance
Teorema
CAP
P es dado en cualquier sistema distribuido. Entonces, el
Teorema CAP nos dice que hay que elegir entre:
• Consistency
• Availablity
38
AP vs CP
¿Cuántos userID hay empezando con "Z"?
d
re
la
en
a
m
le
ob
pr
AP vs CP
¿Cuántos userID hay empezando con "Z"?
+ Z123
d
re
la
en
Agregar user
a “Z123”
m
le
ob
pr
+ Z123
En un sistema
AP
¿Cuántos userID hay empezando con "Z"?
+ Z123
38
d
re
la
en
¿Cuántos userID Agregar user
a “Z123”
empiezan con Z?
m
le
ob
pr
+ Z123
En un sistema
CP
¿Cuántos userID hay empezando con "Z"?
+ Z123
error
d
re
la
en
¿Cuántos userID Agregar user
a “Z123”
empiezan con Z?
m
le
ob
pr
+ Z123
BASE
En la práctica, sistemas distribuidos fijan el P, y balancean
entre C y A, sin elegir uno exclusivamente. Pero se tiene el
paradigma BASE:
Basically Available: El sistema siempre está disponible para
responder a las solicitudes, aunque algunas respuestas
pueden no ser completas o recientes.
Soft State: El estado del sistema puede cambiar con el
tiempo sin necesidad de recibir nuevas entradas, reflejando
una actualización asincrónica y flexible.
Eventually Consistent: Con el tiempo, todos los nodos del
sistema llegarán a un estado consistente, permitiendo alta
disponibilidad y tolerancia a fallos, a costa de no tener
consistencia inmediata.
Consistencia eventual
problema en la red
Consistencia eventual
+ Z123
problema en la red
Consistencia eventual
Usuarios con uID en "Z":
38
+ Z123
problema en la red
+ Z123
+ Z123
Consistencia eventual
Usuarios con uID en "Z":
38
+ Z123
+ Z123
• BD key-value
• BD de grafos
• BD de documentos
Sabores de
NoSQL
Volumen
de Datos BD key- value
BD de
documentos
BD de grafos
Complejidad
BD Key - Value
Key Value
Chile Santiago
Inglaterra Londres
Escocia Edinburgo
Francia Paris
Alemania Berlin
… …
BD Key - Value
• Son grandes tablas de hash persistentes
cartID value
Especializadas en documentos
Key JSON
{
"uid": 1,
"name": "Adrian",
"last_name": "Soto",
1
"ocupation": "Delantero de Cobreloa",
"follows": [2,3],
"age": 24
}
2 …
… …
JSON
Su nombre viene de JavaScript Object Notation
{
“nombre": “Matías”
}
• Valores booleanos
• null
JSON - Sintaxis
Los objetos se escriben entre {} y contienen una
cantidad arbitraria de pares key - value
{
“nombre": “Matías”, “apellido": “Jünemann”
}
JSON - Sintaxis
{
“profesores”: [
{“nombre”: “Juan”, “apellido": “Reutter”},
{“nombre”: “Cristian”, “apellido": “Riveros”},
{“nombre”: “Marcelo”, “apellido": “Arenas”}
]
}
JSON vs SQL
SQL:
• Esquema de datos
JSON:
• Más flexible, no hay que respetar necesariamente un
esquema
• Human - Readable
BD de documentos:
¿para qué?
Especializadas en documentos: almacenan muchos
documentos JSON
… … …
Courses
courseID name year
IIC2413 Databases 2020
IMT3830 Game Theory 2020
… … …
Takes
courseID StudentID
IIC2413 1
IIC2413 2
IMT3830 2
… …
Caché de BD SQL
• Búsquedas simples
BD SQL:
• Necesito ACID
Consistencia Eventual
BD Documentos y BASE
• Distintas aplicaciones en una misma base de datos
acceden a distintos documentos al mismo tiempo
Key JSON
{
"uid": 1,
"name": "Adrian",
60bfd90e002ce228636e506b "last_name": "Soto",
"ocupation": "Delantero de Cobreloa",
"follows": [2,3],
"age": 24
}
60bfd90e002ce228636e5215 …
… …
MongoDB Colección: una agrupación de
documentos similares
Usuarios
Key JSON
{
"uid": 1,
"name": "Adrian",
60bfd90e002ce228636e506b "last_name": "Soto",
"ocupation": "Delantero de Cobreloa",
"follows": [2,3],
"age": 24
}
60bfd90e002ce228636e5215 …
… …
Base de Datos: contienen
Usuarios
Key JSON
… …
Mensajes
Key JSON
… …
Likes
Key JSON
… …
MongoDB
Mensajería
Compras
WikiData
Chile 1 0 1
of 1 1 1
town 0 0 1
commune 0 1 0
...
Text Search en MongoDB
db.colName.createIndex({"attributeName":"text"})
Principio 2:
Term Frequency:
• FD(t) = Número de veces que aparece t en D
Documento D3: "Si luchas contra el mundo, ponte del lado del mundo"
• Total de palabras: 10
• TF("ojo") = 0/10 = 0
• TF("mundo") = 2/10 = 0.2
TF – IDF: Ejemplo
Paso 2, calcular IDF: El IDF se calcula como el logaritmo del
número total de documentos dividido por el número de
documentos que contienen el término.
• Total de documentos: 3
Reducers:
Entrada Salida
Máquinas Máquinas
map reduce
Map Reduce - Ejemplo
¿Cuántas veces cada palabra ocurre en un archivo de texto
grande? Para saberlo, tenemos:
Map:
• Recibe un pedazo de texto
• Por cada palabra, emite el par (palabra, número de
ocurrencias)
Reduce:
• Cada reduce recibe todos los pares asociados a la misma
palabra
• Junta todos estos pares y suma las ocurrencias
Máquina map1 Máquina reduce1
INPUT
hola que Máquina map2 Palabras A-M
hola año
zzz hola
que zzz
que Máquina reduce2
Máquina map3
Palabras N-Z
Máquina map1
Máquina reduce1
SEPARAR
INPUT
Máquina map2
hola que hola Palabras A-M
año zzz hola
que zzz que
Máquina reduce2
Máquina map3
Palabras N-Z
SEPARAR Máquina map1
Máquina reduce1
INPUT
Input:
hola
que
hola
Máquina map3
Input:
que
zzz
que
Palabras N-Z
MAP
Máquina map1 Máquina reduce1
Input:
Input
Cómputo Output:
hola
(hola,2)
que
(que,1)
hola
Máquina map3
Input:
que Cómputo Output:
zzz (que,2)
que (zzz,1)
Palabras N-Z
SHUFFLE
Máquina map1
Máquina reduce1
Input:
Cómputo Output:
hola
(hola,2)
Input
que
(que,1)
hola
Máquina map3
Input:
Cómputo Output:
que
(que,2)
zzz
(zzz,1)
que
Palabras N-Z
SHUFFLE
Máquina map1
Máquina reduce1
Input:
Cómputo Output: Input:
hola
(hola,2) (hola,2)
Input
que
(que,1) (año,1)
hola
(hola,1)
Input:
Máquina map3 (que,1)
(zzz,1)
(que,2)
Input: (zzz,1)
que Cómputo Output:
(que,2)
zzz
(zzz,1)
que
Palabras N-Z
REDUCE
Máquina map1
Máquina reduce1
Input:
Cómputo Output: Input: Sorted:
Input
hola
(hola,2) (hola,2) (año,1)
que
(que,1) (año,1) (hola,1)
hola
(hola,1) (hola,2)
Input: Sorted:
Máquina map3 (que,1) (que,1)
(zzz,1) (que,2)
(que,2) (zzz,1)
Input: (zzz,1) (zzz,1)
que Cómputo Output:
(que,2)
zzz
(zzz,1)
que
Palabras N-Z
REDUCE
Máquina map1
Máquina reduce1
Input:
Input
Cómputo Output: Input: Sorted: Cómputo:
hola
(hola,2) (hola,2) (año,1) (año,1)
que
(que,1) (año,1) (hola,1) (hola,3)
hola
(hola,1) (hola,2)
Input: Sorted:
Cómputo:
Máquina map3 (que,1) (que,1)
(que,3)
(zzz,1) (que,2)
(zzz,2)
(que,2) (zzz,1)
Input: (zzz,1) (zzz,1)
que Cómputo Output:
(que,2)
zzz
(zzz,1)
que
Palabras N-Z
Máquina map1
Máquina reduce1
Input:
Input
Cómputo Output: Input: Sorted: Cómputo:
hola
(hola,2) (hola,2) (año,1) (año,1) OUTPUT
que
(que,1) (año,1) (hola,1) (hola,3)
hola
(hola,1) (hola,2)
Input: Sorted:
Cómputo:
Máquina map3 (que,1) (que,1)
(que,3)
(zzz,1) (que,2)
(zzz,2)
(que,2) (zzz,1)
Input: (zzz,1) (zzz,1)
que Cómputo Output:
(que,2)
zzz
(zzz,1)
que
Palabras N-Z
Input Map Shuffle Reduce Output
Máquina map1
Máquina reduce1
Input:
Cómputo Output: Input: Sorted: Cómputo:
hola
(hola,2) (hola,2) (año,1) (año,1)
que
(que,1) (año,1) (hola,1) (hola,3)
hola
(hola,1) (hola,2)
Input: Sorted:
Cómputo:
Máquina map3 (que,1) (que,1)
(que,3)
(zzz,1) (que,2)
(zzz,2)
(que,2) (zzz,1)
Input: (zzz,1) (zzz,1)
que Cómputo Output:
zzz (que,2)
que (zzz,1)
Palabras N-Z
Map Reduce - Ejemplo: Join
¿Cómo hago un join con Map Reduce?
Máquina map1
R A B
1 1
Máquina reduce llave 2
1 3
3 2
3 3
Máquina map2
S B C
Máquina reduce llave 3
2 4
2 7
3 8
3 9
INPUT MAP
Máquina reduce llave 1
Máquina map1
R A B
Input:
1 1 (R,1,1)
(R,1,3) Máquina reduce llave 2
1 3 (R,3,2)
(S,2,4)
3 2
3 3
Máquina map2
S B C
Máquina reduce llave 3
2 4
2 7
3 8
3 9
INPUT MAP
Máquina reduce llave 1
Máquina map1
R A B
Input:
1 1 (R,1,1)
(R,1,3) Máquina reduce llave 2
1 3 (R,3,2)
(S,2,4)
3 2
3 3
Máquina map2
S B C
Input: Máquina reduce llave 3
2 4 (R,3,3)
(S,2,7)
2 7 (S,3,8)
3 8 (S,3,9)
3 9
INPUT MAP
Máquina reduce llave 1
Máquina map1
R A B
Input: Output:
Cómputo 1: (R,1)
1 1 (R,1,1)
(R,1,3) 3: (R,1) Máquina reduce llave 2
1 3 (R,3,2) 2: (R,3)
(S,2,4) 2: (S,4)
3 2
3 3
Máquina map2
S B C
Input: Output: Máquina reduce llave 3
2 4 (R,3,3) Cómputo 3: (R,3)
(S,2,7) 2: (S,7)
2 7 (S,3,8) 3: (S,8)
3 8 (S,3,9) 3: (S,9)
3 9
INPUT MAP SHUFFLE
Máquina reduce llave 1
Input:
Máquina map1 1: (R,1)
R A B
Input: Output:
Cómputo 1: (R,1)
1 1 (R,1,1)
(R,1,3) 3: (R,1) Máquina reduce llave 2
1 3 (R,3,2) 2: (R,3)
(S,2,4) 2: (S,4) Input:
3 2 2: (R,3)
2: (S,4)
3 3 2: (S,7)
Máquina map2
S B C
Input: Output: Máquina reduce llave 3
2 4 (R,3,3) Cómputo 3: (R,3)
(S,2,7) 2: (S,7)
2 7 (S,3,8) 3: (S,8) Input:
3 8 (S,3,9) 3: (S,9) 3: (R,1)
3: (R,3)
3 9 3: (S,8)
3: (S,9)
INPUT MAP SHUFFLE REDUCE
Máquina reduce llave 1
Input:
Máquina map1 Cómputo
1: (R,1)
R A B
Input: Output:
Cómputo 1: (R,1)
1 1 (R,1,1)
(R,1,3) 3: (R,1) Máquina reduce llave 2
1 3 (R,3,2) 2: (R,3)
(S,2,4) 2: (S,4) Input: A B C
3 2 2: (R,3) Cómputo
2: (S,4) 3 2 4
3 3 2: (S,7)
3 2 7
Máquina map2
S B C
Input: Output: Máquina reduce llave 3
2 4 (R,3,3) Cómputo 3: (R,3)
(S,2,7) 2: (S,7) A B C
2 7 (S,3,8) 3: (S,8) Input:
3 8 (S,3,9) 3: (S,9) 3: (R,1) 1 3 8
Cómputo
3: (R,3) 1 3 9
3 9 3: (S,8)
3: (S,9) 3 3 8
3 3 9
INPUT MAP SHUFFLE REDUCE OUTPUT
Máquina reduce llave 1
Input: Cómputo
Máquina map1 1: (R,1)
R A B
Input: Output:
Cómputo
1 1 (R,1,1) 1: (R,1)
(R,1,3) Máquina reduce llave 2 A B C
3: (R,1)
1 3 (R,3,2) 2: (R,3)
(S,2,4) 2: (S,4)
Input: A B C 3 2 4
3 2 2: (R,3) Cómputo
2: (S,4) 3 2 4 3 2 7
3 3 2: (S,7)
3 2 7 1 3 8
Máquina map2
1 3 9
S B C 3 3 8
Input: Output: Máquina reduce llave 3
2 4 (R,3,3) Cómputo
3: (R,3) 3 3 9
2 7
(S,2,7) 2: (S,7) A B C
(S,3,8) 3: (S,8) Input:
3 8 (S,3,9) 3: (S,9) 3: (R,1)
1 3 8
Cómputo
3: (R,3) 1 3 9
3 9 3: (S,8)
3: (S,9) 3 3 8
3 3 9
Map Reduce y BDD
No es un descubrimiento nuevo, pero recientemente se ha
visto calzar perfectamente con las necesidades de las
grandes BD