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

3,107 views
2,936 views

Published on

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,107
On SlideShare
0
From Embeds
0
Number of Embeds
1,148
Actions
Shares
0
Downloads
68
Comments
0
Likes
4
Embeds 0
No embeds

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

    1. 1. #mongodbwebinarPrimera Aplicacíon Javacon MongoDBNorberto LeiteSolutions Architect, 10gen
    2. 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. 3. MongoDB, esto que és?
    4. 4. MongoDB és una base de datos…• BD Orientada a Documentos• Codigo abierto• Alto rendimiento• Escalabilidad horizontal• Llena de funcionalidade
    5. 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. 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. 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. 8. Escalabilidad Horizontal
    9. 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. 10. http://www.mongodb.org/downloads
    11. 11. Mongo Shell
    12. 12. Base de Datos Orientada aDocumentos
    13. 13. RDBMS MongoDBTable, View ➜ CollectionRow ➜ DocumentIndex ➜ IndexJoin ➜ Embedded DocumentForeign Key ➜ ReferencePartition ➜ ShardTerminologia
    14. 14. Tradicional (relational) DER
    15. 15. MongoDB DER
    16. 16. Estado De Pistas App
    17. 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. 18. Que queremos hacer?• Guardar informes sobre pistas• Buscar los informes actuales de pistas• Actualizar la precision del informe• Las mejores pistas
    19. 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. 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. 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. 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. 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. 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. 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. 26. Un poco de analytics
    27. 27. Aggregation Framework
    28. 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. 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. 30. Operadores• $match• $project• $group• $unwind• $sort• $limit• $skip
    31. 31. Cual es el numero depistas esquiables?
    32. 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. 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. 34. MongoDB Drivers
    35. 35. Si JAVA no es la unicalenguage deprogramacion que tegusta
    36. 36. MongoDB tiene driverspara las lenguages másutilizadas, soportadaspor 10gen!
    37. 37. Y muchas otrassoportadas por lacomunidad
    38. 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. 39. Cursos Online
    40. 40. Java Developers: 25/02/2013 https://education.10gen.com/courses/10gen/M101J/2013_Spring/about
    41. 41. Que más ?
    42. 42. Hay un mundo de temaspor explorar en lo quetoca a MongoDB
    43. 43. Diseño de Esquema (DRE)
    44. 44. Indices
    45. 45. Replicacion – AltaDisponibilidad
    46. 46. Sharding – EscalabilidadeHorizontal
    47. 47. #mongodbwebinarCuestiones?Norberto LeiteSolutions Architect, 10gen@nleite - norberto@10gen.com

    ×