Webinar: Creación de su primera aplicación Java con MongoDB
-
Upload
mongodb -
Category
Technology
-
view
2.333 -
download
7
Transcript of Webinar: Creación de su primera aplicación Java con MongoDB
![Page 1: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/1.jpg)
Solutions Architect, 10gen
Norberto Leite
#mongodbwebinar
Primera Aplicacíon Java con MongoDB
![Page 2: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/2.jpg)
Agenda
• Que és MongoDB?
• Base de Datos Orientada a Documentos
• Informes sobre Pistas de Esqui App
• Aggregation Framework
• MongoDB Drivers
• Indices, Replicacion, Sharding
![Page 3: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/3.jpg)
MongoDB, esto que és?
![Page 4: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/4.jpg)
MongoDB és una base de datos…
• BD Orientada a Documentos
• Codigo abierto
• Alto rendimiento
• Escalabilidad horizontal
• Llena de funcionalidade
![Page 5: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/5.jpg)
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 )
![Page 6: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/6.jpg)
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!
![Page 7: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/7.jpg)
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
![Page 8: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/8.jpg)
Escalabilidad Horizontal
![Page 9: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/9.jpg)
Funcionalidades
• Consultas Ad Hoc
• Agregación en tiempo real
• Consistente
• Capacidades de consulta Geoespacial
• Suporte para las lenguages de programaciónmas utilizadas
• Modelo / Esquema flexible
![Page 10: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/10.jpg)
http://www.mongodb.org/downloads
![Page 11: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/11.jpg)
Mongo Shell
![Page 12: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/12.jpg)
Base de Datos Orientada a Documentos
![Page 13: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/13.jpg)
RDBMS MongoDB
Table, View ➜ Collection
Row ➜ Document
Index ➜ Index
Join ➜ Embedded Document
Foreign Key ➜ Reference
Partition ➜ Shard
Terminologia
![Page 14: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/14.jpg)
Tradicional (relational) DER
![Page 15: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/15.jpg)
MongoDB DER
![Page 16: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/16.jpg)
Estado De Pistas App
![Page 17: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/17.jpg)
http://images.nationalgeographic.com/wpf/media-
live/photos/000/327/cache/adventure-ski-snowboard-pictures-
20_32703_600x450.jpg
Vamos a crear una applicacíonde informes de pistas de esqui
![Page 18: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/18.jpg)
Que queremos hacer?
• Guardar informes sobre pistas
• Buscar los informes actuales de pistas
• Actualizar la precision del informe
• Las mejores pistas
![Page 19: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/19.jpg)
{
_id = ObjectId("4fff33619ef172b68a000004"),
reporter: "wingman",
location:{
coordinates: [42.774031,-0.364158],
name: “Formigal”,
country: “ESP”
},
conditions: {
snow: “polvo”,
wind: “moderate”,
temperature: -2
},
date: ISODate(“2013-02-12T15:00:00Z”)
}
Documento Informe
Clave Primaria
Índice geoespacial
Índice compuesto
TTL Índice
![Page 20: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/20.jpg)
BasicDBObject report = new BasicDBObject();
report.put(“reporter”, “wingman”);
report.put(“date”, new Date());
BasicDBObject location = new BasicDBObject();
location.put(“name”, “Formigal”);
location.put(“country”, “ESP”);
location.put(“coordinates”, new double[]{42.774031,-0.364158});
BasicDBObject conditions = new BasicDBObject();
conditions.put(“snow”, “polvo”);
conditions.put(“wind”, “moderado”);
conditions.put(“temperature”, -2);
report.put(“conditions”, conditions);
report.put(“location”, location);
Java: DBObjects
{
reporter: “wingman”,
date: ISODate(“20130212”),
}
{
name: “Formigal”,
country: “ESP”,
coordinates: [42.774031,-0.364158],
}
{
snow:”polvo”,
wind:”moderado”,
temperature: -2
}
{
reporter:”wingman”,
date:”ISODate(“20130212”),
conditions:{
snow:”polvo”,
wind:”moderado”,
temperature: -2
},
location:{
name: “Formigal”,
country: “ESP”,
coordinates:[42.774031,-
0.364158],
}
}
![Page 21: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/21.jpg)
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” );
Conectar con la Base de Datos
Lista de Servidores
(Replica Set)Pool de ConexionesObjecto BD Objecto Collection
![Page 22: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/22.jpg)
Mongo m = MongoClient( “localhost”, 27017 );
DB db = m.getDB(“esqui”);
DBCollection coll = db.getCollection(“informes”);
coll.insert( report );
//vamos a recuperar para ver que insertamos
BasicDBObject outReport = coll.findOne();
System.out.println(outReport);
>>{ "_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}}
Insertar documentos
Insertar nuevo informe
Recuperamos el
documento de la BD
![Page 23: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/23.jpg)
>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 informe de pista mas cercana - shell
• Buscar la pista mas cercana
• Buscar por el informe de hoy
• Enseñar solo el nombre y las condiciones de pista
• Ordenar por temperatura
![Page 24: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/24.jpg)
DBObject fields = new BasicDBObject();
//si no queremos _id tenemos que decir explicitamente
fields.put("_id", 0);
fields.put("conditions", 1);
fields.put("location.name", 1);
DBObject filter = new BasicDBObject();
//near part
DBObject near = new BasicDBObject();
near.put("$near", new double[]{ longitude, latitude });
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);
Buscar informe de pista mas cercana - Java
Campos que queremos enseñar
{
_id: 0,
conditions: 1,
location.name: 1
}
Buscar por proximidad
location.coordinates: {
$near: [long, lat]
}
Fecha de hoy
date: {
$gte: ISODate(2013, 2, 12)
}
Ordenar descendente temperatura
{ conditions.temperature: -1 }
![Page 25: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/25.jpg)
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);
>db.informes.find({“reporter”: “wingman”}, {“accuracy”:1, “_id”:0})
{ ”accuracy" : 1}
Actualizar la precision de un reporter
Para un determinado reporterAñadimos nuevo campo
incrementando su valor
Retornamos el estado anterior
al update
Si buscamos en la BD podemos confirmar que se
aplica el nuevo campo con el incremento correcto
![Page 26: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/26.jpg)
Un poco de analytics
![Page 27: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/27.jpg)
Aggregation Framework
![Page 28: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/28.jpg)
Aggregation Framework
• Se declara en JSON, se executa en C++
• Flexible, funcional y simple– Operaciones en pipeline
– Expresiones computacionales
• Integracion completa con sharding
![Page 29: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/29.jpg)
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
![Page 30: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/30.jpg)
Operadores
• $match
• $project
• $group
• $unwind
• $sort
• $limit
• $skip
![Page 31: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/31.jpg)
Cual es el numero de
pistas esquiables?
![Page 32: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/32.jpg)
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
![Page 33: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/33.jpg)
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());
}
return (DBObject) ouptut.getCommandResult().get("result");
Numero de pistas esquiables
Filtramos por temperatura y vientoAgregamos por tipo de nieve sumando lo numero de pistas con las mismas
condicionesExecutamos el comando de agregacion
El resultado del comando es un documento
![Page 34: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/34.jpg)
MongoDB Drivers
![Page 35: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/35.jpg)
Si JAVA no es la unica
lenguage de
programacion que te
gusta
![Page 36: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/36.jpg)
MongoDB tiene drivers
para las lenguages más
utilizadas, soportadas
por 10gen!
![Page 37: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/37.jpg)
![Page 38: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/38.jpg)
Y muchas otras
soportadas por la
comunidad
![Page 39: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/39.jpg)
![Page 40: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/40.jpg)
MongoDB drivers
• Soporte oficial hasta12 lenguages
• La comunidad tiene muchas otras
• Drivers conectan tu App a MongoDB server
• Drivers traducen objectos y estruturas de datosen BSON
• La instalacion de los mismos sigue los standards del ecosistema (npm, pecl, gem, pip)
![Page 41: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/41.jpg)
Cursos Online
![Page 42: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/42.jpg)
https://education.10gen.com/courses/10gen/M101J/2013_Spring/about
Java Developers: 25/02/2013
![Page 43: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/43.jpg)
Que más ?
![Page 44: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/44.jpg)
Hay un mundo de temas
por explorar en lo que
toca a MongoDB
![Page 45: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/45.jpg)
Diseño de Esquema (DRE)
![Page 46: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/46.jpg)
Indices
![Page 47: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/47.jpg)
Replicacion – Alta Disponibilidad
![Page 48: Webinar: Creación de su primera aplicación Java con MongoDB](https://reader036.fdocuments.mx/reader036/viewer/2022062406/559608f51a28abf07b8b4603/html5/thumbnails/48.jpg)
Sharding – EscalabilidadeHorizontal