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

on

  • 2,447 views

 

Statistics

Views

Total Views
2,447
Views on SlideShare
1,457
Embed Views
990

Actions

Likes
4
Downloads
57
Comments
0

4 Embeds 990

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

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • 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.

Webinar: Creación de su primera aplicación Java con MongoDB Presentation 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