SlideShare una empresa de Scribd logo
1 de 49
#mongodbwebinar




Primera Aplicacíon Java
con MongoDB
Norberto Leite
Solutions Architect, 10gen
Agenda
• Que és MongoDB?
• Base de Datos Orientada a Documentos
• Informes sobre Pistas de Esqui App
• Aggregation Framework
• MongoDB Drivers
• Indices, Replicacion, Sharding
MongoDB, esto que és?
MongoDB és una base de datos
…
• BD Orientada a Documentos
• Codigo abierto
• Alto rendimiento
• Escalabilidad horizontal
• Llena de funcionalidade
BD Orientada a Documentos
• Un documento és una extructura de datos
• Documento == JSON object
• Documento == PHP Array
• Documento == Python Dict
• Documento == Ruby Hash
• Documento == DBObject (JAVA )
Codigo Abierto
• MongoDB és un proyecto open source
   – https://www.github.com/mongodb

• Licencia AGPL
• 10gen és responsable por su desarrollo
• Licencias comerciales disponibles
• Contribuiciones? Bienvenidas!
Alto Rendimiento
• C++
• Basado en el uso extensivo de memory-mapped
 files .
• Multiplataforma
   – Windows, Linux, Mac, Solaris(Joyent)
   – Cloud, virtual, shared, private, physical servers

• BSON (formato binario de JSON)
• Indices primários y secondários
• Document model = less work
Escalabilidad Horizontal
Funcionalidades
• Consultas Ad Hoc
• Agregación en tiempo real
• Consistente
• Capacidades de consulta Geoespacial
• Suporte para las lenguages de programación
 mas utilizadas
• Modelo / Esquema flexible
http://www.mongodb.org/downloads
Mongo Shell
Base de Datos Orientada a
Documentos
RDBMS                MongoDB
Table, View   ➜   Collection
Row           ➜   Document
Index         ➜   Index
Join          ➜   Embedded Document
Foreign Key   ➜   Reference
Partition     ➜   Shard


Terminologia
Tradicional (relational) DER
MongoDB DER
Estado De Pistas App
Vamos a crear una applicacíon
de informes de pistas de esqui
               http://images.nationalgeographic.com/wpf/media-
        live/photos/000/327/cache/adventure-ski-snowboard-pictures-
                            20_32703_600x450.jpg
Que queremos hacer?
• Guardar informes sobre pistas
• Buscar los informes actuales de pistas
• Actualizar la precision del informe
• Las mejores pistas
Documento Informe
{
    _id = ObjectId("4fff33619ef172b68a000004"),          Clave Primaria
    reporter: "wingman",
    location:{
         coordinates: [42.774031,-0.364158],       Índice geoespacial
         name: “Formigal”,
         country: “ESP”
    },
    conditions: {
         snow: “polvo”,
         wind: “moderate”,           Índice compuesto
         temperature: -2
    },
    date: ISODate(“2013-02-12T15:00:00Z”)               TTL Índice
}
Java: DBObjects
BasicDBObject report = new BasicDBObject();
report.put(“reporter”, “wingman”);                    {
                                                      {
                                            {         reporter: “wingman”,
                                                      snow:”polvo”,
report.put(“date”, new Date());
                                            reporter:”wingman”,
                                                      date: ISODate(“20130212”),
                                                      wind:”moderado”,
                                            date:”ISODate(“20130212”),
                                                      }
                                                      temperature: -2
                                            conditions:{
BasicDBObject location = new BasicDBObject();
                                                      }
location.put(“name”, “Formigal”);                snow:”polvo”,
location.put(“country”, “ESP”);                  wind:”moderado”,
                                                 temperature: -2
location.put(“coordinates”, new double[]{42.774031,-0.364158});
                                                 },
                                            location:{
BasicDBObject conditions = new BasicDBObject();  name: “Formigal”,
conditions.put(“snow”, “polvo”);                 country: “ESP”,
                                               {
conditions.put(“wind”, “moderado”);              coordinates:[42.774031,-
                                               name: “Formigal”,
                                            0.364158],
conditions.put(“temperature”, -2);             country: “ESP”,
                                                 }
                                               coordinates: [42.774031,-0.364158],
                                            }
report.put(“conditions”, conditions);          }
report.put(“location”, location);
Conectar con la Base de Datos

