Introducción a NoSQL con MongoDB

28
Introducci ´ on MongoDB Conclusiones Una introducci ´ on a NoSQL con MongoDB Antonio Nicol ´ as Pina Murcia, 23 de mayo de 2012 Antonio Nicol ´ as Pina Una introducci ´ on a NoSQL con MongoDB 1 / 23

description

Una rápida introducción al mundo NoSQL, y en particular a la orientación a documentos, utilizando MongoDB como gestor de bases de datos.

Transcript of Introducción a NoSQL con MongoDB

Page 1: Introducción a NoSQL con MongoDB

IntroduccionMongoDB

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

Page 2: Introducción a NoSQL con MongoDB

IntroduccionMongoDB

Conclusiones

Problemas a evitarBases de datos

Fallos hardware

Tolerancia a fallos¿Como debemos actuar ante un fallo?

El peor fallo ocurrira en el peor momento, sobre todo en unastartup. Es obligatorio disponer de protocolos de actuacion.

Disponer de mas servidores empeora las cosasLa probabilidad de que un fallo ocurra es directamenteproporcional al numero de servidores que manejemos y a lacarga que soporten.

Antonio Nicolas Pina Una introduccion a NoSQL con MongoDB 2 / 23

Page 3: Introducción a NoSQL con MongoDB

IntroduccionMongoDB

Conclusiones

Problemas a evitarBases de datos

Requisitos inesperados

La unica constante es el cambioSi nuestra aplicacion funciona bien, habra que modificarla.

Cuanto mas grande seamos, mas cambios sobre el disenoinicial deberemos acometer, y mas complicados seran losmismos.

Un ’alter table’ tiene un alto costeDeben evitarse a toda costa, bloquean la base de datosmientras se ejecutan.

Antonio Nicolas Pina Una introduccion a NoSQL con MongoDB 3 / 23

Page 4: Introducción a NoSQL con MongoDB

IntroduccionMongoDB

Conclusiones

Problemas a evitarBases de datos

Tipos de bases de datos

Figura: Tipos de bases de datos.

Antonio Nicolas Pina Una introduccion a NoSQL con MongoDB 4 / 23

Page 5: Introducción a NoSQL con MongoDB

IntroduccionMongoDB

Conclusiones

Problemas a evitarBases de datos

RDBMS

MySQL

La mas popular. MariaDB es un fork de MySQL, creado tras lacompra de Sun por Oracle.

PostgreSQLAlgunos dicen que la mejor.

OracleLa base de datos privativa mas utilizada y conocida.

Antonio Nicolas Pina Una introduccion a NoSQL con MongoDB 5 / 23

Page 6: Introducción a NoSQL con MongoDB

IntroduccionMongoDB

Conclusiones

Problemas a evitarBases de datos

NoSQL

Orientadas a documentosMongoDB, Cassandra, CouchDB.

Clave-valorMemcachedb, Redis.

Muchos otros subtiposOrientadas a grafos como Neo4j; orientadas a columnas, comoBigTable, etc.

Antonio Nicolas Pina Una introduccion a NoSQL con MongoDB 6 / 23

Page 7: Introducción a NoSQL con MongoDB

IntroduccionMongoDB

Conclusiones

Caracterısticas de disenoEstructura de la base de datosProgramacion

Principios de diseno

¿Que quieren losprogramadores?

Antonio Nicolas Pina Una introduccion a NoSQL con MongoDB 7 / 23

Page 8: Introducción a NoSQL con MongoDB

IntroduccionMongoDB

Conclusiones

Caracterısticas de disenoEstructura de la base de datosProgramacion

Principios de diseno

Antonio Nicolas Pina Una introduccion a NoSQL con MongoDB 8 / 23

Page 9: Introducción a NoSQL con MongoDB

IntroduccionMongoDB

Conclusiones

Caracterısticas de disenoEstructura de la base de datosProgramacion

Facilidad

Aprendizaje

