SlideShare ist ein Scribd-Unternehmen logo
1 von 84
Downloaden Sie, um offline zu lesen
Mandango
                              al descubierto
                                             Pablo Díez
                             1ª Meetup Symfony Madrid - 26 de marzo de 2011

sábado 26 de marzo de 2011
¿MongoDB?



sábado 26 de marzo de 2011
humongous



sábado 26 de marzo de 2011
NOSQL

                   • No SQL Not Only SQL
                   • Necesidades de rendimiento
                    • Especialmente webs
                    • Gran cantidad de datos
                    • Gran cantidad de lecturas y escrituras

sábado 26 de marzo de 2011
MongoDB
                   •         Alto rendimiento
                   •         Escalable
                   •         Orientada a documentos
                   •         Esquema libre
                   •         Extremadamente sencilla
                   •         Índices
                   •         Código abierto
                   •         Continua evolución


sábado 26 de marzo de 2011
MongoDB es la base de datos NOSQL más
               similar en conceptos a las SQL




sábado 26 de marzo de 2011
Base de datos == Base de datos
                                     Tabla == Colección
                                  Registro ~= Documento




sábado 26 de marzo de 2011
Documentos
                             Simplemente datos representados en JSON




sábado 26 de marzo de 2011
{
                             username: pablodip,
                             email: pablodip@gmail.com
                    }




sábado 26 de marzo de 2011
Documentos
                               En arrays en PHP




sábado 26 de marzo de 2011
array(
                 'username' => 'pablodip',
                 'email' => 'pablodip@gmail.com',
             )




sábado 26 de marzo de 2011
Documentos embebidos
                             Documentos dentro de otros documentos




sábado 26 de marzo de 2011
array(
                        'username' => 'pablodip',
                        'email' => 'pablodip@gmail.com',
                        'profile' => array(
                            'first_name' => 'Pablo',
                            'last_name' => 'Díez',
                        ),
                    )




sábado 26 de marzo de 2011
array(
                  'title' => 'MongoDB Rocks!',
                  'content' => 'blah blah blah',
                  'tags' => array('mongodb', 'databases'),
                  'comments' => array(
                      array(
                          'name' => 'pablodip',
                          'text' => 'blah',
                      ),
                      array(
                          'name' => 'barbelith',
                          'text' => 'blah',
                      ),
                  ),
              )


sábado 26 de marzo de 2011
Al vuelo
                              Las bases de datos y colecciones se crean
                             automáticamente la primera vez que se usan




sábado 26 de marzo de 2011
$mongo = new Mongo('mongodb://localhost:27017');
       $database = $mongo->selectDatabase('symfony2');
       $collection = $database->selectCollection('user');




sábado 26 de marzo de 2011
Esquema libre
                    Cada documento puede usar los campos que quiera
                             incluso en la misma colección




sábado 26 de marzo de 2011
array(
                'username' => 'pablodip',
                'city'     => 'Zamora',
                'odm'      => 'Mandango',
            )



            array(
                'username'   =>   'barbelith',
                'country'    =>   'Valladolid',
                'database'   =>   'book',
                'phones'     =>   array('806XXX', '902XXX')
            )



sábado 26 de marzo de 2011
Sencillo
                             Guardar arrays, consultar arrays




sábado 26 de marzo de 2011
$pablodip = array(
                    'username' => 'pablodip',
                    'email' => 'pablodip@gmail.com',
                );
                $collection->save($pablodip);




sábado 26 de marzo de 2011
$criteria = array(
                    'username' => 'pablodip'
                );
                $pablodip = $collection->findOne($criteria);

                $pablodip['city'] = 'Zamora';
                $collection->save($pablodip);




sábado 26 de marzo de 2011
Sencillo
                             Consultas realmente sencillas




sábado 26 de marzo de 2011
// SELECT * FROM article
    $articles = $db->article->find();

    // SELECT * FROM article WHERE is_active="true"
    $articles = $db->article->find(array('is_active' => true));

    // SELECT                id, title FROM article WHERE author='pablodip'
    $criteria                = array('author' => 'pablodip');
    $fields =                array('_id' => 1, 'title' => 1);
    $articles                = $db->article->find($criteria, $fields);




