Explorando la historia y funcionamiento de la memoria ram
Introducción a NoSQL con MongoDB
1. ´
Introduccion
MongoDB
Conclusiones
´
Una introduccion a NoSQL con MongoDB
´
Antonio Nicolas Pina
Murcia, 23 de mayo de 2012
´
Antonio Nicolas Pina ´
Una introduccion a NoSQL con MongoDB 1 / 23
2. ´
Introduccion
Problemas a evitar
MongoDB
Bases de datos
Conclusiones
Fallos hardware
Tolerancia a fallos
´
¿Como debemos actuar ante un fallo?
´
El peor fallo ocurrira en el peor momento, sobre todo en una
´
startup. Es obligatorio disponer de protocolos de actuacion.
´
Disponer de mas servidores empeora las cosas
La probabilidad de que un fallo ocurra es directamente
proporcional al numero de servidores que manejemos y a la
´
carga que soporten.
´
Antonio Nicolas Pina ´
Una introduccion a NoSQL con MongoDB 2 / 23
3. ´
Introduccion
Problemas a evitar
MongoDB
Bases de datos
Conclusiones
Requisitos inesperados
La unica constante es el cambio
´
´ ´
Si nuestra aplicacion funciona bien, habra que modificarla.
´ ´
Cuanto mas grande seamos, mas cambios sobre el diseno ˜
´ ´
inicial deberemos acometer, y mas complicados seran los
mismos.
Un ’alter table’ tiene un alto coste
Deben evitarse a toda costa, bloquean la base de datos
mientras se ejecutan.
´
Antonio Nicolas Pina ´
Una introduccion a NoSQL con MongoDB 3 / 23
4. ´
Introduccion
Problemas a evitar
MongoDB
Bases de datos
Conclusiones
Tipos de bases de datos
Figura: Tipos de bases de datos.
´
Antonio Nicolas Pina ´
Una introduccion a NoSQL con MongoDB 4 / 23
5. ´
Introduccion
Problemas a evitar
MongoDB
Bases de datos
Conclusiones
RDBMS
MySQL
´
La mas popular. MariaDB es un fork de MySQL, creado tras la
compra de Sun por Oracle.
PostgreSQL
Algunos dicen que la mejor.
Oracle
´
La base de datos privativa mas utilizada y conocida.
´
Antonio Nicolas Pina ´
Una introduccion a NoSQL con MongoDB 5 / 23
6. ´
Introduccion
Problemas a evitar
MongoDB
Bases de datos
Conclusiones
NoSQL
Orientadas a documentos
MongoDB, Cassandra, CouchDB.
Clave-valor
Memcachedb, Redis.
Muchos otros subtipos
Orientadas a grafos como Neo4j; orientadas a columnas, como
BigTable, etc.
´
Antonio Nicolas Pina ´
Una introduccion a NoSQL con MongoDB 6 / 23
7. ´
Introduccion ˜
Caracter´sticas de diseno
ı
MongoDB Estructura de la base de datos
Conclusiones Programacion´
˜
Principios de diseno
´
¿Que quieren los
programadores?
´
Antonio Nicolas Pina ´
Una introduccion a NoSQL con MongoDB 7 / 23
8. ´
Introduccion ˜
Caracter´sticas de diseno
ı
MongoDB Estructura de la base de datos
Conclusiones Programacion´
˜
Principios de diseno
´
Antonio Nicolas Pina ´
Una introduccion a NoSQL con MongoDB 8 / 23
9. ´
Introduccion ˜
Caracter´sticas de diseno
ı
MongoDB Estructura de la base de datos
Conclusiones Programacion´
Facilidad
Aprendizaje
´
Muchos conceptos de RDBMS se mantienen, haciendo facil e
´
intuitiva la migracion.
´ ´
Instalacion y administracion
´ ´
Para ello, la base de datos tiene que ser lo mas autonoma
posible.
´
Programacion
˜ ´
Los drivers son disenados para que su uso sea comodo para el
programador.
´
Antonio Nicolas Pina ´
Una introduccion a NoSQL con MongoDB 9 / 23
10. ´
Introduccion ˜
Caracter´sticas de diseno
ı
MongoDB Estructura de la base de datos
Conclusiones Programacion´
Alto rendimiento
No JOINs
´
Un JOIN es una operacion muy costosa, es mejor evitarlos en
la medida de lo posible.
´
Organizacion de datos adecuada
La forma de estructurar los datos debe propiciar un acceso
eficiente.
No transacciones
Las transacciones suponen un gran esfuerzo para la base de
datos.
´
Antonio Nicolas Pina ´
Una introduccion a NoSQL con MongoDB 10 / 23
11. ´
Introduccion ˜
Caracter´sticas de diseno
ı
MongoDB Estructura de la base de datos
Conclusiones Programacion´
Nomenclatura
No se llama Se llama
Base de datos
Tabla
Fila
Indice
Cuadro: Nomenclatura de elementos en MongoDB.
´
Antonio Nicolas Pina ´
Una introduccion a NoSQL con MongoDB 11 / 23
12. ´
Introduccion ˜
Caracter´sticas de diseno
ı
MongoDB Estructura de la base de datos
Conclusiones Programacion´
Nomenclatura
No se llama Se llama
Base de datos Base de datos
Tabla
Fila
Indice
Cuadro: Nomenclatura de elementos en MongoDB.
´
Antonio Nicolas Pina ´
Una introduccion a NoSQL con MongoDB 11 / 23
13. ´
Introduccion ˜
Caracter´sticas de diseno
ı
MongoDB Estructura de la base de datos
Conclusiones Programacion´
Nomenclatura
No se llama Se llama
Base de datos Base de datos
Tabla ´
Coleccion
Fila
Indice
Cuadro: Nomenclatura de elementos en MongoDB.
´
Antonio Nicolas Pina ´
Una introduccion a NoSQL con MongoDB 11 / 23
14. ´
Introduccion ˜
Caracter´sticas de diseno
ı
MongoDB Estructura de la base de datos
Conclusiones Programacion´
Nomenclatura
No se llama Se llama
Base de datos Base de datos
Tabla ´
Coleccion
Fila Documento
Indice
Cuadro: Nomenclatura de elementos en MongoDB.
´
Antonio Nicolas Pina ´
Una introduccion a NoSQL con MongoDB 11 / 23
15. ´
Introduccion ˜
Caracter´sticas de diseno
ı
MongoDB Estructura de la base de datos
Conclusiones Programacion´
Nomenclatura
No se llama Se llama
Base de datos Base de datos
Tabla ´
Coleccion
Fila Documento
Indice Indice
Cuadro: Nomenclatura de elementos en MongoDB.
´
Antonio Nicolas Pina ´
Una introduccion a NoSQL con MongoDB 11 / 23
16. ´
Introduccion ˜
Caracter´sticas de diseno
ı
MongoDB Estructura de la base de datos
Conclusiones Programacion´
Forma de un documento
{
_id: ObjectId("4fb0239b963a756b48000000"),
name: "ANPez",
nacimiento: ISODate("1985-12-15T18:25:01.0Z"),
busca_trabajo: true,
gustos: ["musica", "formula1"]
experiencia:
{
nosql: 1.7,
php: 3.4,
emacs: 0.3
}
}
´
Antonio Nicolas Pina ´
Una introduccion a NoSQL con MongoDB 12 / 23
17. ´
Introduccion ˜
Caracter´sticas de diseno
ı
MongoDB Estructura de la base de datos
Conclusiones Programacion´
Tipos (I)
Fuertemente tipada
MongoDB maneja tipos, as´ que cuidado en lenguajes de
ı
scripting como PHP.
´
Orden de evaluacion de tipos
´
Debido a lo anterior, se establece un orden de evaluacion. Esto
es, un entero se compara primero con enteros, y luego con
floats, pero nunca con cadenas de texto.
UTF8, UTF8 everywhere
MongoDB no entiende cadenas que no sean UTF8, aunque se
´
pueden almacenar, el servidor no sabra trabajar con ellas.
´
Antonio Nicolas Pina ´
Una introduccion a NoSQL con MongoDB 13 / 23
18. ´
Introduccion ˜
Caracter´sticas de diseno
ı
MongoDB Estructura de la base de datos
Conclusiones Programacion´
Tipos (y II)
Fechas en UTC
Las fechas no almacenan la zona horaria, si la queremos, la
debemos guardar nosotros aparte.
Arrays y subdocumentos
´
La parte mas interesante, nos permiten anidar tanto como
queramos y desnormalizar nuestros datos.
L´mites
ı
´
No podemos almacenar mas de 16MB por documento.
´
Tampoco mas de 2GB en un servidor de 32 bits.
´
Antonio Nicolas Pina ´
Una introduccion a NoSQL con MongoDB 14 / 23
19. ´
Introduccion ˜
Caracter´sticas de diseno
ı
MongoDB Estructura de la base de datos
Conclusiones Programacion´
ObjectId
Reemplazo eficiente del autoincrement de MySQL.
´ ˜
Esta disenado para no ser bloqueante y a la vez ser unico
´
e incremental.
Longitud de 12 bytes, nos da
212∗8 = 296 ≈ 7,9 ∗ 1028
documentos diferentes.
Compuesto por varias partes:
4fb0239b 963a75 6b48 000000
Timestamp.
Machine Id.
Process Id.
Autoincrement.
´
Antonio Nicolas Pina ´
Una introduccion a NoSQL con MongoDB 15 / 23
20. ´
Introduccion ˜
Caracter´sticas de diseno
ı
MongoDB Estructura de la base de datos
Conclusiones Programacion´
Escalabilidad
Figura: Arquitectura completa con sharding.
´
Antonio Nicolas Pina ´
Una introduccion a NoSQL con MongoDB 16 / 23
21. ´
Introduccion ˜
Caracter´sticas de diseno
ı
MongoDB Estructura de la base de datos
Conclusiones Programacion´
˜ ´
Anadir documentos a una coleccion
db.users.insert
({
name: "ANPez",
nacimiento: ISODate("1985-12-15T18:25:01.0Z"),
busca_trabajo: true,
gustos: ["musica", "formula1"]
experiencia:
{
nosql: 1.7,
php: 3.4,
emacs: 0.3
}
});
´
Antonio Nicolas Pina ´
Una introduccion a NoSQL con MongoDB 17 / 23
22. ´
Introduccion ˜
Caracter´sticas de diseno
ı
MongoDB Estructura de la base de datos
Conclusiones Programacion´
Recuperar y eliminar documentos
rs.slaveOk();
var user = db.users.findOne
({
name: "ANPez",
experiencia.php:
{
$gt: 3
}
}).sort({nacimiento: -1});
db.good_databases.remove({_id: mysql._id});
´
Antonio Nicolas Pina ´
Una introduccion a NoSQL con MongoDB 18 / 23
23. ´
Introduccion ˜
Caracter´sticas de diseno
ı
MongoDB Estructura de la base de datos
Conclusiones Programacion´
Actualizando documentos
db.users.update
(
{
name: "ANPez"
},
{
experiencia.charlas: 1
}
);
´
Antonio Nicolas Pina ´
Una introduccion a NoSQL con MongoDB 19 / 23
24. ´
Introduccion ˜
Caracter´sticas de diseno
ı
MongoDB Estructura de la base de datos
Conclusiones Programacion´
Actualizando documentos
db.users.update
(
{
name: "ANPez"
},
{
experiencia.charlas: 1
}
);
´ ´
¡MAL! Sobreescribira todo el documento, no solo ese
campo.
´
Antonio Nicolas Pina ´
Una introduccion a NoSQL con MongoDB 19 / 23
25. ´
Introduccion ˜
Caracter´sticas de diseno
ı
MongoDB Estructura de la base de datos
Conclusiones Programacion´
Actualizando documentos
db.users.update
(
{
name: "ANPez"
},
{
$set:
{
experiencia.charlas: 1
}
}
);
´
Antonio Nicolas Pina ´
Una introduccion a NoSQL con MongoDB 20 / 23
26. ´
Introduccion ˜
Caracter´sticas de diseno
ı
MongoDB Estructura de la base de datos
Conclusiones Programacion´
´
¡¿Y que hago yo sin bloqueos?!
1 f o r ( $ i = 0 ; $ i < 3 ; ++ $ i )
2 {
3 $promo = $ t h i s −>m−>promo−>g e t ( $code ) ;
4
5 / / T r a b a j a r con e l c o n t e n i d o de $promo .
6
7 i f ( $ t h i s −>m−>promo−>consume ( $code , $promo [ ’ l e f t ’ ] ) )
8 {
9 break ; / / The update t o o k p l a c e .
10 }
11
12 / / Another user i s u p d a t i n g c o n c u r r e n t l y , r e t r y .
13 usleep ( 1 0 0 0 ) ;
14 }
´
Antonio Nicolas Pina ´
Una introduccion a NoSQL con MongoDB 21 / 23
27. ´
Introduccion ˜
Caracter´sticas de diseno
ı
MongoDB Estructura de la base de datos
Conclusiones Programacion´
O mejor aun: findAndModify
´
var promo = db.users.findAndModify
({
query:
{
promo: "promocode",
left: {$gt: 0}
},
update:
{
$dec: {left:1}
},
new: false
});
´
Antonio Nicolas Pina ´
Una introduccion a NoSQL con MongoDB 22 / 23
28. ´
Introduccion
MongoDB Conclusiones
Conclusiones
Conclusiones
˜
Disenada para web
˜
MongoDB ha sido disenada para la web, y es la base de datos
´
mas adecuada para la mayor parte de proyectos.
A pesar de ser muy joven, tiene un gran soporte y estabilidad.
´
Con cada nueva version se introducen nuevas e interesantes
´
caracter´sticas (Aggregation framework aparecera en 2.2).
ı
Tiene algunas peculiaridades y trucos que es preciso conocer,
pero en general tiene un manejo sencillo e intuitivo.
´
Antonio Nicolas Pina ´
Una introduccion a NoSQL con MongoDB 23 / 23