List<ServerAddress> serverList = new List<ServerAddress>();
serverList.add( new ServerAddress( “localhost”, 27017 ) );
serverList.add( new ServerAddress( “localhost”, 27018 ) );
serverList.add( new ServerAddress( “localhost”, 27019 ) );


MongoClient m = new MongoClient( serverList )
DB db = m.get( “esqui” );
DBCollection collection = db.getCollection( “informes” );


  Lista de Servidores
      Objecto BD            Pool de Conexiones
                             Objecto Collection
     (Replica Set)
Insertar documentos
Mongo m = MongoClient( “localhost”, 27017 );
DB db = m.getDB(“esqui”);
DBCollection coll = db.getCollection(“informes”);


coll.insert( report );            Insertar nuevo informe
//vamos a recuperar para ver que insertamos
BasicDBObject outReport = coll.findOne();
System.out.println(outReport);
                                                             Recuperamos el
                                                           documento de la BD

>>{ "_id" : { "$oid" : "51193452a0ee57d0766a533c"} , "reporter" : "wingman"
, "date" : { "$date" : "2013-02-11T18:11:30.298Z"} , "location" : {
"coordinates" : [ 42.774031 , -0.364158] , "name" : "formigal" , "country" :
"ESP"} , "conditions" : { "snow" : "polvo" , "wind" : "moderate" ,
"temperature" : -2}}
Buscar informe de pista mas
cercana - shell
>db.informes.find( {
       “location.coordinates”: { $near: [40.724511,-73.997254] },
       “date: {$gte: new Date(2013, 02, 12) } } ,
       { “location.name”: 1, “conditions”: 1, _id: 0}
).sort( { “conditions.temperature”: -1 } )



   •    Buscar la pista mas cercana
   •    Buscar por el informe de hoy
   •    Enseñar solo el nombre y las condiciones de pista
   •    Ordenar por temperatura
Buscar informe de pista mas
cercana - Java
DBObject fields = new BasicDBObject();

//si no queremos _id tenemos que decir explicitamente

fields.put("_id", 0);
                                                             Ordenar descendente temperatura
                                                              Campos quepor de hoy enseñar
                                                                  Buscar queremos
                                                                      Fecha proximidad
fields.put("conditions", 1);

fields.put("location.name", 1);

DBObject filter = new BasicDBObject();
                                                              {
//near part                                                   location.coordinates: {
                                                              date: { 0,
                                                                   _id:
DBObject near = new BasicDBObject();                          { conditions.temperature: -1 }
                                                                   $near: [long, lat]
                                                                   $gte: ISODate(2013, 2, 12)
                                                                   conditions: 1,
near.put("$near", new double[]{ longitude, latitude });       }
                                                              }    location.name: 1
filter.put("location.coordinates", near);
                                                              }
DBObject gte = new BasicDBObject("$gte", new Date(2013, 2, 12));

filter.put( “date”, gte);

DBObject orderBy = new BasicDBObject();

orderBy.put("location.temperature", -1);



return coll.find(filter, fields).sort(orderBy);
Actualizar la precision de un
reporter
DBObject query = new BasicDBObject("reporter", reporter);
DBObject accuracy = new BasicDBObject("accuracy", 1);
DBObject update = new BasicDBObject( "$inc" , inc );
//retorna el valor anterior al cambio
return coll.findAndModify(query, update);

  Retornamos el estado anterior             Añadimos nuevo campo
  Para un determinado reporter
           al update                        incrementando su valor
>db.informes.find({“reporter”: “wingman”}, {“accuracy”:1, “_id”:0})

