Your SlideShare is downloading. ×
0
#mongodbwebinarPrimera Aplicacíon Javacon MongoDBNorberto LeiteSolutions Architect, 10gen
Agenda• Que és MongoDB?• Base de Datos Orientada a Documentos• Informes sobre Pistas de Esqui App• Aggregation Framework• ...
MongoDB, esto que és?
MongoDB és una base de datos…• BD Orientada a Documentos• Codigo abierto• Alto rendimiento• Escalabilidad horizontal• Llen...
BD Orientada a Documentos• Un documento és una extructura de datos• Documento == JSON object• Documento == PHP Array• Docu...
Codigo Abierto• MongoDB és un proyecto open source   – https://www.github.com/mongodb• Licencia AGPL• 10gen és responsable...
Alto Rendimiento• C++• Basado en el uso extensivo de memory-mapped files .• Multiplataforma   – Windows, Linux, Mac, Solar...
Escalabilidad Horizontal
Funcionalidades• Consultas Ad Hoc• Agregación en tiempo real• Consistente• Capacidades de consulta Geoespacial• Suporte pa...
http://www.mongodb.org/downloads
Mongo Shell
Base de Datos Orientada aDocumentos
RDBMS                MongoDBTable, View   ➜   CollectionRow           ➜   DocumentIndex         ➜   IndexJoin          ➜  ...
Tradicional (relational) DER
MongoDB DER
Estado De Pistas App
Vamos a crear una applicacíonde informes de pistas de esqui               http://images.nationalgeographic.com/wpf/media- ...
Que queremos hacer?• Guardar informes sobre pistas• Buscar los informes actuales de pistas• Actualizar la precision del in...
Documento Informe{    _id = ObjectId("4fff33619ef172b68a000004"),          Clave Primaria    reporter: "wingman",    locat...
Java: DBObjectsBasicDBObject report = new BasicDBObject();report.put(“reporter”, “wingman”);                    {         ...
Conectar con la Base de DatosList<ServerAddress> serverList = new List<ServerAddress>();serverList.add( new ServerAddress(...
Insertar documentosMongo m = MongoClient( “localhost”, 27017 );DB db = m.getDB(“esqui”);DBCollection coll = db.getCollecti...
Buscar informe de pista mascercana - shell>db.informes.find( {       “location.coordinates”: { $near: [40.724511,-73.99725...
Buscar informe de pista mascercana - JavaDBObject fields = new BasicDBObject();//si no queremos _id tenemos que decir expl...
Actualizar la precision de unreporterDBObject query = new BasicDBObject("reporter", reporter);DBObject accuracy = new Basi...
Un poco de analytics
Aggregation Framework
Aggregation Framework• Se declara en JSON, se executa en C++• Flexible, funcional y simple   – Operaciones en pipeline   –...
Pipeline• Procesamiento de documentos en cadena  – Se ejecuta sobre una collection  – El resultado final és un documento• ...
Operadores• $match• $project• $group• $unwind• $sort• $limit• $skip
Cual es el numero depistas esquiables?
Numero de pistas esquiables• Las que tienen informes favorables   – Pistas solamente con viento “moderado”   – Temperatura...
Numero de pistas esquiablesDBObject matchTemperature = new BasicDBObject("$match", new BasicDBObject("conditions.temperatu...
MongoDB Drivers
Si JAVA no es la unicalenguage deprogramacion que tegusta
MongoDB tiene driverspara las lenguages másutilizadas, soportadaspor 10gen!
Y muchas otrassoportadas por lacomunidad
MongoDB drivers• Soporte oficial hasta12 lenguages• La comunidad tiene muchas otras• Drivers conectan tu App a MongoDB ser...
Cursos Online
Java Developers: 25/02/2013      https://education.10gen.com/courses/10gen/M101J/2013_Spring/about
Que más ?
Hay un mundo de temaspor explorar en lo quetoca a MongoDB
Diseño de Esquema (DRE)
Indices
Replicacion – AltaDisponibilidad
Sharding – EscalabilidadeHorizontal
#mongodbwebinarCuestiones?Norberto LeiteSolutions Architect, 10gen@nleite - norberto@10gen.com
Webinar: Creación de su primera aplicación Java con MongoDB
Webinar: Creación de su primera aplicación Java con MongoDB
Upcoming SlideShare
Loading in...5
×

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

2,336

Published on

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

No Downloads
Views
Total Views
2,336
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
59
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&apos;s own entity? It could be, but it&apos;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 of "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
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×