Muchos conceptos de RDBMS se mantienen, haciendo facil eintuitiva la migracion.

Instalacion y administracion

Para ello, la base de datos tiene que ser lo mas autonomaposible.

Programacion

Los drivers son disenados para que su uso sea comodo para elprogramador.

Antonio Nicolas Pina Una introduccion a NoSQL con MongoDB 9 / 23

Page 10: Introducción a NoSQL con MongoDB

IntroduccionMongoDB

Conclusiones

Caracterısticas de disenoEstructura de la base de datosProgramacion

Alto rendimiento

No JOINsUn JOIN es una operacion muy costosa, es mejor evitarlos enla medida de lo posible.

Organizacion de datos adecuadaLa forma de estructurar los datos debe propiciar un accesoeficiente.

No transaccionesLas transacciones suponen un gran esfuerzo para la base dedatos.

Antonio Nicolas Pina Una introduccion a NoSQL con MongoDB 10 / 23

Page 11: Introducción a NoSQL con MongoDB

IntroduccionMongoDB

Conclusiones

Caracterısticas de disenoEstructura de la base de datosProgramacion

Nomenclatura

No se llama Se llamaBase de datosTablaFilaIndice

Cuadro: Nomenclatura de elementos en MongoDB.

Antonio Nicolas Pina Una introduccion a NoSQL con MongoDB 11 / 23

Page 12: Introducción a NoSQL con MongoDB

IntroduccionMongoDB

Conclusiones

Caracterısticas de disenoEstructura de la base de datosProgramacion

Nomenclatura

No se llama Se llamaBase de datos Base de datosTablaFilaIndice

Cuadro: Nomenclatura de elementos en MongoDB.

Antonio Nicolas Pina Una introduccion a NoSQL con MongoDB 11 / 23

Page 13: Introducción a NoSQL con MongoDB

IntroduccionMongoDB

Conclusiones

Caracterısticas de disenoEstructura de la base de datosProgramacion

Nomenclatura

No se llama Se llamaBase de datos Base de datosTabla ColeccionFilaIndice

Cuadro: Nomenclatura de elementos en MongoDB.

Antonio Nicolas Pina Una introduccion a NoSQL con MongoDB 11 / 23

Page 14: Introducción a NoSQL con MongoDB

IntroduccionMongoDB

Conclusiones

Caracterısticas de disenoEstructura de la base de datosProgramacion

Nomenclatura

No se llama Se llamaBase de datos Base de datosTabla ColeccionFila DocumentoIndice

Cuadro: Nomenclatura de elementos en MongoDB.

Antonio Nicolas Pina Una introduccion a NoSQL con MongoDB 11 / 23

Page 15: Introducción a NoSQL con MongoDB

IntroduccionMongoDB

Conclusiones

Caracterısticas de disenoEstructura de la base de datosProgramacion

Nomenclatura

No se llama Se llamaBase de datos Base de datosTabla ColeccionFila DocumentoIndice Indice

Cuadro: Nomenclatura de elementos en MongoDB.

Antonio Nicolas Pina Una introduccion a NoSQL con MongoDB 11 / 23

Page 16: Introducción a NoSQL con MongoDB

IntroduccionMongoDB

Conclusiones

Caracterısticas de disenoEstructura de la base de datosProgramacion

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

Page 17: Introducción a NoSQL con MongoDB

IntroduccionMongoDB

Conclusiones

Caracterısticas de disenoEstructura de la base de datosProgramacion

Tipos (I)

Fuertemente tipadaMongoDB maneja tipos, ası que cuidado en lenguajes descripting como PHP.

Orden de evaluacion de tipos

Debido a lo anterior, se establece un orden de evaluacion. Estoes, un entero se compara primero con enteros, y luego confloats, pero nunca con cadenas de texto.

UTF8, UTF8 everywhereMongoDB no entiende cadenas que no sean UTF8, aunque sepueden almacenar, el servidor no sabra trabajar con ellas.

Antonio Nicolas Pina Una introduccion a NoSQL con MongoDB 13 / 23

