SlideShare uma empresa Scribd logo
1 de 57
NoSQL: MongoDB y MongoMapper
Patrick Aljord, David y Jorge Cuadrado
=   +
Tokyo Cabinet
Características


Esquema libre
Distribuidas y escalables
Capacidad de manejo de
grandes volúmenes de datos
Performance/rendimiento
Tipos de NoSQL


Key/Value (Llave/valor)
Column-oriented (orientadas a columnas)
Document-oriented (orientadas a
documentos)
Key/Value
¿Qué es?
  una llave
  un blob

Ventajas:
  muy simple para implementar
  muy rapido

Útil para:
    el cache
    sistema de manejo de cola (redis)

limitado para aplicaciones complejas
Column-oriented
¿Qué es?
  utiliza tablas dinamicas
  mas flexible que tablas de RDBMS
  multi-dimensional

Ventajas:
  el sistema de consulta se acerca al de un RDBMS
  diseño de google, soporta grandes cargas
  versiones

Útil para:
    grandes colecciones
mapping de los datos a objetos no es natural (igual que
rdbms)
Document-oriented
¿Qué es?
   formato json o xml
   muy flexible

Ventajas:
   simple
   rapido, pero menos que key/value store
   mapea facilmente a un objeto (python, ruby, c++ etc)

Útil para:
   aplicaciones web complejas
   todo tipo de aplicacion que utiliza documentos y
   necesita flexibilidad
La soluciones que aporta el NoSQL

built-in replication, master a master
Map/Reduce
mas simple de instalar (se necesita tomar un curso
para instalar a oracle o sqlserver)
casi todas son software libre, muy accesible para
todos
hecho para programadores, mas orientadas a la
programaciones (map/reduce lo entienden mejor los
programadores que los administradores de base de
datos)
¿Qué es el map/reduce?



permite operaciones de manipulacion en batch de
datos manipulation y operaciones de agregacion de
datos
equivalente a GROUP BY en SQL
¿Concretamente que es
    map/reduce?
¿Que es el map?

El map es aplicar una funcion sobre cada elemento de una
matriz y retornar una matriz con sus elementos
modificados.


 Ejemplo (en ruby):
> matriz = [1,2]
> matriz.map { |n| n+2 }
=> [3, 4]
¿Qué es el reduce?

  Reduce es aplicar una funcion sobre cada elemento de una
  matriz y retornar un solo elemento. Se hace iterando sobre
  cada elemento de la matriz. Cada iteracion empieza con el
  valor retornado por la iteracion anterior y hace algo con
  esta. Por esta razón, un reduce se debe iniciar con una
  valor de entrada.

  ejemplo (en ruby), con valor de entrada igual a cero:
> [1, 2, 3].reduce(0) do |sum, value|
    sum + value
 end
=> 6
Las ventajas del map/reduce



    Esta hecho para poderse ejecutar en paralelo
             Como todo es colecciones
           => Fácil de dividir en varias tareas
Probado y comprobado por los grande(google, amazon,
                      facebook)
(credit: amazon)
Las principales funcionalidades

Document-oriented storage
Consultas
Modificadores atómicos
Map/Reduce
GridFS: Almacenamiento de archivos
Soporte para Full Index
Replicación & Alta Disponibilidad
Auto-Sharding
¿Como instalar mongodb?

1. Para instalar mongodb descargamos el binario
   correspondiente para nuestro sistema operativo http://www.
   mongodb.org/display/DOCS/Downloads
2. descomprimes el paquete y creas los directorios /data y
   /data/db o C:data y C:data dependiendo de tu SO
3. para iniciar el servicio corres el binario /bin/mongod o
   binmongod.exe que viene en el paquete que has
   descargado en el paso 1

para un entorno de producción se debe usar un sistema
operativo de 64-bits.
¿Como instalar mongodb?

Para los sistemas unix*(linux,freebsd, OSX) es recomendado
usar el sistema de paquetes de cada sistema operativo.

adicionalmente 10gen provee de paquetes oficiales para las
distribuciones Linux Debian, Ubuntu, CentOS y Fedora

http://www.mongodb.
org/display/DOCS/Ubuntu+and+Debian+packages
http://www.mongodb.
org/display/DOCS/CentOS+and+Fedora+Packages
¿ Cómo se guardan los datos en
         mongodb?




                  Colección:
Documento:
                  la música que tiene
Álbum de un
                  el almacén
artista
¿BSON?
{
    nombre: "Yellow Submarine",
    autor: "The Beatles",
    canciones: ["Yellow Submarine", "Only A Northern Song",
             "All Together Now", "Hey Bulldog",
             "It's All Too Much", "All You Need Is Love",
             "Pepperland", "Sea Of Time",
             "Sea Of Holes", "Sea Of Monsters",
             "March Of The Meanies", "Pepperland Laid Waste",
             "Yellow Submarine In Pepperland" ],
    genero: "Rock",
    anho: 1969,
    cantidad: 20
}
Empotrar vs Referenciar
{
    nombre: "Yellow Submarine",
    autor: "The Beatles",
    canciones: [ { name: "Yellow Submarine", duracion: 159 },
                   { name: "Only A Northern Song", duracion: 204 },
                   { name: "All Together Now", duracion: 130 },
                   { name: "Hey Bulldog", duracion: 191 },
                   { name: "It's All Too Much", duracion: 384 },
                   { name: "All You Need Is Love", duracion: 231 },
                  ...],
    genero: "Rock",
    anho: 1969,
    cantidad: 20
}
¿Cómo conectarse a mongodb?
                     console: ./bin/mongo

Drivers Oficiales:                 Drivers Comunitarios:
   C                                  C# and .NET
   C++                                Clojure
   Java                               Erlang
   Javascript                         Go
   Perl                               Groovy
   PHP                                Haskell
   Python                             node.js
   Ruby                               Lua
                                      LuaMongo
                                      Scala
                                      Scheme (PLT)
                                      Smalltalk
   http://www.mongodb.org/display/DOCS/Drivers
¿Cómo añadir y eliminar documentos a
         una colección?
./mongo
> use tienda_de_musica
> album = {
 nombre: "Let it be", autor: "The Beatles", canciones: [],
 genero: "Rock", anho: 1970, cantidad: 10 }
> db.musica.save(album);
> db.musica.find();
{ "_id" : ObjectId("4c10a976eaa67158a0d74b4b"), "nombre":
"Let it be", "autor" : "The Beatles", "canciones" : [ ], "genero" :
"Rock", "anho" : 1970, "cantidad" : 10 }

>db.music.remove({});
>db.music.remove({autor: "The Beatles"})
¿Cómo actualizar un documento?

Guardar

> album = db.musica.find(ObjectId
("4c10a976eaa67158a0d74b4b" );
> ...
> album.genero = "pop"
> album.cantidad = 5
> db.musica.save(album);
¿Como actualizar un documento?
Modificadores
db.coleccion.update( criterio_de_busqueda,
                  objeto_o_operadores,
                  [upsert?], [múltiple?])

>album.genero = "Rock"
>db.musica.update( {_id: album._id}, album)
>db.musica.update( {_id: ObjectId
("4c10a976eaa67158a0d74b4b")}, {$inc: { cantidad: -1 }});
>db.musica.update( _id: 10, $set: { cantidad: -1 }, true);




   http://www.mongodb.org/display/DOCS/Updating
Un poco más acerca de los
               modifcadores
$set y $unset: sirven para asignarle y quitarle el valor a un
campo de un documento respectivamente.
$inc: incrementan el valor asignado a un campo, solo es valido
para valores enteros.
$push,$pushAll: añaden uno o varios valores a un arreglo de
datos contenido en un campo del documento.
$addToSet: añade un valor a un arreglo si el valor no esta
repetido.
$pop, $pull, $pullAll: son operadores para borrar los valores
contenidos en un arreglo.



    http://www.mongodb.org/display/DOCS/Updating
¿Cómo hacer consultas en mongodb?
Operadores condicionales para describir criterios de búsqueda:
$gt(>) $lt(<), $gte(<=), $lte(>=), $ne(!=)
>db.things.find({j : {$lt: 3}});
$exists chequea que el documento tenga o no un campo
> db.things.find( { a : { $exists : true } } );

Operadores solo para arreglos:
>db.things.find(a : {$in: x}
$in a incluye al menos un valor del arreglo x.
$nin negación de $in
>db.things.find(a : {$all: x}
$all a incluye todos los valores de x

http://www.mongodb.org/display/DOCS/Advanced+Queries
¿Cómo hacer consultas en mongodb?
WHERE
sql> select * from musica where cantidad=1;
> db.musica.find(cantidad: 1);
sql> select nombre from musica where cantidad<2;
> db.musica.find(cantidad: {$lt: 2}, {'nombre': 1});
sql>select * from musica where name like 'The%';
>db.musica.find( { name : /The/ } );

ORDER BY
sql> select * from musica ORDER BY anho desc;
> db.musica.find({}).sort(anho: -1);

LIMIT y OFFSET
sql> select * from musica LIMIT 10 OFFSET 5;
>db.musica.find().skip(5).limit(10)
¿Cómo hacer consultas en mongodb?
COUNT
sql>SELECT COUNT(*) FROM musica WHERE autor = "The
Beatles";
>db.musica.count({autor: "The Beatles"})

DISTINCT
sql> select distinct autor from musica;
>db.musica.distinct("autor")
¿Cómo hacer consultas en mongodb?
GROUP BY
sql>select autor, count(*) from musica where genero="rock"
group by autor

db.musica.group({key: { autor: true },
             cond: { genero: "Rock" },
             reduce: function(obj, prev) {
                           prev.csum += obj.cantidad;
                        },
             initial: { csum: 0 }});
¿Como usar map/reduce en mongodb?

   utiliza JavaScript con Spidermonkey de Mozilla

   se puede pasar cualquier coleccion al map, osea se puede
   usar toda la flexibilidad de las consultas de
   MongoDB+Map/Reduce

 >db.collection.mapReduce(mapfunction,reducefunction[,
options]);
> m = function() { emit(this.user_id, 1); } > r = function(k,vals) {
return 1; } > res = db.events.mapReduce(m, r, { query :
{type:'sale'} }); > db[res.result].find().limit(2) { "_id" :
8321073716060 , "value" : 1 } { "_id" : 7921232311289 ,
"value" : 1 }
¿GridFS?

Almacenamiento de archivos de todo tamaño sin
comprometer su stack.

Viene con binarios y bibliotecas

API simple: list, put, get
Sharding

 Auto-Sharding
 particionamento de los datos en varios servidor
 sharding por coleccion
 proceso mongos (routing)
 replica set
 chuncks
 config servers
Sharding
http://mongomapper.com/
http://github.com/jnunemaker/mongomapper
¿Como empezar a usar
              MongoMapper?
Instalar
>sudo gem install mongo_mapper
>sudo gem install bson_ext

Incluir en el proyecto Rails
agregar la la dependencia en config/environment.rb
config.gem "mongo_mapper", :version => "0.7.6", :source =>
"http://gemcutter.org"
¿Como empezar a usar
              MongoMapper?
Configurar la conexión a la base de datos
config/database.yml

development:
  database: nombre-del-proyecto-development
  host: localhost
  port: 27017
test:
  database: nombre-del-proyecto-test
production:
  database: nombre-del-proyecto-production
Incluir en el proyecto Rails
Configurar la conexión a la base de datos
config/initializers/mongodb.rb

db_config = YAML::load(File.read(File.join(Rails.root,
"/config/database.yml")))
if db_config[Rails.env] && db_config[Rails.env]['adapter'] ==
'mongodb'
  mongo = db_config[Rails.env]
  MongoMapper.connection = Mongo::Connection.new(mongo
['hostname'], mongo['port'] || 27017, :logger => Rails.logger)
  MongoMapper.database = mongo['database']
  MongoMapper.ensure_indexes!
end
¿Cómo definir un modelo?

app/model/cancion.rb

class Album
 include MongoMapper::Document
 key :nombre, String
 key :autor, String
 key :genero, String
 key :anho, Integer
 key :cantidad, Integer
 key :canciones, Array
end
¿Comó definir un modelo empotrado?

app/model/cancion.rb
class Cancion
  include EmbeddedDocument
  key :name, String
  key :duracion, Integer
end
app/model/album.rb
class Album
 include MongoMapper::Document
 ...
 has_many :canciones, :class_name => "Cancion"
end
¿Que tipo de llaves existen?

los tipos de llaves que estan definidos en MongoMapper son:

   ObjectID
   String
   Integer
   Boolean
   Array
   Hash
   Time
   Binary
   Set
¿Se pueden definir nuevo tipos de
llaves?
class Point
 attr_reader :x, :y

 def self.to_mongo(value)...end
 def self.from_mongo(value)...end

 def initialize(*args)...end
end
¿Cómo se definen las relaciones uno a
             muchos?
class Cancion
 ...
 key :album_id, ObjectID
 belongs_to :album
 ...
end

class Album
  ...
  has_many :canciones
  ...
end
¿Cómo se definen las relaciones uno a
               uno?
class Cancion
 ...
 has_one :video
 ...
end

class Video
 ...
 key :cancion_id, ObjectID
 belongs_to :cancion
 ...
end
¿Cómo se definen las relaciones
         muchos a muchos?
class Cancion
 ...
 key :album_ids, Array
 many :albums, :in => :album_ids
 ...
end

class Album
  ...
 key :canciones_ids, Array
  has_many :canciones, :in => :canciones_ids
  ...
end
¿MongoMapper tiene
            relaciones polimorfas?
class Comment
 ...
 key :commentable_id, ObjectId
 key :commentable_type, String
 belongs_to :commentable, :polymorphic => true
end

class Album
  ...
  has_many :comments, :as => :commentable, :class_name =>
"Comment"
end
¿Cómo añadir validaciones a los
              modelos?
class Album
 include MongoMapper::Document
 key :nombre, String, :unique => true
 key :autor, String, :required => true
 key :genero, String, :in => ["Rock", "Pop", "Tropical"]
 key :anho, Integer
 key :cantidad, Integer
 validates_presence_of :nombre, :message => "no ah sido
asignado"
 many :canciones
end
¿Qué validaciones existen en
              MongoMapper?
required => boolean
unique => boolean
format => regexp
in => array
not_in => array
length => Integer/Range/Hash

además puedes usar la api de validatable para agregar mas
validaciónes
validates_presence_of, validates_format_of, validates_true_for,
etc
http://validatable.rubyforge.org/
¿Cómo hacer consultas usando
            MongoMapper?
Modelo.find(id_o_ids)
> Album.find("4c10a976eaa67158a0d74b4b")> Album.find
(["4c10a976eaa67158a0d74b4b",
"4c10a976eaa67158a0d74b4c"])
Modelo.first(criterio_opciones)
> Album.first({:genero => "Rock"})

Modelo.all(criterio_opciones)
>Album.all({:cantidad.lt => 5, :limit => 10, :order => "cantidad
asc"})

>Model.paginate(criterio_opciones)
Album.paginate(:per_page => 10, :page => 2, :genero
=> "Rock")
¿Cómo usar los modificadores con
          MongoMapper?
Modelo.<modifcador>(<criterio>, <valores>)
modificador: increment, decrement, set, unset, push, push_all,
add_to_set, pull, pull_all, pop

>Album.decrement( { :id => "4c10a976eaa67158a0d74b4b"}, {
cantidad: 1 });
>Album.add_to_set( {id: => "4c10a976eaa67158a0d74b4b"},
canciones: "Foo"});

>Album.collection.update(criteria, modificadores, opciones)
>Album.collection.update({:genero => "Rock"}, { "$inc" => {:
cantidad => 10}, "$pop" => {"canciones" : 1} }
¿Preguntas?




http://nosql.shapado.com

Mais conteúdo relacionado

Destaque

Destaque (7)

Motores De serie de CD
Motores De serie de CDMotores De serie de CD
Motores De serie de CD
 
Slideshare & Blogger
Slideshare & BloggerSlideshare & Blogger
Slideshare & Blogger
 
Ford Y D 1
Ford Y D 1Ford Y D 1
Ford Y D 1
 
Bajo Un Sol Abrazador Cp
Bajo Un Sol Abrazador CpBajo Un Sol Abrazador Cp
Bajo Un Sol Abrazador Cp
 
Haciendo Prensa Con Sl
Haciendo Prensa Con SlHaciendo Prensa Con Sl
Haciendo Prensa Con Sl
 
Diana rojas astrofoto cp
Diana rojas   astrofoto cpDiana rojas   astrofoto cp
Diana rojas astrofoto cp
 
Patrick aljordcampuspartysl
Patrick aljordcampuspartyslPatrick aljordcampuspartysl
Patrick aljordcampuspartysl
 

Semelhante a Nosqlcp

Mallorca MUG: MapReduce y Aggregation Framework
Mallorca MUG: MapReduce y Aggregation FrameworkMallorca MUG: MapReduce y Aggregation Framework
Mallorca MUG: MapReduce y Aggregation FrameworkEmilio Torrens
 
Análisis de Datos con MongoDB
Análisis de Datos con MongoDBAnálisis de Datos con MongoDB
Análisis de Datos con MongoDBAlejandro Mancilla
 
Node.js - Eventos para Todos
Node.js - Eventos para TodosNode.js - Eventos para Todos
Node.js - Eventos para TodosMariano Iglesias
 
Node js Alt.net Hispano
Node js Alt.net HispanoNode js Alt.net Hispano
Node js Alt.net Hispanohdgarcia
 
José Ramón Palanco - NoSQL Security [RootedCON 2011]
José Ramón Palanco - NoSQL Security [RootedCON 2011]José Ramón Palanco - NoSQL Security [RootedCON 2011]
José Ramón Palanco - NoSQL Security [RootedCON 2011]RootedCON
 
Greach 2011 - Engrandeciendo Grails con Mongo DB
Greach 2011 - Engrandeciendo Grails con Mongo DBGreach 2011 - Engrandeciendo Grails con Mongo DB
Greach 2011 - Engrandeciendo Grails con Mongo DBgreach_es
 
NOSQL: Primeros Pasos en MongoDB
NOSQL: Primeros Pasos en MongoDBNOSQL: Primeros Pasos en MongoDB
NOSQL: Primeros Pasos en MongoDBVictor Cuervo
 
Introducción a RubyOnRails
Introducción a RubyOnRailsIntroducción a RubyOnRails
Introducción a RubyOnRailsPablo Marrero
 
Mongodb administración
Mongodb administraciónMongodb administración
Mongodb administraciónJuan Ladetto
 
Jruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVMJruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVMjavier ramirez
 
Tutorial en Apache Spark - Clasificando tweets en realtime
Tutorial en Apache Spark - Clasificando tweets en realtimeTutorial en Apache Spark - Clasificando tweets en realtime
Tutorial en Apache Spark - Clasificando tweets en realtimeSocialmetrix
 
Creación de aplicaciones web con Node.js y Express
Creación de aplicaciones web con Node.js y ExpressCreación de aplicaciones web con Node.js y Express
Creación de aplicaciones web con Node.js y Expressbetabeers
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la DebianLeonardo Cezar
 

Semelhante a Nosqlcp (20)

Mallorca MUG: MapReduce y Aggregation Framework
Mallorca MUG: MapReduce y Aggregation FrameworkMallorca MUG: MapReduce y Aggregation Framework
Mallorca MUG: MapReduce y Aggregation Framework
 
NoSQL, Mongo DB & Google Maps
NoSQL, Mongo DB & Google MapsNoSQL, Mongo DB & Google Maps
NoSQL, Mongo DB & Google Maps
 
Análisis de Datos con MongoDB
Análisis de Datos con MongoDBAnálisis de Datos con MongoDB
Análisis de Datos con MongoDB
 
Node.js - Eventos para Todos
Node.js - Eventos para TodosNode.js - Eventos para Todos
Node.js - Eventos para Todos
 
Node js Alt.net Hispano
Node js Alt.net HispanoNode js Alt.net Hispano
Node js Alt.net Hispano
 
Cloud computinglabra
Cloud computinglabraCloud computinglabra
Cloud computinglabra
 
José Ramón Palanco - NoSQL Security [RootedCON 2011]
José Ramón Palanco - NoSQL Security [RootedCON 2011]José Ramón Palanco - NoSQL Security [RootedCON 2011]
José Ramón Palanco - NoSQL Security [RootedCON 2011]
 
Greach 2011 - Engrandeciendo Grails con Mongo DB
Greach 2011 - Engrandeciendo Grails con Mongo DBGreach 2011 - Engrandeciendo Grails con Mongo DB
Greach 2011 - Engrandeciendo Grails con Mongo DB
 
MapReduce
MapReduceMapReduce
MapReduce
 
NOSQL: Primeros Pasos en MongoDB
NOSQL: Primeros Pasos en MongoDBNOSQL: Primeros Pasos en MongoDB
NOSQL: Primeros Pasos en MongoDB
 
Cloud Computing y MapReduce
Cloud Computing y MapReduceCloud Computing y MapReduce
Cloud Computing y MapReduce
 
15 iniciacion gnu_linux
15 iniciacion gnu_linux15 iniciacion gnu_linux
15 iniciacion gnu_linux
 
Introducción a RubyOnRails
Introducción a RubyOnRailsIntroducción a RubyOnRails
Introducción a RubyOnRails
 
Mongodb administración
Mongodb administraciónMongodb administración
Mongodb administración
 
Semana 3 MONGODB conceptos básicos NOSQL
Semana 3   MONGODB conceptos básicos NOSQLSemana 3   MONGODB conceptos básicos NOSQL
Semana 3 MONGODB conceptos básicos NOSQL
 
Jruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVMJruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVM
 
Tutorial en Apache Spark - Clasificando tweets en realtime
Tutorial en Apache Spark - Clasificando tweets en realtimeTutorial en Apache Spark - Clasificando tweets en realtime
Tutorial en Apache Spark - Clasificando tweets en realtime
 
Creación de aplicaciones web con Node.js y Express
Creación de aplicaciones web con Node.js y ExpressCreación de aplicaciones web con Node.js y Express
Creación de aplicaciones web con Node.js y Express
 
JRuby al Rescate de J2EE
JRuby al Rescate de J2EEJRuby al Rescate de J2EE
JRuby al Rescate de J2EE
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la Debian
 

Mais de campus party

¿Qué es SCADA y cómo me afecta su (in)seguridad?
¿Qué es SCADA y cómo me afecta su (in)seguridad? ¿Qué es SCADA y cómo me afecta su (in)seguridad?
¿Qué es SCADA y cómo me afecta su (in)seguridad? campus party
 
Producción del largometraje pequeñas voces
Producción del largometraje pequeñas vocesProducción del largometraje pequeñas voces
Producción del largometraje pequeñas vocescampus party
 
Conferencia: Aplicaciones y el reto del desarrollo móvil
Conferencia: Aplicaciones y el reto del desarrollo móvilConferencia: Aplicaciones y el reto del desarrollo móvil
Conferencia: Aplicaciones y el reto del desarrollo móvilcampus party
 
Como sería un viaje a la velocidad de la luz - Miguel Ángel Contreras
Como sería un viaje a la velocidad de la luz - Miguel Ángel ContrerasComo sería un viaje a la velocidad de la luz - Miguel Ángel Contreras
Como sería un viaje a la velocidad de la luz - Miguel Ángel Contrerascampus party
 
Como sería un viaje a la velocidad de la luz - Miguel Ángel Contreras
Como sería un viaje a la velocidad de la luz - Miguel Ángel ContrerasComo sería un viaje a la velocidad de la luz - Miguel Ángel Contreras
Como sería un viaje a la velocidad de la luz - Miguel Ángel Contrerascampus party
 
X taller bluevialiminal
X taller bluevialiminalX taller bluevialiminal
X taller bluevialiminalcampus party
 
X liminal buevia 2 (dllo.)-taller
X liminal buevia 2 (dllo.)-tallerX liminal buevia 2 (dllo.)-taller
X liminal buevia 2 (dllo.)-tallercampus party
 
X elalgoritmodelamemoria maria juliana soto (social media) (1) 1
X elalgoritmodelamemoria maria juliana soto (social media) (1) 1X elalgoritmodelamemoria maria juliana soto (social media) (1) 1
X elalgoritmodelamemoria maria juliana soto (social media) (1) 1campus party
 
Theremin Alfredo Vargas
Theremin Alfredo Vargas Theremin Alfredo Vargas
Theremin Alfredo Vargas campus party
 
Sonido y cine Ricardo Escallon
Sonido y cine Ricardo Escallon Sonido y cine Ricardo Escallon
Sonido y cine Ricardo Escallon campus party
 
Photoshop para fotógrafos. Del cuarto oscuro al cuarto digital - Andrés Bautista
Photoshop para fotógrafos. Del cuarto oscuro al cuarto digital - Andrés BautistaPhotoshop para fotógrafos. Del cuarto oscuro al cuarto digital - Andrés Bautista
Photoshop para fotógrafos. Del cuarto oscuro al cuarto digital - Andrés Bautistacampus party
 
Photoshop para fotógrafos. Del cuarto oscuro al cuarto digital - Andrés Fonseca
Photoshop para fotógrafos. Del cuarto oscuro al cuarto digital - Andrés FonsecaPhotoshop para fotógrafos. Del cuarto oscuro al cuarto digital - Andrés Fonseca
Photoshop para fotógrafos. Del cuarto oscuro al cuarto digital - Andrés Fonsecacampus party
 
Aseguramiento de Vulnerabilidades Web con tecnologías OWASP
Aseguramiento de Vulnerabilidades Web con tecnologías OWASPAseguramiento de Vulnerabilidades Web con tecnologías OWASP
Aseguramiento de Vulnerabilidades Web con tecnologías OWASPcampus party
 
Mundos virtuales inmersivos y social shopping
Mundos virtuales inmersivos y social shopping Mundos virtuales inmersivos y social shopping
Mundos virtuales inmersivos y social shopping campus party
 
Creación transmediática y comunidades en práctica
Creación transmediática y comunidades en prácticaCreación transmediática y comunidades en práctica
Creación transmediática y comunidades en prácticacampus party
 
Implementación de Cloud Computing con Software Libre y medidas de seguridad p...
Implementación de Cloud Computing con Software Libre y medidas de seguridad p...Implementación de Cloud Computing con Software Libre y medidas de seguridad p...
Implementación de Cloud Computing con Software Libre y medidas de seguridad p...campus party
 

Mais de campus party (20)

Titulo
Titulo Titulo
Titulo
 
¿Qué es SCADA y cómo me afecta su (in)seguridad?
¿Qué es SCADA y cómo me afecta su (in)seguridad? ¿Qué es SCADA y cómo me afecta su (in)seguridad?
¿Qué es SCADA y cómo me afecta su (in)seguridad?
 
Producción del largometraje pequeñas voces
Producción del largometraje pequeñas vocesProducción del largometraje pequeñas voces
Producción del largometraje pequeñas voces
 
Conferencia: Aplicaciones y el reto del desarrollo móvil
Conferencia: Aplicaciones y el reto del desarrollo móvilConferencia: Aplicaciones y el reto del desarrollo móvil
Conferencia: Aplicaciones y el reto del desarrollo móvil
 
Liminal Bluevia 1
Liminal Bluevia 1Liminal Bluevia 1
Liminal Bluevia 1
 
Como sería un viaje a la velocidad de la luz - Miguel Ángel Contreras
Como sería un viaje a la velocidad de la luz - Miguel Ángel ContrerasComo sería un viaje a la velocidad de la luz - Miguel Ángel Contreras
Como sería un viaje a la velocidad de la luz - Miguel Ángel Contreras
 
Como sería un viaje a la velocidad de la luz - Miguel Ángel Contreras
Como sería un viaje a la velocidad de la luz - Miguel Ángel ContrerasComo sería un viaje a la velocidad de la luz - Miguel Ángel Contreras
Como sería un viaje a la velocidad de la luz - Miguel Ángel Contreras
 
X taller bluevialiminal
X taller bluevialiminalX taller bluevialiminal
X taller bluevialiminal
 
X liminal buevia 2 (dllo.)-taller
X liminal buevia 2 (dllo.)-tallerX liminal buevia 2 (dllo.)-taller
X liminal buevia 2 (dllo.)-taller
 
X elalgoritmodelamemoria maria juliana soto (social media) (1) 1
X elalgoritmodelamemoria maria juliana soto (social media) (1) 1X elalgoritmodelamemoria maria juliana soto (social media) (1) 1
X elalgoritmodelamemoria maria juliana soto (social media) (1) 1
 
Theremin Alfredo Vargas
Theremin Alfredo Vargas Theremin Alfredo Vargas
Theremin Alfredo Vargas
 
Sonido y cine Ricardo Escallon
Sonido y cine Ricardo Escallon Sonido y cine Ricardo Escallon
Sonido y cine Ricardo Escallon
 
Photoshop para fotógrafos. Del cuarto oscuro al cuarto digital - Andrés Bautista
Photoshop para fotógrafos. Del cuarto oscuro al cuarto digital - Andrés BautistaPhotoshop para fotógrafos. Del cuarto oscuro al cuarto digital - Andrés Bautista
Photoshop para fotógrafos. Del cuarto oscuro al cuarto digital - Andrés Bautista
 
Photoshop para fotógrafos. Del cuarto oscuro al cuarto digital - Andrés Fonseca
Photoshop para fotógrafos. Del cuarto oscuro al cuarto digital - Andrés FonsecaPhotoshop para fotógrafos. Del cuarto oscuro al cuarto digital - Andrés Fonseca
Photoshop para fotógrafos. Del cuarto oscuro al cuarto digital - Andrés Fonseca
 
Aseguramiento de Vulnerabilidades Web con tecnologías OWASP
Aseguramiento de Vulnerabilidades Web con tecnologías OWASPAseguramiento de Vulnerabilidades Web con tecnologías OWASP
Aseguramiento de Vulnerabilidades Web con tecnologías OWASP
 
Mundos virtuales inmersivos y social shopping
Mundos virtuales inmersivos y social shopping Mundos virtuales inmersivos y social shopping
Mundos virtuales inmersivos y social shopping
 
Creación transmediática y comunidades en práctica
Creación transmediática y comunidades en prácticaCreación transmediática y comunidades en práctica
Creación transmediática y comunidades en práctica
 
Android+Arduino
Android+ArduinoAndroid+Arduino
Android+Arduino
 
Implementación de Cloud Computing con Software Libre y medidas de seguridad p...
Implementación de Cloud Computing con Software Libre y medidas de seguridad p...Implementación de Cloud Computing con Software Libre y medidas de seguridad p...
Implementación de Cloud Computing con Software Libre y medidas de seguridad p...
 
Linux en caja
Linux en cajaLinux en caja
Linux en caja
 

Último

Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxAlexander López
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxJOSEMANUELHERNANDEZH11
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel tallerValentinaTabares11
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxMariaBurgos55
 

Último (20)

Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptx
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel taller
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptx
 

Nosqlcp

  • 1. NoSQL: MongoDB y MongoMapper
  • 2. Patrick Aljord, David y Jorge Cuadrado
  • 3.
  • 4.
  • 5.
  • 6. = +
  • 8. Características Esquema libre Distribuidas y escalables Capacidad de manejo de grandes volúmenes de datos Performance/rendimiento
  • 9. Tipos de NoSQL Key/Value (Llave/valor) Column-oriented (orientadas a columnas) Document-oriented (orientadas a documentos)
  • 10. Key/Value ¿Qué es? una llave un blob Ventajas: muy simple para implementar muy rapido Útil para: el cache sistema de manejo de cola (redis) limitado para aplicaciones complejas
  • 11. Column-oriented ¿Qué es? utiliza tablas dinamicas mas flexible que tablas de RDBMS multi-dimensional Ventajas: el sistema de consulta se acerca al de un RDBMS diseño de google, soporta grandes cargas versiones Útil para: grandes colecciones mapping de los datos a objetos no es natural (igual que rdbms)
  • 12. Document-oriented ¿Qué es? formato json o xml muy flexible Ventajas: simple rapido, pero menos que key/value store mapea facilmente a un objeto (python, ruby, c++ etc) Útil para: aplicaciones web complejas todo tipo de aplicacion que utiliza documentos y necesita flexibilidad
  • 13. La soluciones que aporta el NoSQL built-in replication, master a master Map/Reduce mas simple de instalar (se necesita tomar un curso para instalar a oracle o sqlserver) casi todas son software libre, muy accesible para todos hecho para programadores, mas orientadas a la programaciones (map/reduce lo entienden mejor los programadores que los administradores de base de datos)
  • 14. ¿Qué es el map/reduce? permite operaciones de manipulacion en batch de datos manipulation y operaciones de agregacion de datos equivalente a GROUP BY en SQL
  • 15. ¿Concretamente que es map/reduce?
  • 16. ¿Que es el map? El map es aplicar una funcion sobre cada elemento de una matriz y retornar una matriz con sus elementos modificados. Ejemplo (en ruby): > matriz = [1,2] > matriz.map { |n| n+2 } => [3, 4]
  • 17. ¿Qué es el reduce? Reduce es aplicar una funcion sobre cada elemento de una matriz y retornar un solo elemento. Se hace iterando sobre cada elemento de la matriz. Cada iteracion empieza con el valor retornado por la iteracion anterior y hace algo con esta. Por esta razón, un reduce se debe iniciar con una valor de entrada. ejemplo (en ruby), con valor de entrada igual a cero: > [1, 2, 3].reduce(0) do |sum, value| sum + value end => 6
  • 18. Las ventajas del map/reduce Esta hecho para poderse ejecutar en paralelo Como todo es colecciones => Fácil de dividir en varias tareas Probado y comprobado por los grande(google, amazon, facebook)
  • 20.
  • 21. Las principales funcionalidades Document-oriented storage Consultas Modificadores atómicos Map/Reduce GridFS: Almacenamiento de archivos Soporte para Full Index Replicación & Alta Disponibilidad Auto-Sharding
  • 22. ¿Como instalar mongodb? 1. Para instalar mongodb descargamos el binario correspondiente para nuestro sistema operativo http://www. mongodb.org/display/DOCS/Downloads 2. descomprimes el paquete y creas los directorios /data y /data/db o C:data y C:data dependiendo de tu SO 3. para iniciar el servicio corres el binario /bin/mongod o binmongod.exe que viene en el paquete que has descargado en el paso 1 para un entorno de producción se debe usar un sistema operativo de 64-bits.
  • 23. ¿Como instalar mongodb? Para los sistemas unix*(linux,freebsd, OSX) es recomendado usar el sistema de paquetes de cada sistema operativo. adicionalmente 10gen provee de paquetes oficiales para las distribuciones Linux Debian, Ubuntu, CentOS y Fedora http://www.mongodb. org/display/DOCS/Ubuntu+and+Debian+packages http://www.mongodb. org/display/DOCS/CentOS+and+Fedora+Packages
  • 24. ¿ Cómo se guardan los datos en mongodb? Colección: Documento: la música que tiene Álbum de un el almacén artista
  • 25. ¿BSON? { nombre: "Yellow Submarine", autor: "The Beatles", canciones: ["Yellow Submarine", "Only A Northern Song", "All Together Now", "Hey Bulldog", "It's All Too Much", "All You Need Is Love", "Pepperland", "Sea Of Time", "Sea Of Holes", "Sea Of Monsters", "March Of The Meanies", "Pepperland Laid Waste", "Yellow Submarine In Pepperland" ], genero: "Rock", anho: 1969, cantidad: 20 }
  • 26. Empotrar vs Referenciar { nombre: "Yellow Submarine", autor: "The Beatles", canciones: [ { name: "Yellow Submarine", duracion: 159 }, { name: "Only A Northern Song", duracion: 204 }, { name: "All Together Now", duracion: 130 }, { name: "Hey Bulldog", duracion: 191 }, { name: "It's All Too Much", duracion: 384 }, { name: "All You Need Is Love", duracion: 231 }, ...], genero: "Rock", anho: 1969, cantidad: 20 }
  • 27. ¿Cómo conectarse a mongodb? console: ./bin/mongo Drivers Oficiales: Drivers Comunitarios: C C# and .NET C++ Clojure Java Erlang Javascript Go Perl Groovy PHP Haskell Python node.js Ruby Lua LuaMongo Scala Scheme (PLT) Smalltalk http://www.mongodb.org/display/DOCS/Drivers
  • 28. ¿Cómo añadir y eliminar documentos a una colección? ./mongo > use tienda_de_musica > album = { nombre: "Let it be", autor: "The Beatles", canciones: [], genero: "Rock", anho: 1970, cantidad: 10 } > db.musica.save(album); > db.musica.find(); { "_id" : ObjectId("4c10a976eaa67158a0d74b4b"), "nombre": "Let it be", "autor" : "The Beatles", "canciones" : [ ], "genero" : "Rock", "anho" : 1970, "cantidad" : 10 } >db.music.remove({}); >db.music.remove({autor: "The Beatles"})
  • 29. ¿Cómo actualizar un documento? Guardar > album = db.musica.find(ObjectId ("4c10a976eaa67158a0d74b4b" ); > ... > album.genero = "pop" > album.cantidad = 5 > db.musica.save(album);
  • 30. ¿Como actualizar un documento? Modificadores db.coleccion.update( criterio_de_busqueda, objeto_o_operadores, [upsert?], [múltiple?]) >album.genero = "Rock" >db.musica.update( {_id: album._id}, album) >db.musica.update( {_id: ObjectId ("4c10a976eaa67158a0d74b4b")}, {$inc: { cantidad: -1 }}); >db.musica.update( _id: 10, $set: { cantidad: -1 }, true); http://www.mongodb.org/display/DOCS/Updating
  • 31. Un poco más acerca de los modifcadores $set y $unset: sirven para asignarle y quitarle el valor a un campo de un documento respectivamente. $inc: incrementan el valor asignado a un campo, solo es valido para valores enteros. $push,$pushAll: añaden uno o varios valores a un arreglo de datos contenido en un campo del documento. $addToSet: añade un valor a un arreglo si el valor no esta repetido. $pop, $pull, $pullAll: son operadores para borrar los valores contenidos en un arreglo. http://www.mongodb.org/display/DOCS/Updating
  • 32. ¿Cómo hacer consultas en mongodb? Operadores condicionales para describir criterios de búsqueda: $gt(>) $lt(<), $gte(<=), $lte(>=), $ne(!=) >db.things.find({j : {$lt: 3}}); $exists chequea que el documento tenga o no un campo > db.things.find( { a : { $exists : true } } ); Operadores solo para arreglos: >db.things.find(a : {$in: x} $in a incluye al menos un valor del arreglo x. $nin negación de $in >db.things.find(a : {$all: x} $all a incluye todos los valores de x http://www.mongodb.org/display/DOCS/Advanced+Queries
  • 33. ¿Cómo hacer consultas en mongodb? WHERE sql> select * from musica where cantidad=1; > db.musica.find(cantidad: 1); sql> select nombre from musica where cantidad<2; > db.musica.find(cantidad: {$lt: 2}, {'nombre': 1}); sql>select * from musica where name like 'The%'; >db.musica.find( { name : /The/ } ); ORDER BY sql> select * from musica ORDER BY anho desc; > db.musica.find({}).sort(anho: -1); LIMIT y OFFSET sql> select * from musica LIMIT 10 OFFSET 5; >db.musica.find().skip(5).limit(10)
  • 34. ¿Cómo hacer consultas en mongodb? COUNT sql>SELECT COUNT(*) FROM musica WHERE autor = "The Beatles"; >db.musica.count({autor: "The Beatles"}) DISTINCT sql> select distinct autor from musica; >db.musica.distinct("autor")
  • 35. ¿Cómo hacer consultas en mongodb? GROUP BY sql>select autor, count(*) from musica where genero="rock" group by autor db.musica.group({key: { autor: true }, cond: { genero: "Rock" }, reduce: function(obj, prev) { prev.csum += obj.cantidad; }, initial: { csum: 0 }});
  • 36. ¿Como usar map/reduce en mongodb? utiliza JavaScript con Spidermonkey de Mozilla se puede pasar cualquier coleccion al map, osea se puede usar toda la flexibilidad de las consultas de MongoDB+Map/Reduce >db.collection.mapReduce(mapfunction,reducefunction[, options]); > m = function() { emit(this.user_id, 1); } > r = function(k,vals) { return 1; } > res = db.events.mapReduce(m, r, { query : {type:'sale'} }); > db[res.result].find().limit(2) { "_id" : 8321073716060 , "value" : 1 } { "_id" : 7921232311289 , "value" : 1 }
  • 37. ¿GridFS? Almacenamiento de archivos de todo tamaño sin comprometer su stack. Viene con binarios y bibliotecas API simple: list, put, get
  • 38. Sharding Auto-Sharding particionamento de los datos en varios servidor sharding por coleccion proceso mongos (routing) replica set chuncks config servers
  • 41.
  • 42. ¿Como empezar a usar MongoMapper? Instalar >sudo gem install mongo_mapper >sudo gem install bson_ext Incluir en el proyecto Rails agregar la la dependencia en config/environment.rb config.gem "mongo_mapper", :version => "0.7.6", :source => "http://gemcutter.org"
  • 43. ¿Como empezar a usar MongoMapper? Configurar la conexión a la base de datos config/database.yml development: database: nombre-del-proyecto-development host: localhost port: 27017 test: database: nombre-del-proyecto-test production: database: nombre-del-proyecto-production
  • 44. Incluir en el proyecto Rails Configurar la conexión a la base de datos config/initializers/mongodb.rb db_config = YAML::load(File.read(File.join(Rails.root, "/config/database.yml"))) if db_config[Rails.env] && db_config[Rails.env]['adapter'] == 'mongodb' mongo = db_config[Rails.env] MongoMapper.connection = Mongo::Connection.new(mongo ['hostname'], mongo['port'] || 27017, :logger => Rails.logger) MongoMapper.database = mongo['database'] MongoMapper.ensure_indexes! end
  • 45. ¿Cómo definir un modelo? app/model/cancion.rb class Album include MongoMapper::Document key :nombre, String key :autor, String key :genero, String key :anho, Integer key :cantidad, Integer key :canciones, Array end
  • 46. ¿Comó definir un modelo empotrado? app/model/cancion.rb class Cancion include EmbeddedDocument key :name, String key :duracion, Integer end app/model/album.rb class Album include MongoMapper::Document ... has_many :canciones, :class_name => "Cancion" end
  • 47. ¿Que tipo de llaves existen? los tipos de llaves que estan definidos en MongoMapper son: ObjectID String Integer Boolean Array Hash Time Binary Set
  • 48. ¿Se pueden definir nuevo tipos de llaves? class Point attr_reader :x, :y def self.to_mongo(value)...end def self.from_mongo(value)...end def initialize(*args)...end end
  • 49. ¿Cómo se definen las relaciones uno a muchos? class Cancion ... key :album_id, ObjectID belongs_to :album ... end class Album ... has_many :canciones ... end
  • 50. ¿Cómo se definen las relaciones uno a uno? class Cancion ... has_one :video ... end class Video ... key :cancion_id, ObjectID belongs_to :cancion ... end
  • 51. ¿Cómo se definen las relaciones muchos a muchos? class Cancion ... key :album_ids, Array many :albums, :in => :album_ids ... end class Album ... key :canciones_ids, Array has_many :canciones, :in => :canciones_ids ... end
  • 52. ¿MongoMapper tiene relaciones polimorfas? class Comment ... key :commentable_id, ObjectId key :commentable_type, String belongs_to :commentable, :polymorphic => true end class Album ... has_many :comments, :as => :commentable, :class_name => "Comment" end
  • 53. ¿Cómo añadir validaciones a los modelos? class Album include MongoMapper::Document key :nombre, String, :unique => true key :autor, String, :required => true key :genero, String, :in => ["Rock", "Pop", "Tropical"] key :anho, Integer key :cantidad, Integer validates_presence_of :nombre, :message => "no ah sido asignado" many :canciones end
  • 54. ¿Qué validaciones existen en MongoMapper? required => boolean unique => boolean format => regexp in => array not_in => array length => Integer/Range/Hash además puedes usar la api de validatable para agregar mas validaciónes validates_presence_of, validates_format_of, validates_true_for, etc http://validatable.rubyforge.org/
  • 55. ¿Cómo hacer consultas usando MongoMapper? Modelo.find(id_o_ids) > Album.find("4c10a976eaa67158a0d74b4b")> Album.find (["4c10a976eaa67158a0d74b4b", "4c10a976eaa67158a0d74b4c"]) Modelo.first(criterio_opciones) > Album.first({:genero => "Rock"}) Modelo.all(criterio_opciones) >Album.all({:cantidad.lt => 5, :limit => 10, :order => "cantidad asc"}) >Model.paginate(criterio_opciones) Album.paginate(:per_page => 10, :page => 2, :genero => "Rock")
  • 56. ¿Cómo usar los modificadores con MongoMapper? Modelo.<modifcador>(<criterio>, <valores>) modificador: increment, decrement, set, unset, push, push_all, add_to_set, pull, pull_all, pop >Album.decrement( { :id => "4c10a976eaa67158a0d74b4b"}, { cantidad: 1 }); >Album.add_to_set( {id: => "4c10a976eaa67158a0d74b4b"}, canciones: "Foo"}); >Album.collection.update(criteria, modificadores, opciones) >Album.collection.update({:genero => "Rock"}, { "$inc" => {: cantidad => 10}, "$pop" => {"canciones" : 1} }