Introducción a NoSQL con MongoDB

2,359 views

Published on

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.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,359
On SlideShare
0
From Embeds
0
Number of Embeds
143
Actions
Shares
0
Downloads
90
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Introducción a NoSQL con MongoDB

  1. 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. 2. ´ Introduccion Problemas a evitar MongoDB Bases de datos ConclusionesFallos 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. 3. ´ Introduccion Problemas a evitar MongoDB Bases de datos ConclusionesRequisitos 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. 4. ´ Introduccion Problemas a evitar MongoDB Bases de datos ConclusionesTipos de bases de datos Figura: Tipos de bases de datos. ´ Antonio Nicolas Pina ´ Una introduccion a NoSQL con MongoDB 4 / 23
  5. 5. ´ Introduccion Problemas a evitar MongoDB Bases de datos ConclusionesRDBMS 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. 6. ´ Introduccion Problemas a evitar MongoDB Bases de datos ConclusionesNoSQL 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 21. ´ Introduccion ˜ Caracter´sticas de diseno ı MongoDB Estructura de la base de datos Conclusiones Programacion´ ˜ ´Anadir documentos a una colecciondb.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. 22. ´ Introduccion ˜ Caracter´sticas de diseno ı MongoDB Estructura de la base de datos Conclusiones Programacion´Recuperar y eliminar documentosrs.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. 23. ´ Introduccion ˜ Caracter´sticas de diseno ı MongoDB Estructura de la base de datos Conclusiones Programacion´Actualizando documentosdb.users.update( { name: "ANPez" }, { experiencia.charlas: 1 }); ´ Antonio Nicolas Pina ´ Una introduccion a NoSQL con MongoDB 19 / 23
  24. 24. ´ Introduccion ˜ Caracter´sticas de diseno ı MongoDB Estructura de la base de datos Conclusiones Programacion´Actualizando documentosdb.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. 25. ´ Introduccion ˜ Caracter´sticas de diseno ı MongoDB Estructura de la base de datos Conclusiones Programacion´Actualizando documentosdb.users.update( { name: "ANPez" }, { $set: { experiencia.charlas: 1 } }); ´ Antonio Nicolas Pina ´ Una introduccion a NoSQL con MongoDB 20 / 23
  26. 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 }1112 / / 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. 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. 28. ´ Introduccion MongoDB Conclusiones ConclusionesConclusiones ˜ 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

×