Page 18: Introducción a NoSQL con MongoDB

IntroduccionMongoDB

Conclusiones

Caracterısticas de disenoEstructura de la base de datosProgramacion

Tipos (y II)

Fechas en UTCLas fechas no almacenan la zona horaria, si la queremos, ladebemos guardar nosotros aparte.

Arrays y subdocumentos

La parte mas interesante, nos permiten anidar tanto comoqueramos y desnormalizar nuestros datos.

LımitesNo 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

Page 19: Introducción a NoSQL con MongoDB

IntroduccionMongoDB

Conclusiones

Caracterısticas de disenoEstructura de la base de datosProgramacion

ObjectId

Reemplazo eficiente del autoincrement de MySQL.Esta disenado para no ser bloqueante y a la vez ser unicoe 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

Page 20: Introducción a NoSQL con MongoDB

IntroduccionMongoDB

Conclusiones

Caracterısticas de disenoEstructura de la base de datosProgramacion

Escalabilidad

Figura: Arquitectura completa con sharding.

Antonio Nicolas Pina Una introduccion a NoSQL con MongoDB 16 / 23

Page 21: Introducción a NoSQL con MongoDB

IntroduccionMongoDB

Conclusiones

Caracterısticas de disenoEstructura de la base de datosProgramacion

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

Page 22: Introducción a NoSQL con MongoDB

IntroduccionMongoDB

Conclusiones

Caracterısticas de disenoEstructura de la base de datosProgramacion

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

Page 23: Introducción a NoSQL con MongoDB

IntroduccionMongoDB

Conclusiones

Caracterısticas de disenoEstructura de la base de datosProgramacion

Actualizando documentos

db.users.update(

{name: "ANPez"

},{

experiencia.charlas: 1}

);

Antonio Nicolas Pina Una introduccion a NoSQL con MongoDB 19 / 23

Page 24: Introducción a NoSQL con MongoDB

IntroduccionMongoDB

Conclusiones

Caracterısticas de disenoEstructura de la base de datosProgramacion

Actualizando documentos

db.users.update(

{name: "ANPez"

},{

experiencia.charlas: 1}

);

¡MAL! Sobreescribira todo el documento, no solo esecampo.

Antonio Nicolas Pina Una introduccion a NoSQL con MongoDB 19 / 23

Page 25: Introducción a NoSQL con MongoDB

IntroduccionMongoDB

Conclusiones

Caracterısticas de disenoEstructura de la base de datosProgramacion

Actualizando documentos

db.users.update(

{name: "ANPez"

},{

$set:{

experiencia.charlas: 1}

});

Antonio Nicolas Pina Una introduccion a NoSQL con MongoDB 20 / 23

Page 26: Introducción a NoSQL con MongoDB

IntroduccionMongoDB

Conclusiones

Caracterısticas de disenoEstructura de la base de datosProgramacion

¡¿Y que hago yo sin bloqueos?!

1 f o r ( $ i = 0 ; $ i < 3; ++ $ i )2 {3 $promo = $th is−>m−>promo−>get ( $code ) ;4

5 / / T raba jar con e l contenido de $promo .6

7 i f ( $ th i s−>m−>promo−>consume ( $code , $promo [ ’ l e f t ’ ] ) )8 {9 break ; / / The update took place .

10 }11

12 / / Another user i s updat ing concur ren t l y , r e t r y .13 usleep (1000) ;14 }

Antonio Nicolas Pina Una introduccion a NoSQL con MongoDB 21 / 23

Page 27: Introducción a NoSQL con MongoDB

IntroduccionMongoDB

Conclusiones

Caracterısticas de disenoEstructura de la base de datosProgramacion

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

Page 28: Introducción a NoSQL con MongoDB

IntroduccionMongoDB

ConclusionesConclusiones

Conclusiones

Disenada para webMongoDB ha sido disenada para la web, y es la base de datosmas 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 interesantescaracterı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