Vous êtes sur la page 1sur 80

Legans

6-7 Febrero 2014

Vctor Cuervo Palencia

Primeros Pasos en MongoDB

Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by-nc-sa/3.0/


c_b_n_a
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB

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

Sobre el ponente: Vctor Cuervo


Responsable del rea QA Programador, Arquitecto IT, lter ego
Arquitecto Tcnico de Lnea de Cdigo, amante de las
tecnologas, generador de
ISBAN. Grupo Santander conocimiento y facilitador del
aprendizaje.
http://lineadecodigo.com
http://www.victorcuervo.com
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

WITH DATOS (A, B)


||
AS(
CASE WHEN TATAFOR ='DEC' THEN ' ( '||
SELECT 'CREATE TABLE ' || RTRIM(TENTNOM) || ' (', 0 RTRIM(CHAR(TATALON)) ||','||
AS TATAORD
SUBSTR(RTRIM(CHAR(TATADEC)), 1
FROM DEADIC.ENTIDAD_16 , 3)||' ), '
WHERE TENTCLA=&CODIGO_ENTIDAD WHEN TATAFOR ='CHR' THEN ' ( '||
AND ENTOR='DE' RTRIM(CHAR(TATALON))||' ), '
UNION ALL WHEN TATAFOR ='DAT' THEN ','
SELECT RTRIM(TATANOM) ||' '|| WHEN TATAFOR ='TST' THEN ','
CASE WHEN TATAFOR ='CHR' THEN 'CHARACTER' WHEN TATAFOR ='INT' THEN ','
WHEN TATAFOR ='DAT' THEN 'DATE' WHEN TATAFOR ='FLO' THEN ','
WHEN TATAFOR ='DEC' THEN 'DECIMAL' WHEN TATAFOR ='VCH' THEN ' ( '||
WHEN TATAFOR ='TST' THEN 'TIMESTAMP' RTRIM(CHAR(TATALON))||' ), '
WHEN TATAFOR ='VCH' THEN 'VARCHAR' END,
WHEN TATAFOR ='INT' THEN 'INTEGER' TATAORD
WHEN TATAFOR ='FLO' THEN 'FLOAT' FROM DEADIC.ATRIBUTO_03
END
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?

NOSQL es una evolucin del sistema clsico de bases de datos


relacionales cuya principal caracterstica es que no se requiere una
definicin inicial de las estructuras sobre las que se almacenarn los
datos.
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB

Por qu se llega a NOSQL?


Evolucin del modelo entidad-relacin para el soporte de estructuras
variables en el tiempo.

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

Tipos de Bases de Datos NOSQL

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

Quiero usar NOSQL dame ejemplos


Ejemplo Bsico
Informacin de redes sociales
Logs

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

Producto 1 Producto 2 Producto3


Valor Inicial Valor Regla
Valor Final Estado
Demandante
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB

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.

Desarrollada por 10gen (ahora llamados MongoDB).

Caractersticas
Flexibilidad de los Modelos
Alto Rendimiento, Alta Disponibilidad
Escalabilidad
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB

BSON su modelo de documentos

El modelo de documentos se basa en el estndar JSON/BSON.


BSON es una serializacin binaria del JSON
Caractersticas de BSON
Permite tener documentos dentro de documentos
Podemos definir arrays dentro de documentos

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

Distribuciones para MacOS, Linux (Ubuntu, Debian,) y Windows.


Ejecuta en plataformas 32-bits y 64-bits

Se puede descargar desde http://www.mongodb.org/downloads

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

En http://www.mongodb.org/downloads se puede encontrar una consola


de pruebas.
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB

Conceptos Bsicos

SQL Terms/Concepts MongoDB Terms/Concepts


database database
table collection
row document or BSON document
column field
index index
table joins embedded documents and linking
primary key primary key
Specify any unique column or column combination as In MongoDB, the primary key is automatically set to
primary key. the _id field.

aggregation pipeline
aggregation (e.g. group by)
See the SQL to Aggregation Mapping Chart.
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB

Pero haz ya una


SELECT
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

Consultas, funcin find


Las consultas se ejecutan mediante la funcin find:

db.ciudades.find({ciudad:'Madrid'});
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB

Projection o seleccin de datos

Projection nos permite escoger que campos devolver del documento

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

Consultas con operadores


Podemos utilizar operadores dentro de las consultas:

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

Sort para ordenar resultados


Mtodo sort: Ascendente (1) o descendente (-1)

db.ciudades.find().sort({
ciudad:1
});
db.ciudades.find().sort({
ciudad:-1
});
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB

Limit para limitar las consultas


Recibe el nmero de elementos a limitar en la consulta como parmetro.

db.ciudades.find().limit(4);
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB

IN para consulta de elementos


Los elementos de los valores estn en un array:

db.ciudades.find({ciudad:
{$in:['Avila','Zamora','Madrid']}});
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB

Busquedas por Like


Uso de expresiones regulares para buscar por like:

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

Saltarnos datos con SKIP

Recibe como parmetro los elementos a saltar:

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

Por defecto MongoDB solo actualiza un documento:

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

La funcin upsert actualiza un documento, si no est lo 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

$push, $pull, $addtoset,


Operadores que nos sirven para el manejo de arrays:

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

Cardinalidad 1:N Referenciada

{
_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

Quiero hacer un join

MongoDB no soporta JOINS

La manipulacin de informacin referenciada hay que hacerla manual.

Algunos drivers han implementado un objeto DBRefs para poder


ayudar en la consulta de informacin referenciada.
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB

A tener en cuenta cuando modelas


El crecimiento de los documentos
Si aadimos nuevos elementos/campos al documento y nos pasamos del
tamao mximo MongoDB tendr que alojar el documento en disco.
Atomicidad de las operaciones
En MongoDB la atomicidad es a nivel de documento.
Manejo de ndices
Para mejorar el rendimiento. Por defecto hay un ndice sobre el _id.
Distribucin de los documentos
El escalado en MongoDB es horizontal utilizando una sharded key
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB

Rendimiento
Indexame.
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB

Cmo establecer un ndice?


MongoDB nos proporciona la funcin ensureIndex para establecer un ndice.

db.ciudades.ensureIndex( { ciudad" : 1 } )

Podemos crear ndices en subdocumentos

db.people.ensureIndex({
direccion.codigopostal": 1
} )
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB

Realizando un Explain

Se puede ver el plan de ejecucin de una consulta con 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?

Son un conjunto de operaciones que nos permiten procesar


conjuntos completos de resultados.

Evita que tengamos que desarrollar cdigo de aplicacin para realizar


ciertas tareas.
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB

Pipeline del Aggregation Framework


El Aggregation Framework se apoya en un pipeline de operaciones que
se van ejecutando de manera consecutiva

Las operaciones que podemos ejecutar en un pipeline son:


Filtros
Transformaciones
Agrupaciones
Ordenaciones
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB

Secuencia del Pipeline


Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB

SQL versus Aggregation Framework

SQL Terms, Functions, and Concepts MongoDB Aggregation Operators


WHERE $match
GROUP BY $group
HAVING $match
SELECT $project
ORDER BY $sort
LIMIT $limit
SUM() $sum
COUNT() $sum

No direct corresponding operator; however,


the $unwind operator allows for somewhat similar
join
functionality, but with fields embedded within the
document.
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB

Java, Python,
Javascript,..
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB

Lenguajes de Programacin con MongoDB


MongoDB ofrece drivers para la integracin con mltiples lenguajes:
Java
Python
PHP
C/C++
Ruby
Scala
.
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB

Shell MongoDB
El manejo bsico que podemos hacer es mediante el Shell MongoDB

El Shell MongoDB es un shell Javascript que nos permite ejecutar las


operaciones bsicas

Para ejecutarlo

mongo nombreprograma.js
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB

Programa con Shell

conn= new Mongo();


db = conn.getDB("demografia");

printjson(db.ciudades.findOne());

cursor = db.ciudades.find(
{$or:[{ciudad:/^M/},{ciudad:/^Z/}]
});

while (cursor.hasNext()){ printjson(cursor.next());


}
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB

MongoDB y Java

import com.mongodb.*;

MongoClient mongoClient =
new MongoClient( "localhost" );

DBCollection coll = db.getCollection("testCollection");

BasicDBObject doc = new BasicDBObject("name", "MongoDB)


. append("type", "database")
. append("count", 1)
. append("info", new BasicDBObject("x", 203).append("y", 102));

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");

BasicDBObject query = new BasicDBObject("i", 71);

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

MongoDB, Python y Pymongo

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

Ms, ms, ms,...


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 Map Reduce


Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB

MongoDB y Replicacin

Proporciona la alta disponibilidad y redundancia de datos.


Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB

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

Cmo administras MongoDB?


http://codemotion.es/talk/18-october/122
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB

MonjaDB

Plugin para Elipse que permite administrar MongoDB


https://marketplace.eclipse.org/content/monjadb
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB

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

Enlaces MongoDB en Espaol

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

No os preocupis por los


enlaces
@victor_cuervo
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB
Legans
6-7 Febrero 2013
4
Primeros Pasos en MongoDB

Vous aimerez peut-être aussi