mongodb y bluemix
TRANSCRIPT
MongoDB y Bluemix“Ejecutando MongoDB en un PaaS”
{ nombre:”Víctor Cuervo” }
http://twitter.com/victor_cuervo
https://github.com/victorcuervo/lineadecodigo_mongodb
http://www.slideshare.net/victorcuervo/
http://lineadecodigo.com
Disclaimer
¿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
¿Qué es MongoDB?
MongoDB y Bluemix
1
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?
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?
•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?
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" ]}
MongoDB para Iniciados
MongoDB y Bluemix
2
• 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
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});
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}
);
• Insercióndb.ciudades.insert(
{'ciudad':'Avila',‘habitantes':58915}
);
• Borradodb.ciudades.delete(
{ciudad:’Zamora’});
Insercción y Borrado
Cosas diferentes en MongoDB
MongoDB y Bluemix
3
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" ] …}
• $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
Servicio MongoDB en Bluemix
MongoDB y Bluemix
4
MongoDB en Bluemix• Sobre nuestra aplicación de
Bluemix añadiremos el servicio de MongoDB o enlazaremos el servicio si ya lo hemos instanciado.
• 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/
{ "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
# 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
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
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)
Vamos a la demo
¿Qué puede salir mal?
• 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
• 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
Compose.io y Bluemix
MongoDB y Bluemix
5
• 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?
• 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/
{ "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
Enséñameun
poquito
Recursos
MongoDB y Bluemix
6
• 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
Preguntas
¡Gracias!