sábado 26 de marzo de 2011
// SELECT * FROM article ORDER BY date ASC
    $articles = $db->article->find()->sort(array('date' => 1));
    // DESC
    $articles = $db->article->find()->sort(array('date' => -1));

    // SELECT * FROM article LIMIT 10, 2
    $articles = $db->article->find()->limit(10)->skip(2);




sábado 26 de marzo de 2011
// un resultado
    $article = $db->article->findOne();

    // criteria, fields
    $article = $db->article->findOne($criteria, $fields);




sábado 26 de marzo de 2011
Actualizaciones parciales
                             Muy eficientes




sábado 26 de marzo de 2011
$criteria = array('username' => 'pablodip');
    $update = array('$set' => array('city' => 'Oxford'));
    $db->article->update($criteria, $update);




sábado 26 de marzo de 2011
Conclusiones
                   •         MongoDB es una base de datos ultrarápida
                   •         MongoDB comparte muchos conceptos con bases
                             de datos relacionales
                   •         MongoDB es extremadamente sencilla de usar
                         •     Creación de bases de datos y colecciones al
                               vuelo
                         •     Esquema libre (sin migraciones)
                         •     Consultas sencillas


sábado 26 de marzo de 2011
MongoDB -

                   • Sin integridad referencial
                   • Transacciones sólo a nivel de documento



sábado 26 de marzo de 2011
Puedes usar MongoDB en cualquier proyecto,
         simplemente si necesitas integridad referencial o
        transacciones a nivel de colección o base de datos
      necesitas combinarla con una base de datos relacional.




sábado 26 de marzo de 2011
¡Pero queremos objetos!



sábado 26 de marzo de 2011
ODM
          Object Document Mapper


sábado 26 de marzo de 2011
DoctrineMongo


                             ¿Ein?
sábado 26 de marzo de 2011
Mondongo...



sábado 26 de marzo de 2011
Demasiados Mondongos por Google y
                              Twitter ;)




sábado 26 de marzo de 2011
¡Mejor
                       Mandangos!
sábado 26 de marzo de 2011
Mandango es a los ODMs lo que
       MongoDB a las bases de datos



sábado 26 de marzo de 2011
Mandango
                   • Sencillo
                    • Fácil de usar
                   • Potente
                    • Referencias, embebidos, relaciones
                    • Unit of Work
                    • Sistema de Queries
                    • Behaviors, índices, eventos
                    • ...
                   • Ultrarápido
sábado 26 de marzo de 2011
Fácil de usar
                             Mismos conceptos que cualquier mapeador.
                               Sin magia, todo el código es generado.
                                      Autocompletado IDE +




sábado 26 de marzo de 2011
$article = new Article();
                         $article->setTitle('foo');
                         $article->setContent('bar');
                         $article->save();




sábado 26 de marzo de 2011
Fácil de usar
                               Interfaz fluida




sábado 26 de marzo de 2011
$article = Article::create()
                    ->setTitle('foo')
                    ->setContent('bar')
                    ->save()
                ;




sábado 26 de marzo de 2011
Fácil de usar
                             Sencillo uso de namespaces.
                               Convención: Model...




sábado 26 de marzo de 2011
$mandango            =   ModelArticle::mandango();
        $repository          =   ModelArticle::repository();
        $query               =   ModelArticle::query();
        $article             =   ModelArticle::find($id);
        $collection          =   ModelArticle::collection();




sábado 26 de marzo de 2011
Referencia, embebidos
                             Automáticamente; embebidos profundos




sábado 26 de marzo de 2011
// references one
       $article->setAuthor($author);
       $author = $article->getAuthor();

       // references many
       $article->getCategories()->add($category);
       $article->getCategories()->remove($category);
       $categories = $article->getCategories()->saved();
       foreach ($article->getCategories()) {
           // ...
       }




