webinar: creación de su primera aplicación java con mongodb

49
Solutions Architect, 10gen Norberto Leite #mongodbwebinar Primera Aplicacíon Java con MongoDB

Upload: mongodb

Post on 03-Jul-2015

2.330 views

Category:

Technology


7 download

TRANSCRIPT

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

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

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

MongoDB, esto que és?

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

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

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

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

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

Escalabilidad Horizontal

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

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

http://www.mongodb.org/downloads

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

Mongo Shell

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

Base de Datos Orientada a Documentos

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

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

Tradicional (relational) DER

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

MongoDB DER

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

Estado De Pistas App

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

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

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

{

_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

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

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

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

>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

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

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

Un poco de analytics

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

Aggregation Framework

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

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

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

Operadores

• $match

• $project

• $group

• $unwind

• $sort

• $limit

• $skip

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

Cual es el numero de

pistas esquiables?

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

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

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

MongoDB Drivers

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

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

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

Y muchas otras

soportadas por la

comunidad

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

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

Cursos Online

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

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

Que más ?

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

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

Diseño de Esquema (DRE)

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

Indices

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

Replicacion – Alta Disponibilidad

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

Sharding – EscalabilidadeHorizontal

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

@nleite - [email protected]

Norberto Leite

#mongodbwebinar

Cuestiones?

Solutions Architect, 10gen