{ ”accuracy" : 1}



  Si buscamos en la BD podemos confirmar que se
  aplica el nuevo campo con el incremento correcto
Un poco de analytics
Aggregation Framework
Aggregation Framework
• Se declara en JSON, se executa en C++
• Flexible, funcional y simple
   – Operaciones en pipeline
   – Expresiones computacionales

• Integracion completa con sharding
Pipeline
• Procesamiento de documentos en cadena
  – Se ejecuta sobre una collection
  – El resultado final és un documento

• Contiene una serie de operadores
  – Fitran y cambian datos
  – El resultado del primero son los datos de entrada del
    siguiente
                ps ax | grep mongod | head -n 1
Operadores
• $match
• $project
• $group
• $unwind
• $sort
• $limit
• $skip
Cual es el numero de
pistas esquiables?
Numero de pistas esquiables
• Las que tienen informes favorables
   – Pistas solamente con viento “moderado”
   – Temperatura nunca por debajo de los -5

• Agrupar por tipo de nieve
Numero de pistas esquiables
DBObject matchTemperature = new BasicDBObject("$match", new BasicDBObject(
"conditions.temperature", new BasicDBObject("$gte", minTemperature ) ) );

DBObject matchWind = new BasicDBObject( "$match", new BasicDBObject("wind",
"moderado") );

DBObject groupBy = new BasicDBObject("_id", "$conditions.snow");

groupBy.put("sum", new BasicDBObject( "$sum", 1 ) );

DBObject group = new BasicDBObject("$group", groupBy );
AggregationOutput ouptut = coll.aggregate(matchWind, matchTemperature, group);
if (!ouptut.getCommandResult().ok()){

      throw new Exception(ouptut.getCommandResult().getErrorMessage());

}                                        El resultado del comando es un documento
return (DBObject) ouptut.getCommandResult().get("result");

    Agregamos por tipo de nieve sumando lo numero de pistas con las mismas
                     Filtramos por temperatura y viento
                    Executamos el comando de agregacion
                                   condiciones
MongoDB Drivers
Si JAVA no es la unica
lenguage de
programacion que te
gusta
MongoDB tiene drivers
para las lenguages más
utilizadas, soportadas
por 10gen!
Y muchas otras
soportadas por la
comunidad
MongoDB drivers
• Soporte oficial hasta12 lenguages
• La comunidad tiene muchas otras
• Drivers conectan tu App a MongoDB server
• Drivers traducen objectos y estruturas de datos
 en BSON
• La instalacion de los mismos sigue los standards
 del ecosistema (npm, pecl, gem, pip)
Cursos Online
Java Developers: 25/02/2013
      https://education.10gen.com/courses/10gen/M101J/2013_Spring/about
Que más ?
Hay un mundo de temas
por explorar en lo que
toca a MongoDB
Diseño de Esquema (DRE)
Indices
Replicacion – Alta
Disponibilidad
Sharding – Escalabilidade
Horizontal
#mongodbwebinar




Cuestiones?
Norberto Leite
Solutions Architect, 10gen
@nleite - norberto@10gen.com

Más contenido relacionado

Más de MongoDB

MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB AtlasMongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB AtlasMongoDB
 
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!MongoDB
 
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...MongoDB
 
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDBMongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDBMongoDB
 
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...MongoDB
 
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series DataMongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series DataMongoDB
 
MongoDB SoCal 2020: MongoDB Atlas Jump Start
 MongoDB SoCal 2020: MongoDB Atlas Jump Start MongoDB SoCal 2020: MongoDB Atlas Jump Start
MongoDB SoCal 2020: MongoDB Atlas Jump StartMongoDB
 
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]MongoDB
 
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2MongoDB
 
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...MongoDB
 
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!MongoDB
 
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your MindsetMongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your MindsetMongoDB
 
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas JumpstartMongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas JumpstartMongoDB
 
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...MongoDB
 
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++MongoDB
 
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...MongoDB
 
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep DiveMongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep DiveMongoDB
 
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & GolangMongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & GolangMongoDB
 
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...MongoDB
 
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...MongoDB
 

Más de MongoDB (20)

MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB AtlasMongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
 
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
 
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
 
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDBMongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
 
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
 
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series DataMongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
 
MongoDB SoCal 2020: MongoDB Atlas Jump Start
 MongoDB SoCal 2020: MongoDB Atlas Jump Start MongoDB SoCal 2020: MongoDB Atlas Jump Start
MongoDB SoCal 2020: MongoDB Atlas Jump Start
 
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
 
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
 
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
 
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
 
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your MindsetMongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
 
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas JumpstartMongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
 
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
 
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
 
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
 
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep DiveMongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
 
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & GolangMongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
 
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
 
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
 

