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

Like this? Share it with your network

Share

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

  • 2,520 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,520
On Slideshare
1,527
From Embeds
993
Number of Embeds
4

Actions

Shares
Downloads
57
Comments
0
Likes
4

Embeds 993

http://www.10gen.com 577
http://www.mongodb.com 381
http://www.twylah.com 34
http://drupal1.10gen.cc 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • AGPL – GNU Affero General Public License
  • * Big endian and ARM not supported.
  • Kristine to update this graphic at some point
  • Kristine to update this graphic at some point
  • Ask question: Is categories it's own entity? It could be, but it's likely a property of books.
  • Add the highlight boxes 42.774031,-0.364158
  • Add the highlight boxes 42.774031,-0.364158
  • Add the highlights on the class objects for each
  • Add the highlights on the class objects for each
  • 10gen Drivers
  • Plus community drivers.
  • This graphic should be updated at some point.

Transcript

  • 1. #mongodbwebinarPrimera Aplicacíon Javacon MongoDBNorberto LeiteSolutions 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
  • 3. MongoDB, esto que és?
  • 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
  • 8. Escalabilidad Horizontal
  • 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
  • 10. http://www.mongodb.org/downloads
  • 11. Mongo Shell
  • 12. Base de Datos Orientada aDocumentos
  • 13. RDBMS MongoDBTable, View ➜ CollectionRow ➜ DocumentIndex ➜ IndexJoin ➜ Embedded DocumentForeign Key ➜ ReferencePartition ➜ ShardTerminologia
  • 14. Tradicional (relational) DER
  • 15. MongoDB DER
  • 16. Estado De Pistas App
  • 17. Vamos a crear una applicacíonde 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: DBObjectsBasicDBObject 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: -2location.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 DatosList<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 documentosMongo 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 insertamosBasicDBObject 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 mascercana - 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 mascercana - JavaDBObject fields = new BasicDBObject();//si no queremos _id tenemos que decir explicitamentefields.put("_id", 0); Ordenar descendente temperatura Campos quepor de hoy enseñar Buscar queremos Fecha proximidadfields.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: 1filter.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 unreporterDBObject query = new BasicDBObject("reporter", reporter);DBObject accuracy = new BasicDBObject("accuracy", 1);DBObject update = new BasicDBObject( "$inc" , inc );//retorna el valor anterior al cambioreturn 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
  • 27. Aggregation Framework
  • 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 depistas 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 esquiablesDBObject 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 documentoreturn (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
  • 34. MongoDB Drivers
  • 35. Si JAVA no es la unicalenguage deprogramacion que tegusta
  • 36. MongoDB tiene driverspara las lenguages másutilizadas, soportadaspor 10gen!
  • 37. Y muchas otrassoportadas por lacomunidad
  • 38. 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)
  • 39. Cursos Online
  • 40. Java Developers: 25/02/2013 https://education.10gen.com/courses/10gen/M101J/2013_Spring/about
  • 41. Que más ?
  • 42. Hay un mundo de temaspor explorar en lo quetoca a MongoDB
  • 43. Diseño de Esquema (DRE)
  • 44. Indices
  • 45. Replicacion – AltaDisponibilidad
  • 46. Sharding – EscalabilidadeHorizontal
  • 47. #mongodbwebinarCuestiones?Norberto LeiteSolutions Architect, 10gen@nleite - norberto@10gen.com