SlideShare una empresa de Scribd logo
´
                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
´
                           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
´
                           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
´
                      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
´
                          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
´
                         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
´
                       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
´
                       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
´
                           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
´
                           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
´
                        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
´
                        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
´
                        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
´
                        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
´
                        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
´
                      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
´
                           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
´
                           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
´
                         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
´
                         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
´
                      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
´
                      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
´
                      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
´
                         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
´
                      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
´
                                    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
´
                      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
´
                           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

Más contenido relacionado

PDF
Big Data
PDF
Sesiones modelos de negocio y estrategias web ing inf enero2013
PPTX
MongoDB Avanzado
PPTX
NoSQL - MongoDB
PPTX
NOSQL: Primeros Pasos en MongoDB
PDF
Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
PPTX
Filtrado con grep y cut
PPTX
Tema1 redhat
Big Data
Sesiones modelos de negocio y estrategias web ing inf enero2013
MongoDB Avanzado
NoSQL - MongoDB
NOSQL: Primeros Pasos en MongoDB
Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
Filtrado con grep y cut
Tema1 redhat

Destacado (11)

PPTX
Introducción a NoSQL y MongoDB Webinar
PPTX
Mongo db
PPTX
1 tutorial de mongo db
PPTX
Shell exposición
PDF
NoSql y MongoDB
PPTX
Modificación de registros comando sed
PDF
COMANDOS SHELL Y PROGRAMACIÓN EN LA SHELL DEL BASH
PPTX
Rutas absolutas y relativas
PDF
Linux Programacion en Shell
PDF
MongoDB: la BBDD NoSQL más popular del mercado
PDF
Graficos de control
Introducción a NoSQL y MongoDB Webinar
Mongo db
1 tutorial de mongo db
Shell exposición
NoSql y MongoDB
Modificación de registros comando sed
COMANDOS SHELL Y PROGRAMACIÓN EN LA SHELL DEL BASH
Rutas absolutas y relativas
Linux Programacion en Shell
MongoDB: la BBDD NoSQL más popular del mercado
Graficos de control
Publicidad

Similar a Introducción a NoSQL con MongoDB (20)

PDF
Instalacion mongo db_2.4.9
PDF
Tarea de Tarea taller de base de datos
PDF
Lunch & Learn: El poder de las NoSQL con mongoDB
PPTX
Presentacion taller de programacion
PDF
Mongodb
PPTX
Introducción mongodb y desarrollo
PDF
20.3 Drivers y conexión
PPTX
¿que es mongodb?
PDF
NodeJS y MongoDB
PDF
ANALISIS DE BI CON Y SIN BD se comapara.pdf
PDF
NoSQL: Un Cambio de Paradigma - Apache Cassandra
PDF
No más "programación copy&paste". Generación automática de código con MOSKitt
PDF
Capitulo 8 soporte spring jdbc 0
PPTX
Dprn3 u3 a1_vimu
PDF
MongoDB
PPTX
MEAN Stack
Instalacion mongo db_2.4.9
Tarea de Tarea taller de base de datos
Lunch & Learn: El poder de las NoSQL con mongoDB
Presentacion taller de programacion
Mongodb
Introducción mongodb y desarrollo
20.3 Drivers y conexión
¿que es mongodb?
NodeJS y MongoDB
ANALISIS DE BI CON Y SIN BD se comapara.pdf
NoSQL: Un Cambio de Paradigma - Apache Cassandra
No más "programación copy&paste". Generación automática de código con MOSKitt
Capitulo 8 soporte spring jdbc 0
Dprn3 u3 a1_vimu
MongoDB
MEAN Stack
Publicidad

Último (20)

PDF
Taller tecnológico Michelle lobo Velasquez
PPTX
la-historia-de-la-medicina Edna Silva.pptx
PPTX
Historia Inteligencia Artificial Ana Romero.pptx
PDF
capacitación de aire acondicionado Bgh r 410
PDF
Estrategia de Apoyo de Daylin Castaño (5).pdf
PPTX
Tema 1 Taller de tecnologia y proceso tecnologico.pptx
PDF
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
PDF
CONTABILIDAD Y TRIBUTACION, EJERCICIO PRACTICO
PPTX
Propuesta BKP servidores con Acronis1.pptx
PDF
ADMINISTRACIÓN DE ARCHIVOS - TICS (SENA).pdf
PDF
MANUAL de recursos humanos para ODOO.pdf
DOCX
Guía 5. Test de orientación Vocacional 2.docx
DOCX
TRABAJO GRUPAL (5) (1).docxjsjsjskskksksk
PPTX
Presentacion de Alba Curso Auditores Internos ISO 19011
PPTX
modulo seguimiento 1 para iniciantes del
PDF
informe_fichas1y2_corregido.docx (2) (1).pdf
PPTX
El uso de las TIC en la vida cotidiana..
PPT
Protocolos de seguridad y mecanismos encriptación
PDF
Distribucion de frecuencia exel (1).pdf
PPTX
Mecanismos-de-Propagacion de ondas electromagneticas
Taller tecnológico Michelle lobo Velasquez
la-historia-de-la-medicina Edna Silva.pptx
Historia Inteligencia Artificial Ana Romero.pptx
capacitación de aire acondicionado Bgh r 410
Estrategia de Apoyo de Daylin Castaño (5).pdf
Tema 1 Taller de tecnologia y proceso tecnologico.pptx
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
CONTABILIDAD Y TRIBUTACION, EJERCICIO PRACTICO
Propuesta BKP servidores con Acronis1.pptx
ADMINISTRACIÓN DE ARCHIVOS - TICS (SENA).pdf
MANUAL de recursos humanos para ODOO.pdf
Guía 5. Test de orientación Vocacional 2.docx
TRABAJO GRUPAL (5) (1).docxjsjsjskskksksk
Presentacion de Alba Curso Auditores Internos ISO 19011
modulo seguimiento 1 para iniciantes del
informe_fichas1y2_corregido.docx (2) (1).pdf
El uso de las TIC en la vida cotidiana..
Protocolos de seguridad y mecanismos encriptación
Distribucion de frecuencia exel (1).pdf
Mecanismos-de-Propagacion de ondas electromagneticas

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