Último

Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...axelv9257
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdfpresentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdfaxelv9257
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosJhonJairoRodriguezCe
 
Editorial. Grupo de 12B. La Salle Margarita.pdf
Editorial. Grupo de 12B. La Salle Margarita.pdfEditorial. Grupo de 12B. La Salle Margarita.pdf
Editorial. Grupo de 12B. La Salle Margarita.pdfYanitza28
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
Generaciones de las Computadoras..pdf...
Generaciones de las Computadoras..pdf...Generaciones de las Computadoras..pdf...
Generaciones de las Computadoras..pdf...solanocortezluisalfr
 
Retornamos a la escuela y nos organizamos para convivir en armonía
Retornamos a la escuela y nos organizamos para convivir en armoníaRetornamos a la escuela y nos organizamos para convivir en armonía
Retornamos a la escuela y nos organizamos para convivir en armoníaJuanPabloVictorianoS
 
Editorial. Grupo de 12B de La Salle Margarita.pdf
Editorial. Grupo de 12B de La Salle Margarita.pdfEditorial. Grupo de 12B de La Salle Margarita.pdf
Editorial. Grupo de 12B de La Salle Margarita.pdfYanitza28
 
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptxinfor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptxgustavovasquezv56
 

Último (17)

Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdfpresentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
Editorial. Grupo de 12B. La Salle Margarita.pdf
Editorial. Grupo de 12B. La Salle Margarita.pdfEditorial. Grupo de 12B. La Salle Margarita.pdf
Editorial. Grupo de 12B. La Salle Margarita.pdf
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Generaciones de las Computadoras..pdf...
Generaciones de las Computadoras..pdf...Generaciones de las Computadoras..pdf...
Generaciones de las Computadoras..pdf...
 
Retornamos a la escuela y nos organizamos para convivir en armonía
Retornamos a la escuela y nos organizamos para convivir en armoníaRetornamos a la escuela y nos organizamos para convivir en armonía
Retornamos a la escuela y nos organizamos para convivir en armonía
 
Editorial. Grupo de 12B de La Salle Margarita.pdf
Editorial. Grupo de 12B de La Salle Margarita.pdfEditorial. Grupo de 12B de La Salle Margarita.pdf
Editorial. Grupo de 12B de La Salle Margarita.pdf
 
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptxinfor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
 

