Académique Documents
Professionnel Documents
Culture Documents
Organizndonos
Y nos vas a
1. Sobre el Ponente
2. Qu es eso del NOSQL?
contar todo esto
3. Hablemos de MongoDB en 30m????
4. Pero haz ya una SELECT
5. Tercera forma normal?
6. Rendimiento Indexame
7. Agregar datos en MongoDB
8. Java, Python, Javascript,
9. Ms, ms, ms
10. Herramientas
11. Quiero aprender ms
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Qu es eso del
NOSQL?
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
WHERE ENTOR='DE'
SELECT 'COMMENT ON COLUMN '||RTRIM(TENTNOM)
AND TATACLE=&CODIGO_ENTIDAD
||'.'||RTRIM(TATANOM)||' IS '''||RTRIM(TATADEF)||''';'
UNION ALL
, TATAORD + 1000 AS TATAORD
SELECT ');', 999 AS TATAORD
FROM DEADIC.ENTIDAD_16 A, DEADIC.ATRIBUTO_03 B
FROM DEADIC.ENTIDAD_16
WHERE A.ENTOR=B.ENTOR
WHERE TENTCLA=&CODIGO_ENTIDAD
AND TENTCLA=TATACLE
AND ENTOR='DE'
AND A.ENTOR='DE'
UNION ALL
AND TATACLE=&CODIGO_ENTIDAD
SELECT 'COMMENT ON TABLE '||RTRIM(TENTNOM)
)
||' IS '''||RTRIM(TENTDEF)||''';', 1000 AS TATAORD
SELECT A
FROM DEADIC.ENTIDAD_16
FROM DATOS
WHERE TENTCLA=&CODIGO_ENTIDAD
ORDER BY B
AND ENTOR='DE'
UNION ALL
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Cambio
de Modelado
Campos
Modelo
Queries
E/R Queries
Cambio
Normalizacin
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Qu es NOSQL?
Alternativas
Meta-modelos en ER
Bases de datos de objetos
Bases de datos XML / XQuery
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Columna
Hadoop/HBase, Cassandra
Documento
MongoDB, CouchDB
Clave/Valor
DynamoDB, Redis
Grafos
Neo4j, Infinite Graph
http://nosql-database.org
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
y en la industria
Herencia y Polimorfismo de datos
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Polimorfismo y NOSQL?
Domicilio
Persona
Calle
Nombre Comunidad
Apellido1 Persona Pas Domicilio
Apellido2
Nombre Calle
Domicilio
Middle Name Condado
Apellido Pas Calle
Regin
Pas
Hablemos de
MongoDB
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Qu es MongoDB?
MongoDB es una base de datos NOSQL orientada a documentos.
Caractersticas
Flexibilidad de los Modelos
Alto Rendimiento, Alta Disponibilidad
Escalabilidad
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
http://bsonspec.org/
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Documento BSON
{
_id: "joe",
name: "Joe Bookreader",
addresses: [
{
street: "123 Fake Street",
city: "Faketon",
state: "MA",
zip: 12345
},
{
street: "1 Some Other Street",
city: "Boston",
state: "MA",
zip: 12345
}
]}
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Instalar MongoDB
Documentacin de instalacin en
http://docs.mongodb.org/manual/installation/
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Ejecutar MongoDB
mongod
Nos permite arrancar el servidor de MongoDB
Escucha en el puerto 27017
mongo
Ejecuta la consola de MongoDB
Conceptos Bsicos
aggregation pipeline
aggregation (e.g. group by)
See the SQL to Aggregation Mapping Chart.
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Modelo de pruebas
{
"_id" : ObjectId("525ab02733b01a66a9dcbc60"),
"ciudad" : "Salamanca",
"habitantes" : 567433,
"monumentos": [Catedral, Universidad, Patio Chico],
"patrimonio: true
}
{
"_id" : ObjectId("525ab02733b01a66a9dcbc61"),
"ciudad" : "Murcia",
"habitantes" : 441354
geo" : {
lat" : 40.942903200,
long" : -4.108806900
}
}
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Modelo de pruebas
{
"_id" : ObjectId("525ab02733b01a66a9dcbc62"),
"ciudad" : Avila",
"habitantes" : 407648
restaurantes: [
{
nombre:La Bruja
Direccion : Paseo del Rastro, 4 "
},
{
nombre:La Casona
Direccion : Plaza Pedro Dvila, 6 "
}
]
}
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
db.ciudades.find({ciudad:'Madrid'});
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
db.ciudades.find({
habitantes:{$gt:1000000}},
{ciudad:1});
db.ciudades.find({
habitantes:{$gt:1000000}},
{ciudad:1,_id:0});
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Dot Notation
MongoDB utiliza la anotacin del punto para acceder a campos de
subdocumentos y a elementos de arrays: array.indice o
subdocumento.campo
db.ciudades.find({
geo.lat:{$gt:40.1}});
db.ciudades.find({
monumentos:'Catedral');
db.ciudades.find({
monumentos.0:'Catedral');
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
db.ciudades.find({
habitantes:{$lt:400000}
});
db.ciudades.find({
habitantes:{$gt:1000000}
});
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Combinar operadores
El documento de consulta puede combinar varios operadores:
db.ciudades.find({
ciudad:/^M/,
habitantes:{$lt:1000000}
});
db.ciudades.find({
$or:[{ciudad:/^M/},{ciudad:/^Z/}]
});
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
db.ciudades.find().sort({
ciudad:1
});
db.ciudades.find().sort({
ciudad:-1
});
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
db.ciudades.find().limit(4);
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
db.ciudades.find({ciudad:
{$in:['Avila','Zamora','Madrid']}});
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
db.ciudades.find({ciudad:/^M/});
db.ciudades.find({ciudad:/r/});
db.ciudades.find({ciudad:/d$/});
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
db.ciudades.find().skip(2);
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Insertar datos
Utilizamos la funcin Insert
db.ciudades.insert(
{'ciudad':'Avila',
'habitantes':58915
});
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Actualizar datos
Utilizamos la funcin Update:
db.ciudades.update(
{ciudad:'Avila'},
{$set:{habitantes:58915}
});
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Actualizaciones Mltiples
db.ciudades.update({
habitantes:{$gt:600000}},
{$set:{'grande':true}},
{multi:true}
);
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Upsert: Actualiza si no Inserta
db.ciudades.update({
ciudad:'Zamora'},
{$set:{habitantes:65362}},
{upsert:true}
);
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Borrado de datos
Utiliza la funcin delete. Por defecto borra todos los documentos, al
menos que especifiquemos otra cosa.
db.ciudades.delete({
ciudad:'Zamora'},
);
db.ciudades.delete({
habitantes:{$lt:400000}
},1);
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
db.ciudades.update(
{ ciudad: Avila" },
{ $push: { monumentos:
{ $each:
[ Murallas,La Santa,San Vicente]
}
}})
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Ms funciones
Hay muchas ms funciones bsicas:
Agrupacin
Distintc
Contadores
FindAndModify
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Tercera forma
normal?
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Modelos de Datos
Embebidos
Aprovecha las capacidades de los subdocumentos para contener la
relacin dentro del propio documento.
Normalizados
Referencia los documentos mediante IDs.
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Modelo Embebido
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Modelo Normalizado
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Cardinalidad en MongoDB
Cardinalidades en MongoDB:
Modelo 1:1
Modelo 1:N
Modelo 1:N Referenciado
Modelos en rbol
Ms informacin de modelos en
http://docs.mongodb.org/manual/data-modeling/
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Cardinalidad 1:1
{
_id: "joe",
name: "Joe Bookreader",
address: {
street: "123 Fake Street",
city: "Faketon",
state: "MA",
zip: 12345
}
}
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Cardinalidad 1:N
{
_id: "joe",
name: "Joe Bookreader",
addresses: [
{
street: "123 Fake Street",
city: "Faketon",
state: "MA",
zip: 12345
},
{
street: "1 Some Other Street",
city: "Boston",
state: "MA",
zip: 12345
}
]
}
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
{
_id: "oreilly",
name: "O'Reilly Media",
founded: 1980,
location: "CA
}
{
_id: 123456789,
title: "MongoDB: The Definitive Guide,
author: [ "Kristina Chodorow", "Mike Dirolf" ],
published_date: ISODate("2010-09-24"),
pages: 216, language: "English",
publisher_id: "oreilly
}
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Rendimiento
Indexame.
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
db.ciudades.ensureIndex( { ciudad" : 1 } )
db.people.ensureIndex({
direccion.codigopostal": 1
} )
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Realizando un Explain
db.collection.find().explain()
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Resultado de un Explain
{
"cursor" : "BasicCursor",
"isMultiKey" : false,
"n" : 14,
"nscannedObjects" : 14,
"nscanned" : 14,
"nscannedObjectsAllPlans" : 14,
"nscannedAllPlans" : 14,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 0,
"indexBounds" : {}
}
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Agregar datos en
MongoDB
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Qu es el Aggregation Framework?
Java, Python,
Javascript,..
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Shell MongoDB
El manejo bsico que podemos hacer es mediante el Shell MongoDB
Para ejecutarlo
mongo nombreprograma.js
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
printjson(db.ciudades.findOne());
cursor = db.ciudades.find(
{$or:[{ciudad:/^M/},{ciudad:/^Z/}]
});
MongoDB y Java
import com.mongodb.*;
MongoClient mongoClient =
new MongoClient( "localhost" );
coll.insert(doc);
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Cursores en Java
import com.mongodb.*;
MongoClient mongoClient =
new MongoClient( "localhost" );
DBCollection coll =
db.getCollection("testCollection");
cursor = coll.find(query);
try {
while(cursor.hasNext()) {
System.out.println(cursor.next()); }
} finally { cursor.close(); }
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
import pymongo
client = MongoClient()
db = client.demografia
collection = db.ciudades
ciudad = {
ciudad:Avila,
habitantes:58570
}
ciudades.insert(ciudad)
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
MongoDB y GridFS
GridFS
Manejo de documentos que excedan el lmite de 16Mb
establecido por BSON.
GridFS permite partir el documento en diferentes partes.
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
MongoDB y Replicacin
MongoDB y Sharding
Escalado Horizontal: Capacidad de distribuir datos en diferentes
mquinas
Utiliza la sharding key para distribuir los datos.
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Herramientas para
MongoDB
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Herramientas en MongoDB
MongoBird
Administrador y Consola en tiempo real
http://mongobird.citsoft.net/
MongoVision
Herramienta de Administracin
http://code.google.com/p/mongo-vision/
MongoHub
Herramienta nativa para MacOS
https://github.com/fotonauts/MongoHub-Mac
MonjaDB
Quiero aprender
ms
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
MongoDB University
https://education.mongodb.com
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Enlaces MongoDB
Documentacin de MongoDB
http://docs.mongodb.org/manual/
API MongoDB
http://api.mongodb.org
MongoDB en Facebook
https://www.facebook.com/mongodb
MongoDB en Twitter
http://twitter.com/#!/MongoDB
Grupos en Google
https://groups.google.com/group/mongodb-user
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
MongoDB Meetup
http://www.meetup.com/Madrid-MongoDB-User-Group/
MongoDB en Espaol Facebook
https://www.facebook.com/groups/mongodb.es/
Mis artculos sobre MongoDB
http://lineadecodigo.com/categoria/mongodb
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB