mongodb y bluemix

38
MongoDB y Bluemix “Ejecutando MongoDB en un PaaS”

Upload: victor-cuervo

Post on 13-Apr-2017

623 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: MongoDB y bluemix

MongoDB y Bluemix“Ejecutando MongoDB en un PaaS”

Page 2: MongoDB y bluemix

{ nombre:”Víctor Cuervo” }

http://twitter.com/victor_cuervo

https://github.com/victorcuervo/lineadecodigo_mongodb

http://www.slideshare.net/victorcuervo/

http://lineadecodigo.com

Page 3: MongoDB y bluemix

Disclaimer

Page 4: MongoDB y bluemix

¿Qué es MongoDB?

MongoDB para Iniciados

Cosas diferentes en MongoDB

Servicio MongoDB en Bluemix

Compose.io y Bluemix

Recursos

2

3

4

5

6

Índice

1

Page 5: MongoDB y bluemix

¿Qué es MongoDB?

MongoDB y Bluemix

1

Page 6: MongoDB y bluemix

SELECT array_agg(players), player_teamsFROM ( SELECT DISTINCT t1.t1player AS players, t1.player_teams FROM ( SELECT p.playerid AS t1id, concat(p.playerid,':', p.playername, ' ') AS t1player, array_agg(pl.teamid ORDER BY pl.teamid) AS player_teams FROM player p LEFT JOIN plays pl ON p.playerid = pl.playerid GROUP BY p.playerid, p.playername ) t1INNER JOIN ( SELECT p.playerid AS t2id, array_agg(pl.teamid ORDER BY pl.teamid) AS player_teams FROM player p LEFT JOIN plays pl ON p.playerid = pl.playerid GROUP BY p.playerid, p.playername) t2 ON t1.player_teams=t2.player_teams AND t1.t1id <> t2.t2id) innerQueryGROUP BY player_teams

¿Qué hace esto?

Page 7: MongoDB y bluemix
Page 8: MongoDB y bluemix

MongoDB es una base de datos opensource NOSQL basada en documentos. Es creada por la empresa 10gen, la cual se transforma a posteriori en MongoDB Inc.

El nombre de MongoDB proviene de “humongous”, que significa enorme en inglés.

La web de MongoDB está accesible en http://www.mongodb.org

¿Qué es MongoDB?

Page 9: MongoDB y bluemix

•Base de datos NOSQL orientada a documentos (BSON-JSON).

•Trabajo con modelos de datos flexibles.•Proporciona alto rendimiento y alta escalabilidad.•Ofrece múltiples APIs sobre diferentes lenguajes de

programación: java, python, shell, node.js, go,…•Maneja bases de datos, colecciones, campos, indices,…y no

permite hacer un xxxxxx join. $lookup

¿Qué es MongoDB?

Page 10: MongoDB y bluemix

Documento BSON{ "_id": ObjectId("565914732c23d80f730a1f49"), "gender": "M", "name": “Julio Sanchez", "username": "jsanchezs", "birthday": "06/11/1977", "email": "[email protected]", "social": { "facebook": “http://facebook.com/julio.sanchez“, "twitter": “http://twitter.com/jjsanch“, "linkedin": “http://es.linkedin.com/juliosanchez“ }, "description": "Soy una persona afable, estudioso y amigo de mis amigos.”, "hobbies": [ "python", "angularjs", "mongodb" ]}

Page 11: MongoDB y bluemix

MongoDB para Iniciados

MongoDB y Bluemix

2

Page 12: MongoDB y bluemix

• Las operaciones del CRUD en MongoDB se realizan con los métodos:• Insert• Find• Update/Save• Delete

• Siempre se antepone el nombre de la colección:db.collection.operacion({documento})

• El contenido de la operación siempre será un documento JSON.

CRUD

Page 13: MongoDB y bluemix

Consultas

• Consulta Básicadb.ciudades.find({ciudad:’Madrid'});

• Consulta con Filtrodb.ciudades.find({

habitantes:{$lt:400000}});

• Ordenacionesdb.ciudades.find().sort({

ciudad:1});

• Consultas con conjuntosdb.ciudades.find({ciudad:

{$in:[‘Avila','Zamora','Madrid']}});

• Projectiondb.ciudades.find({

habitantes:{$gt:1000000}},{ciudad:1});

Page 14: MongoDB y bluemix

Actualizaciones• Actualización Básicadb.ciudades.update(

{ciudad:'Avila'},{$set:{habitantes:58915}

});

• Actualización Múltipledb.ciudades.update({

habitantes:{$gt:600000}},{$set:{‘grande’:true}},{multi:true}

);

• Upsert - Se puede hacer con un Save

db.ciudades.update({ciudad:'Zamora'},{$set:{habitantes:65362}},{upsert:true}

);

Page 15: MongoDB y bluemix

• Insercióndb.ciudades.insert(

{'ciudad':'Avila',‘habitantes':58915}

);

• Borradodb.ciudades.delete(

{ciudad:’Zamora’});

Insercción y Borrado

Page 16: MongoDB y bluemix

Cosas diferentes en MongoDB

MongoDB y Bluemix

3

Page 17: MongoDB y bluemix

Modelos de Datos con Arrays

• Una de las características de MongoDB es poder crear campos que sean arrays de datos.• Los Arrays pueden contener valores o una

colección de subdocumentos.• Existen los operadores $push, $pull, $each

que nos ayudan a manipular los arrays.

{ …

“hobbies": [

"python",

"angularjs",

"mongodb" ] …}

Page 18: MongoDB y bluemix

• $push - Insertar un elemento en el arraydb.users.update({username:"rigodon"},{$push:{hobbies:"Javascript"}})• $each - Insertar N elementos en el arraydb.users.update({username:"rigodon"}, {$push:{hobbies:{$each:["Java","Python","AngularJS"]}}}) • $pull - Eliminar un elemento del arraydb.users.update({username:"rigodon"}, {$pull:{hobbies:"Java"}})

Manipulando Arrays

Page 19: MongoDB y bluemix

Servicio MongoDB en Bluemix

MongoDB y Bluemix

4

Page 20: MongoDB y bluemix

MongoDB en Bluemix• Sobre nuestra aplicación de

Bluemix añadiremos el servicio de MongoDB o enlazaremos el servicio si ya lo hemos instanciado.

Page 21: MongoDB y bluemix

• El servicio MongoDB de Bluemix es un servicio experimental– Se encuentra en el Bluemix Labs Catalog (*)• Está catalogado como Data and Analytics• En estos momentos está disponible la versión

MongoDB 2.4• Plan gratuito de consumo• Dedicated server, shared VM, 250MB storage, 100

connections

Servicio MongoDB

(*) https://console.ng.bluemix.net/catalog/labs/

Page 22: MongoDB y bluemix

{ "mongodb-2.4": [ { "name": "mongodb-7b", "label": "mongodb-2.4", "plan": "100", "credentials": { "hostname": "75.126.37.98", "host": "75.126.37.98", "port": 10063, "username": "1c20340a-5bf8-495e-b9d9-2e613ceefd40", "password": "121cb836-5c58-4b99-b0f4-cf7d300258bf", "name": "c51db93c-11cb-461d-9c65-7dec81222485", "db": "db", "url": "mongodb://1c20340a-5bf8-495e-b9d9-2e613ceefd40:[email protected]:10063/db" } } ]}

VCAP_CREDENTIALS

Page 23: MongoDB y bluemix

# Crear el servicio$ cf create-service mongodb 100 mongodb01

# Hacer el binding$ cf bind-service AppName mongodb01

# Subir la aplicación$ cf push

Comandos

•A parte de utilizar la consola de Bluemix podemos utilizar los comandos de Cloudfoundry para crear el servicio, enlazar el servicio a la aplicación y subir la aplicación

Page 24: MongoDB y bluemix

from pymongo import MongoClient

vcap_config = os.environ.get('VCAP_SERVICES')decoded_config = json.loads(vcap_config)for key, value in decoded_config.iteritems(): if key.startswith('mongodb'): mongo_creds = decoded_config[key][0][‘credentials’]

mongo_url = str(mongo_creds['url'])

client = MongoClient(mongo_url)

Codificando: Dependencias y Credenciales

Flask==0.10.1pymongo>=3.2

Requirements.txt Welcome.py

Page 25: MongoDB y bluemix

client = MongoClient(mongo_url)

db = client.dblistado = db.listado

lista = listado.find({'pais':'Spain'}).sort('nombre',1)

Codificando: Acceso a MongoDB

Insertar.py Consultar.pyclient = MongoClient(mongo_url)

db = client.dblistado = db.listado

docs = [{'codigo':'1','valor':'A'}, {'codigo':'2','valor':'B'}, {'codigo':'3','valor':'C'}, {'codigo':'4','valor':'D'}]

listado.insert_many(docs)

Page 26: MongoDB y bluemix

Vamos a la demo

¿Qué puede salir mal?

Page 27: MongoDB y bluemix
Page 28: MongoDB y bluemix

• Importante utilizar una librería de logging.• Se puedes comprobar los logs desde la Consola BlueMix• O bien comprobarlos desde un terminal mediante el comando$ cf logs AppName —recent

Depurando nuestro código

Page 29: MongoDB y bluemix

• Permisos del usuario de MongoDB– Solo se tiene acceso a la base de datos “db”• No puedes operar como admin• No se puede acceder a la consola de MongoDB• La versión de MongoDB es la 2.4 (actualmente ya existe 3.2)

Limitaciones MongoDB en Bluemix

Page 30: MongoDB y bluemix

Compose.io y Bluemix

MongoDB y Bluemix

5

Page 31: MongoDB y bluemix

• Compose.IO ofrece diferentes soluciones de bases de datos en formato DBaaS

• MongoDB, ElasticSearch, Redis, Postgresql,…

• Proporciona un interface de usuario amigable para operar MongoDB, así como múltiples formas de conectarnos.

• http://compose.io

¿Qué es Compose.io?

Page 32: MongoDB y bluemix

• Servicio MongoDB by Compose nos permite acceder a un MongoDB instanciado como DBaaS

• Está catalogado como Data and Analytics• La información de conexión debe de proporcionarla el

usuario• Plan gratuito de consumo

Servicio Compose MongoDB

(*) https://console.ng.bluemix.net/catalog/labs/

Page 33: MongoDB y bluemix

{ "user-provided": [ { "name": "MongoDB by Compose-gk", "label": "user-provided", "credentials": { "uri": "aws-us-east-1-portal.14.dblayer.com", "port": "10020", "user": "victorcuervo", "password": “lamassecretadelmundo" } } ]}

VCAP_CREDENTIALS

Page 34: MongoDB y bluemix

Enséñameun

poquito

Page 35: MongoDB y bluemix

Recursos

MongoDB y Bluemix

6

Page 36: MongoDB y bluemix

• Tutorial sobre MongoDBhttps://docs.mongodb.org/manual/tutorial/

• Novedades de MongoDB 3.2https://docs.mongodb.org/manual/release-notes/

• Ejemplos de MongoDBhttp://lineadecodigo.com/mongodb

• Documentación y ejemplos de MongoDB en Bluemixhttps://console.ng.bluemix.net/docs/#services/MongoDB/index.html#MongoDB

• Compose.iohttp://compose.io

Enlaces de Interés

Page 37: MongoDB y bluemix

Preguntas

Page 38: MongoDB y bluemix

¡Gracias!