Webinar: Creación de su primera aplicación Java con MongoDB

  • 1. #mongodbwebinar Primera Aplicacíon Java con MongoDB Norberto Leite Solutions Architect, 10gen
  • 2. Agenda • Que és MongoDB? • Base de Datos Orientada a Documentos • Informes sobre Pistas de Esqui App • Aggregation Framework • MongoDB Drivers • Indices, Replicacion, Sharding
  • 4. MongoDB és una base de datos … • BD Orientada a Documentos • Codigo abierto • Alto rendimiento • Escalabilidad horizontal • Llena de funcionalidade
  • 5. BD Orientada a Documentos • Un documento és una extructura de datos • Documento == JSON object • Documento == PHP Array • Documento == Python Dict • Documento == Ruby Hash • Documento == DBObject (JAVA )
  • 6. Codigo Abierto • MongoDB és un proyecto open source – https://www.github.com/mongodb • Licencia AGPL • 10gen és responsable por su desarrollo • Licencias comerciales disponibles • Contribuiciones? Bienvenidas!
  • 7. Alto Rendimiento • C++ • Basado en el uso extensivo de memory-mapped files . • Multiplataforma – Windows, Linux, Mac, Solaris(Joyent) – Cloud, virtual, shared, private, physical servers • BSON (formato binario de JSON) • Indices primários y secondários • Document model = less work
  • 9. Funcionalidades • Consultas Ad Hoc • Agregación en tiempo real • Consistente • Capacidades de consulta Geoespacial • Suporte para las lenguages de programación mas utilizadas • Modelo / Esquema flexible
  • 12. Base de Datos Orientada a Documentos
  • 13. RDBMS MongoDB Table, View ➜ Collection Row ➜ Document Index ➜ Index Join ➜ Embedded Document Foreign Key ➜ Reference Partition ➜ Shard Terminologia
  • 17. Vamos a crear una applicacíon de informes de pistas de esqui http://images.nationalgeographic.com/wpf/media- live/photos/000/327/cache/adventure-ski-snowboard-pictures- 20_32703_600x450.jpg
  • 18. Que queremos hacer? • Guardar informes sobre pistas • Buscar los informes actuales de pistas • Actualizar la precision del informe • Las mejores pistas
  • 19. Documento Informe { _id = ObjectId("4fff33619ef172b68a000004"), Clave Primaria reporter: "wingman", location:{ coordinates: [42.774031,-0.364158], Índice geoespacial name: “Formigal”, country: “ESP” }, conditions: { snow: “polvo”, wind: “moderate”, Índice compuesto temperature: -2 }, date: ISODate(“2013-02-12T15:00:00Z”) TTL Índice }
  • 20. Java: DBObjects BasicDBObject report = new BasicDBObject(); report.put(“reporter”, “wingman”); { { { reporter: “wingman”, snow:”polvo”, report.put(“date”, new Date()); reporter:”wingman”, date: ISODate(“20130212”), wind:”moderado”, date:”ISODate(“20130212”), } temperature: -2 conditions:{ BasicDBObject location = new BasicDBObject(); } location.put(“name”, “Formigal”); snow:”polvo”, location.put(“country”, “ESP”); wind:”moderado”, temperature: -2 location.put(“coordinates”, new double[]{42.774031,-0.364158}); }, location:{ BasicDBObject conditions = new BasicDBObject(); name: “Formigal”, conditions.put(“snow”, “polvo”); country: “ESP”, { conditions.put(“wind”, “moderado”); coordinates:[42.774031,- name: “Formigal”, 0.364158], conditions.put(“temperature”, -2); country: “ESP”, } coordinates: [42.774031,-0.364158], } report.put(“conditions”, conditions); } report.put(“location”, location);
  • 21. Conectar con la Base de Datos List<ServerAddress> serverList = new List<ServerAddress>(); serverList.add( new ServerAddress( “localhost”, 27017 ) ); serverList.add( new ServerAddress( “localhost”, 27018 ) ); serverList.add( new ServerAddress( “localhost”, 27019 ) ); MongoClient m = new MongoClient( serverList ) DB db = m.get( “esqui” ); DBCollection collection = db.getCollection( “informes” ); Lista de Servidores Objecto BD Pool de Conexiones Objecto Collection (Replica Set)
  • 22. Insertar documentos Mongo m = MongoClient( “localhost”, 27017 ); DB db = m.getDB(“esqui”); DBCollection coll = db.getCollection(“informes”); coll.insert( report ); Insertar nuevo informe //vamos a recuperar para ver que insertamos BasicDBObject outReport = coll.findOne(); System.out.println(outReport); Recuperamos el documento de la BD >>{ "_id" : { "$oid" : "51193452a0ee57d0766a533c"} , "reporter" : "wingman" , "date" : { "$date" : "2013-02-11T18:11:30.298Z"} , "location" : { "coordinates" : [ 42.774031 , -0.364158] , "name" : "formigal" , "country" : "ESP"} , "conditions" : { "snow" : "polvo" , "wind" : "moderate" , "temperature" : -2}}
  • 23. Buscar informe de pista mas cercana - shell >db.informes.find( { “location.coordinates”: { $near: [40.724511,-73.997254] }, “date: {$gte: new Date(2013, 02, 12) } } , { “location.name”: 1, “conditions”: 1, _id: 0} ).sort( { “conditions.temperature”: -1 } ) • Buscar la pista mas cercana • Buscar por el informe de hoy • Enseñar solo el nombre y las condiciones de pista • Ordenar por temperatura
  • 24. Buscar informe de pista mas cercana - Java DBObject fields = new BasicDBObject(); //si no queremos _id tenemos que decir explicitamente fields.put("_id", 0); Ordenar descendente temperatura Campos quepor de hoy enseñar Buscar queremos Fecha proximidad fields.put("conditions", 1); fields.put("location.name", 1); DBObject filter = new BasicDBObject(); { //near part location.coordinates: { date: { 0, _id: DBObject near = new BasicDBObject(); { conditions.temperature: -1 } $near: [long, lat] $gte: ISODate(2013, 2, 12) conditions: 1, near.put("$near", new double[]{ longitude, latitude }); } } location.name: 1 filter.put("location.coordinates", near); } DBObject gte = new BasicDBObject("$gte", new Date(2013, 2, 12)); filter.put( “date”, gte); DBObject orderBy = new BasicDBObject(); orderBy.put("location.temperature", -1); return coll.find(filter, fields).sort(orderBy);
  • 25. Actualizar la precision de un reporter DBObject query = new BasicDBObject("reporter", reporter); DBObject accuracy = new BasicDBObject("accuracy", 1); DBObject update = new BasicDBObject( "$inc" , inc ); //retorna el valor anterior al cambio return coll.findAndModify(query, update); Retornamos el estado anterior Añadimos nuevo campo Para un determinado reporter al update incrementando su valor >db.informes.find({“reporter”: “wingman”}, {“accuracy”:1, “_id”:0}) { ”accuracy" : 1} Si buscamos en la BD podemos confirmar que se aplica el nuevo campo con el incremento correcto
  • 26. Un poco de analytics
  • 28. Aggregation Framework • Se declara en JSON, se executa en C++ • Flexible, funcional y simple – Operaciones en pipeline – Expresiones computacionales • Integracion completa con sharding
  • 29. Pipeline • Procesamiento de documentos en cadena – Se ejecuta sobre una collection – El resultado final és un documento • Contiene una serie de operadores – Fitran y cambian datos – El resultado del primero son los datos de entrada del siguiente ps ax | grep mongod | head -n 1
  • 30. Operadores • $match • $project • $group • $unwind • $sort • $limit • $skip
  • 31. Cual es el numero de pistas esquiables?
  • 32. Numero de pistas esquiables • Las que tienen informes favorables – Pistas solamente con viento “moderado” – Temperatura nunca por debajo de los -5 • Agrupar por tipo de nieve
  • 33. Numero de pistas esquiables DBObject matchTemperature = new BasicDBObject("$match", new BasicDBObject( "conditions.temperature", new BasicDBObject("$gte", minTemperature ) ) ); DBObject matchWind = new BasicDBObject( "$match", new BasicDBObject("wind", "moderado") ); DBObject groupBy = new BasicDBObject("_id", "$conditions.snow"); groupBy.put("sum", new BasicDBObject( "$sum", 1 ) ); DBObject group = new BasicDBObject("$group", groupBy ); AggregationOutput ouptut = coll.aggregate(matchWind, matchTemperature, group); if (!ouptut.getCommandResult().ok()){ throw new Exception(ouptut.getCommandResult().getErrorMessage()); } El resultado del comando es un documento return (DBObject) ouptut.getCommandResult().get("result"); Agregamos por tipo de nieve sumando lo numero de pistas con las mismas Filtramos por temperatura y viento Executamos el comando de agregacion condiciones
  • 35. Si JAVA no es la unica lenguage de programacion que te gusta
  • 36. MongoDB tiene drivers para las lenguages más utilizadas, soportadas por 10gen!
  • 37.
  • 38. Y muchas otras soportadas por la comunidad
  • 39.
  • 40. MongoDB drivers • Soporte oficial hasta12 lenguages • La comunidad tiene muchas otras • Drivers conectan tu App a MongoDB server • Drivers traducen objectos y estruturas de datos en BSON • La instalacion de los mismos sigue los standards del ecosistema (npm, pecl, gem, pip)
  • 42. Java Developers: 25/02/2013 https://education.10gen.com/courses/10gen/M101J/2013_Spring/about
  • 44. Hay un mundo de temas por explorar en lo que toca a MongoDB

Notas del editor

  1. AGPL – GNU Affero General Public License
  2. * Big endian and ARM not supported.
  3. Kristine to update this graphic at some point
  4. Kristine to update this graphic at some point
  5. Ask question: Is categories it&apos;s own entity? It could be, but it&apos;s likely a property of books.
  6. Add the highlight boxes 42.774031,-0.364158
  7. Add the highlight boxes 42.774031,-0.364158
  8. Add the highlights on the class objects for each
  9. Add the highlights on the class objects for each
  10. 10gen Drivers
  11. Plus community drivers.
  12. This graphic should be updated at some point.