Introducción a NoSQL con MongoDB
-
Upload
scalia -
Category
Technology
-
view
1.600 -
download
1
description
Transcript of 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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