sábado 26 de marzo de 2011
// embeddeds one
       $article->setSource($source);
       $source = $article->getSource();

       // embeddeds many
       $article->getComments()->add($comment);
       $article->getComments()->remove($comment);
       $comments = $article->getComments()->saved();
       foreach ($article->getComments() as $comment) {
           // ...
       }




sábado 26 de marzo de 2011
Unit of Work
                               ¡Todo a la vez!




sábado 26 de marzo de 2011
$article = ModelArticle::create()->setTitle('foo');
             $mandango->persist($article);

             $author = ModelAuthor::create()->setName('bar');
             $mandango->persist($author);

             $user = ModelUser::query()->one();
             $mandango->remove($user);

             $category = ModelCategory::query()->one();
             $category->setName('foobar');
             $mandango->persist($category);

             // todo es enviado a la base de datos aquí
             $mandango->flush();




sábado 26 de marzo de 2011
Sistema (simple) de Queries
                                 Orientado a objetos.
                             Mismos conceptos que Mongo.




sábado 26 de marzo de 2011
$query = ModelArticle::query();

                 $query
                     ->criteria($criteria)
                     ->field($fields)
                     ->sort($sort)
                     ->limit($limit)
                     ->skip($skip)
                 ;

                 $query = ModelArticle::query($criteria);




sábado 26 de marzo de 2011
Perezoso

                     No consulta a la base de datos
                       hasta que no se necesita.



sábado 26 de marzo de 2011
// lógica SIN consultar la base de datos
       $query = ModelArticle::query($criteria);

       if ($sort) {
           $query->sort($sort);
       }

       if ($limit) {
           $query->limit($limit);
       }



sábado 26 de marzo de 2011
/*
      * Consulta a la base de datos.
      */

     // todos
     $articles = $query->all();
     foreach ($query as $article) {
         // ...
     }

     // uno
     $article->one();

     // contar
     $articles->count();


sábado 26 de marzo de 2011
Referencias

sábado 26 de marzo de 2011
MongoDB no tiene Joins


       $query->joins(array('author' => 1));




sábado 26 de marzo de 2011
¿Tenemos que hacer una consulta
            por referencia entonces?

                             $article1->getAuthor();
                             $article2->getAuthor();
                             // ...



sábado 26 de marzo de 2011
$in

         Mandango consulta los documentos
          referenciados en una sola query.


      $query->references(array('author'));




sábado 26 de marzo de 2011
En referencias a uno y a muchos.

                             $query->references(array(
                                 'author',
                                 'categories',
                             ));




sábado 26 de marzo de 2011
Campos

sábado 26 de marzo de 2011
$query->fields(array());


                    Consultar todos los campos de los
                   documentos es muy lento para la
                  base de datos y los objetos (hydrate!),
                  sobre todo con documentos y campos
                                grandes.


sábado 26 de marzo de 2011
$query->fields(array(
                                 'title'   => 1,
                                 'content' => 1,
                             ));


                    Seleccionar todos los campos que se
                    usan en todos los sitios es cansado.




sábado 26 de marzo de 2011
$article->getUser()->getUsername();




                             En las referencias es imposible.




sábado 26 de marzo de 2011
$firstName = $user->getProfile()->getFirstName();
         $comments = $article->getComments();




                     En los embebidos es incluso peor.




sábado 26 de marzo de 2011
$article = ModelArticle::find($id);
         $article->delete();




             Y quizás no necesitemos ningún campo.




sábado 26 de marzo de 2011
¿Soluciones?
                   •         Usar documentos más pequeños
                         •     Perdemos potencia del esquema libre
                   •         Usar menos embebidos
                         •     Perdemos potencia de usar documentos
                   •         Tener moral y seleccionar a mano todos los
                             campos que se usan.
                         •     Pff...
                   •         O...

sábado 26 de marzo de 2011
Mandango
      Query Fields Cache

sábado 26 de marzo de 2011
Consulta sólo lo que
                            usas
                    automáticamente


sábado 26 de marzo de 2011
$article = ModelArticle::query()->one();

      // fields
      array(
          '_id' => 1,
      );




sábado 26 de marzo de 2011
$article = ModelArticle::query()->one();
      $article->getTitle();
      $article->getContent();

      // fields
      array(
          '_id' => 1,
          'title' => 1,
          'content' => 1,
      );



sábado 26 de marzo de 2011
$article = ModelArticle::query()->one();
      $article->getTitle();
      $article->getAuthor()->getName();

      // article fields
      array(
          '_id' => 1,

      );
          'title' => 1,
                               Referencias
      // author fields
      array(
          '_id' => 1,
          'name' => 1,
      );


sábado 26 de marzo de 2011
$article = ModelArticle::query()->one();
      $article->getTitle();
      $article->getSource()->getUrl();

      // article fields
      array(
          '_id' => 1,          Embebidos
          'title' => 1,
          'source.url' => 1,
      );



sábado 26 de marzo de 2011
Se acabó el preocuparse
                por el tamaño de los
                    documentos


sábado 26 de marzo de 2011
¿Cómo?
                       Mandango por defecto no consulta ningún campo.

                 Consulta perezosamente la primera vez, y guarda los
                campos que usas en cache para consultarlos a partir de
                                la segunda petición.

                No importa si cambias el código y usas más campos, se
                                  van añadiendo.



sábado 26 de marzo de 2011
¿Killer feature?
      Yo sólo se que es extremadamente eficiente ;)




sábado 26 de marzo de 2011
¿Cuán rápido es Mandango
               entonces?


sábado 26 de marzo de 2011
3-4x comparado con
                          DoctrineMongo
                         en casos normales


sábado 26 de marzo de 2011
50




             37.5
 Time (ms)




              25
                                                                  Mandango
                                                                  DoctrineMongo




             12.5




               0
                             Insert   Update   Delete   Hydrate
sábado 26 de marzo de 2011
4-5-6-7-8-+x en casos de
             usar pocos campos en
             documentos complejos


sábado 26 de marzo de 2011
Y además usa 2-3x menos
               de memoria ;)


sábado 26 de marzo de 2011
sfMandangoPlugin

sábado 26 de marzo de 2011
MandangoBundle

sábado 26 de marzo de 2011
Mandango es a los ODMs lo que
       MongoDB a las bases de datos



sábado 26 de marzo de 2011
¿Preguntas?



sábado 26 de marzo de 2011

Weitere ähnliche Inhalte

Kürzlich hochgeladen

Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificialcynserafini89
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1ivanapaterninar
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersIván López Martín
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosAlbanyMartinez7
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docxobandopaula444
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzzAlexandergo5
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesEdomar AR
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 

Kürzlich hochgeladen (20)

Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificial
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 Testcontainers
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos Juridicos
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzz
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, Aplicaciones
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 

Empfohlen

Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTExpeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Applitools
 

Empfohlen (20)

Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 

Mandango al descubierto

  • 1. Mandango al descubierto Pablo Díez 1ª Meetup Symfony Madrid - 26 de marzo de 2011 sábado 26 de marzo de 2011
  • 2. ¿MongoDB? sábado 26 de marzo de 2011
  • 3. humongous sábado 26 de marzo de 2011
  • 4. NOSQL • No SQL Not Only SQL • Necesidades de rendimiento • Especialmente webs • Gran cantidad de datos • Gran cantidad de lecturas y escrituras sábado 26 de marzo de 2011
  • 5. MongoDB • Alto rendimiento • Escalable • Orientada a documentos • Esquema libre • Extremadamente sencilla • Índices • Código abierto • Continua evolución sábado 26 de marzo de 2011
  • 6. MongoDB es la base de datos NOSQL más similar en conceptos a las SQL sábado 26 de marzo de 2011
  • 7. Base de datos == Base de datos Tabla == Colección Registro ~= Documento sábado 26 de marzo de 2011
  • 8. Documentos Simplemente datos representados en JSON sábado 26 de marzo de 2011
  • 9. { username: pablodip, email: pablodip@gmail.com } sábado 26 de marzo de 2011
  • 10. Documentos En arrays en PHP sábado 26 de marzo de 2011
  • 11. array( 'username' => 'pablodip', 'email' => 'pablodip@gmail.com', ) sábado 26 de marzo de 2011
  • 12. Documentos embebidos Documentos dentro de otros documentos sábado 26 de marzo de 2011
  • 13. array( 'username' => 'pablodip', 'email' => 'pablodip@gmail.com', 'profile' => array( 'first_name' => 'Pablo', 'last_name' => 'Díez', ), ) sábado 26 de marzo de 2011
  • 14. array( 'title' => 'MongoDB Rocks!', 'content' => 'blah blah blah', 'tags' => array('mongodb', 'databases'), 'comments' => array( array( 'name' => 'pablodip', 'text' => 'blah', ), array( 'name' => 'barbelith', 'text' => 'blah', ), ), ) sábado 26 de marzo de 2011
  • 15. Al vuelo Las bases de datos y colecciones se crean automáticamente la primera vez que se usan sábado 26 de marzo de 2011
  • 16. $mongo = new Mongo('mongodb://localhost:27017'); $database = $mongo->selectDatabase('symfony2'); $collection = $database->selectCollection('user'); sábado 26 de marzo de 2011
  • 17. Esquema libre Cada documento puede usar los campos que quiera incluso en la misma colección sábado 26 de marzo de 2011
  • 18. array( 'username' => 'pablodip', 'city' => 'Zamora', 'odm' => 'Mandango', ) array( 'username' => 'barbelith', 'country' => 'Valladolid', 'database' => 'book', 'phones' => array('806XXX', '902XXX') ) sábado 26 de marzo de 2011
  • 19. Sencillo Guardar arrays, consultar arrays sábado 26 de marzo de 2011
  • 20. $pablodip = array( 'username' => 'pablodip', 'email' => 'pablodip@gmail.com', ); $collection->save($pablodip); sábado 26 de marzo de 2011
  • 21. $criteria = array( 'username' => 'pablodip' ); $pablodip = $collection->findOne($criteria); $pablodip['city'] = 'Zamora'; $collection->save($pablodip); sábado 26 de marzo de 2011
  • 22. Sencillo Consultas realmente sencillas sábado 26 de marzo de 2011
  • 23. // SELECT * FROM article $articles = $db->article->find(); // SELECT * FROM article WHERE is_active="true" $articles = $db->article->find(array('is_active' => true)); // SELECT id, title FROM article WHERE author='pablodip' $criteria = array('author' => 'pablodip'); $fields = array('_id' => 1, 'title' => 1); $articles = $db->article->find($criteria, $fields); sábado 26 de marzo de 2011
  • 24. // SELECT * FROM article ORDER BY date ASC $articles = $db->article->find()->sort(array('date' => 1)); // DESC $articles = $db->article->find()->sort(array('date' => -1)); // SELECT * FROM article LIMIT 10, 2 $articles = $db->article->find()->limit(10)->skip(2); sábado 26 de marzo de 2011
  • 25. // un resultado $article = $db->article->findOne(); // criteria, fields $article = $db->article->findOne($criteria, $fields); sábado 26 de marzo de 2011
  • 26. Actualizaciones parciales Muy eficientes sábado 26 de marzo de 2011
  • 27. $criteria = array('username' => 'pablodip'); $update = array('$set' => array('city' => 'Oxford')); $db->article->update($criteria, $update); sábado 26 de marzo de 2011
  • 28. Conclusiones • MongoDB es una base de datos ultrarápida • MongoDB comparte muchos conceptos con bases de datos relacionales • MongoDB es extremadamente sencilla de usar • Creación de bases de datos y colecciones al vuelo • Esquema libre (sin migraciones) • Consultas sencillas sábado 26 de marzo de 2011
  • 29. MongoDB - • Sin integridad referencial • Transacciones sólo a nivel de documento sábado 26 de marzo de 2011
  • 30. Puedes usar MongoDB en cualquier proyecto, simplemente si necesitas integridad referencial o transacciones a nivel de colección o base de datos necesitas combinarla con una base de datos relacional. sábado 26 de marzo de 2011
  • 31. ¡Pero queremos objetos! sábado 26 de marzo de 2011
  • 32. ODM Object Document Mapper sábado 26 de marzo de 2011
  • 33. DoctrineMongo ¿Ein? sábado 26 de marzo de 2011
  • 34. Mondongo... sábado 26 de marzo de 2011
  • 35. Demasiados Mondongos por Google y Twitter ;) sábado 26 de marzo de 2011
  • 36. ¡Mejor Mandangos! sábado 26 de marzo de 2011
  • 37. Mandango es a los ODMs lo que MongoDB a las bases de datos sábado 26 de marzo de 2011
  • 38. Mandango • Sencillo • Fácil de usar • Potente • Referencias, embebidos, relaciones • Unit of Work • Sistema de Queries • Behaviors, índices, eventos • ... • Ultrarápido sábado 26 de marzo de 2011
  • 39. Fácil de usar Mismos conceptos que cualquier mapeador. Sin magia, todo el código es generado. Autocompletado IDE + sábado 26 de marzo de 2011
  • 40. $article = new Article(); $article->setTitle('foo'); $article->setContent('bar'); $article->save(); sábado 26 de marzo de 2011
  • 41. Fácil de usar Interfaz fluida sábado 26 de marzo de 2011
  • 42. $article = Article::create() ->setTitle('foo') ->setContent('bar') ->save() ; sábado 26 de marzo de 2011
  • 43. Fácil de usar Sencillo uso de namespaces. Convención: Model... sábado 26 de marzo de 2011
  • 44. $mandango = ModelArticle::mandango(); $repository = ModelArticle::repository(); $query = ModelArticle::query(); $article = ModelArticle::find($id); $collection = ModelArticle::collection(); sábado 26 de marzo de 2011
  • 45. Referencia, embebidos Automáticamente; embebidos profundos sábado 26 de marzo de 2011
  • 46. // references one $article->setAuthor($author); $author = $article->getAuthor(); // references many $article->getCategories()->add($category); $article->getCategories()->remove($category); $categories = $article->getCategories()->saved(); foreach ($article->getCategories()) { // ... } sábado 26 de marzo de 2011
  • 47. // embeddeds one $article->setSource($source); $source = $article->getSource(); // embeddeds many $article->getComments()->add($comment); $article->getComments()->remove($comment); $comments = $article->getComments()->saved(); foreach ($article->getComments() as $comment) { // ... } sábado 26 de marzo de 2011
  • 48. Unit of Work ¡Todo a la vez! sábado 26 de marzo de 2011
  • 49. $article = ModelArticle::create()->setTitle('foo'); $mandango->persist($article); $author = ModelAuthor::create()->setName('bar'); $mandango->persist($author); $user = ModelUser::query()->one(); $mandango->remove($user); $category = ModelCategory::query()->one(); $category->setName('foobar'); $mandango->persist($category); // todo es enviado a la base de datos aquí $mandango->flush(); sábado 26 de marzo de 2011
  • 50. Sistema (simple) de Queries Orientado a objetos. Mismos conceptos que Mongo. sábado 26 de marzo de 2011
  • 51. $query = ModelArticle::query(); $query ->criteria($criteria) ->field($fields) ->sort($sort) ->limit($limit) ->skip($skip) ; $query = ModelArticle::query($criteria); sábado 26 de marzo de 2011
  • 52. Perezoso No consulta a la base de datos hasta que no se necesita. sábado 26 de marzo de 2011
  • 53. // lógica SIN consultar la base de datos $query = ModelArticle::query($criteria); if ($sort) { $query->sort($sort); } if ($limit) { $query->limit($limit); } sábado 26 de marzo de 2011
  • 54. /* * Consulta a la base de datos. */ // todos $articles = $query->all(); foreach ($query as $article) { // ... } // uno $article->one(); // contar $articles->count(); sábado 26 de marzo de 2011
  • 55. Referencias sábado 26 de marzo de 2011
  • 56. MongoDB no tiene Joins $query->joins(array('author' => 1)); sábado 26 de marzo de 2011
  • 57. ¿Tenemos que hacer una consulta por referencia entonces? $article1->getAuthor(); $article2->getAuthor(); // ... sábado 26 de marzo de 2011
  • 58. $in Mandango consulta los documentos referenciados en una sola query. $query->references(array('author')); sábado 26 de marzo de 2011
  • 59. En referencias a uno y a muchos. $query->references(array( 'author', 'categories', )); sábado 26 de marzo de 2011
  • 60. Campos sábado 26 de marzo de 2011
  • 61. $query->fields(array()); Consultar todos los campos de los documentos es muy lento para la base de datos y los objetos (hydrate!), sobre todo con documentos y campos grandes. sábado 26 de marzo de 2011
  • 62. $query->fields(array( 'title' => 1, 'content' => 1, )); Seleccionar todos los campos que se usan en todos los sitios es cansado. sábado 26 de marzo de 2011
  • 63. $article->getUser()->getUsername(); En las referencias es imposible. sábado 26 de marzo de 2011
  • 64. $firstName = $user->getProfile()->getFirstName(); $comments = $article->getComments(); En los embebidos es incluso peor. sábado 26 de marzo de 2011
  • 65. $article = ModelArticle::find($id); $article->delete(); Y quizás no necesitemos ningún campo. sábado 26 de marzo de 2011
  • 66. ¿Soluciones? • Usar documentos más pequeños • Perdemos potencia del esquema libre • Usar menos embebidos • Perdemos potencia de usar documentos • Tener moral y seleccionar a mano todos los campos que se usan. • Pff... • O... sábado 26 de marzo de 2011
  • 67. Mandango Query Fields Cache sábado 26 de marzo de 2011
  • 68. Consulta sólo lo que usas automáticamente sábado 26 de marzo de 2011
  • 69. $article = ModelArticle::query()->one(); // fields array( '_id' => 1, ); sábado 26 de marzo de 2011
  • 70. $article = ModelArticle::query()->one(); $article->getTitle(); $article->getContent(); // fields array( '_id' => 1, 'title' => 1, 'content' => 1, ); sábado 26 de marzo de 2011
  • 71. $article = ModelArticle::query()->one(); $article->getTitle(); $article->getAuthor()->getName(); // article fields array( '_id' => 1, ); 'title' => 1, Referencias // author fields array( '_id' => 1, 'name' => 1, ); sábado 26 de marzo de 2011
  • 72. $article = ModelArticle::query()->one(); $article->getTitle(); $article->getSource()->getUrl(); // article fields array( '_id' => 1, Embebidos 'title' => 1, 'source.url' => 1, ); sábado 26 de marzo de 2011
  • 73. Se acabó el preocuparse por el tamaño de los documentos sábado 26 de marzo de 2011
  • 74. ¿Cómo? Mandango por defecto no consulta ningún campo. Consulta perezosamente la primera vez, y guarda los campos que usas en cache para consultarlos a partir de la segunda petición. No importa si cambias el código y usas más campos, se van añadiendo. sábado 26 de marzo de 2011
  • 75. ¿Killer feature? Yo sólo se que es extremadamente eficiente ;) sábado 26 de marzo de 2011
  • 76. ¿Cuán rápido es Mandango entonces? sábado 26 de marzo de 2011
  • 77. 3-4x comparado con DoctrineMongo en casos normales sábado 26 de marzo de 2011
  • 78. 50 37.5 Time (ms) 25 Mandango DoctrineMongo 12.5 0 Insert Update Delete Hydrate sábado 26 de marzo de 2011
  • 79. 4-5-6-7-8-+x en casos de usar pocos campos en documentos complejos sábado 26 de marzo de 2011
  • 80. Y además usa 2-3x menos de memoria ;) sábado 26 de marzo de 2011
  • 83. Mandango es a los ODMs lo que MongoDB a las bases de datos sábado 26 de marzo de 2011
  • 84. ¿Preguntas? sábado 26 de marzo de 2011