YO:
@kidpollo
¿POR QUÉ?
¿CON QUÉ?
   ¿CÓMO?
¿POR QUÉ?
• Sufres   de “Nubemania”

• Necesitasuna escusa para hacer lo que los chicos cool
 hacen. (PELIGROSO!!!)

• Tienes   curiosidad.

• Odias MySQL, no crees que Postgres sea mas rapido y no
 te alcanza para licencias de Oracle.

• Tus
    datos son principalmente referenciados por ID sin la
 necesidad de “JOINS” muy complejos.

• Manejas  una cantidad de datos no trivial y la replicacion y
 escalabilidad de MySQL te dan miedo.
¿CON QUÉ?
EL FUTURO!!!

               Tokio Cabinet / Redis


                        Couchdb
INTRO Y COMPARACION CON COUCHDB


•   Super Rapido?                   •   Super Rapido?

•   Conexion por drivers            •   REST (lento pero cool)

•   Documento/Colleccion            •   Vistas / Documentos

•   Consultas e indices dinamicos   •   Consultas e indices estaticos :(

•   Replicado                       •   Replicado

•   A prueba de fallos?             •   A prueba de fallos?

•   Map / Reduce (muy pronto)       •   Map / Reduce
BUENO PARA

• Sitios   web en general

• Caching

• Alto   volumen, bajo valor

• Gran     escalabilidad

• Guardar     estructuras de los objetos en JSON o BSON
NO TAN BUENO PARA


• Alto   volumen de transacciones

• Inteligencia   de Negocios (BI)

• Cosas   que requieran SQL
INSTALACION

• mkdir   -p /data/db

• bajar, descompactar, mongod   run

• http://video.railstips.org/mongomapper-demo/

• http://www.shiftcommathree.com/articles/how-to-install-
 mongodb-on-os-x
BASE DE DATOS


• mismo   concepto que en MySQL (Repositorio de datos)

• formado    de colecciones

• creadas   al vuelo al ser instanciadas :D
COLECCIÓN

• Tabla   pero sin esquema :D!!!!!!!!!

• Agrupa    datos en menores sets (velocidad, couch no hace
 esto.)

• Cada entidad de primer nivel tiene su colección.(usuarios,
 artículos, etc.)

• Indexable    por una o mas llaves (Máximo 10 por el momento)
DOCUMENTO

• Almacenado     como parte de una colección.

• Pueden    tener un campo _id que sirve como llave primaria.

• Se   manejan tres tipos de relaciones:

 • Documento      Embebido (Subdocument)

 • Asociación.

 • Referencia    a otra bd.
CONSULTAS

• db.collection.find({‘first_name’: ‘Paco’})     # los Pacos

• db.collection.find({‘first_name’: /^J/})     # regex

• db.collection.find_first({‘_id’:1})   # primero con _id 1

• db.collection.find({‘age’: {‘$gt’: 21}})   # borrachos

• db.collection.find({‘author.first_name’:‘John’})     # subdocumento

• db.collection.find({$where:‘this.age       >= 6 && this.age <= 18’})
MORE QUERYING

• $in, $nin, $all, $ne, $gt, $gte, $lt, $lte, $size, $where

• :fields   (igual a :select en active record)

• :limit, :offset   para paginado

• :sort   ascendiente o descendiente [[‘foo’, 1], [‘bar’, -1]]

• count    and group (usa map/reduce)
¿CÓMO?
CON RUBY

• mongo-ruby-driver   http://github.com/mongodb/mongo-ruby-
 driver

• activerecord adapter http://github.com/mongodb/
 activerecord-mongo-adapter

• mongorecord  http://github.com/mongodb/mongo-
 activerecord-ruby
NUNEMAPPER
               (MONGOMAPPER)

• Mongo    no es MySQL (No emula ORM atado a SQL)

• DSL    que abstrae a Mongo pero no lo esconde.

• Aprendes    Mongo mientras lo usas.

• Es   muy divertido de usar y refrescante!

• Mas   parecido a Datamapper.
CARACTERISTICAS

• Typecasting(El tipo puede       • Creacion  y actualizacion
 ser una clase definida por ti!)     simple or multiple.

• Callbacks
          (after_create,          • Delete    y Destroy y _all
 before_destroy etc.)
                                  • Find: id, ids, :all, :first, :last
• Validaciones   (como
 extension)                       • Manejo de asociaciones y
                                    sub documentos.
• Conexióny base de datos
 por documento.
EJEMPLOS
class User
  include MongoMapper::Document
  key :name, String, :required => true, :length => 5..100
  key :email, String, :required => true, :index => true
  key :age, Integer, :numeric => true
  key :active, Boolean, :default => true
  key :address, Address
  many :articles
end

class Address
  include MongoMapper::EmbeddedDocument
  key :street, String
  key :city, String
  key :state, String, :length => 2
  key :zip, Integer, :numeric => true, :length => 5
end
LINKS

•   http://railstips.org/2009/6/3/what-if-a-key-value-store-mated-with-a-relational-database-system

•   http://railstips.org/2009/6/27/mongomapper-the-rad-mongo-wrapper

•   http://railstips.org/2009/7/23/getting-started-with-mongomapper-and-rails

•   http://locomotivation.squeejee.com/post/117119353/mongodb-ruby-friendly-document-storage-
    that-doesnt-rhyme

•   http://mongodb.com/

•   http://10gen.com
GRACIAS
                  Presentacion basada (copiada) de:
             http://www.mefeedia.com/watch/25040980
http://railstips.org/2009/8/19/mongomapper-indy-rb-presentation



           kidpollo@gmail.com

Mongo Mapper

  • 2.
  • 3.
  • 4.
  • 5.
    • Sufres de “Nubemania” • Necesitasuna escusa para hacer lo que los chicos cool hacen. (PELIGROSO!!!) • Tienes curiosidad. • Odias MySQL, no crees que Postgres sea mas rapido y no te alcanza para licencias de Oracle. • Tus datos son principalmente referenciados por ID sin la necesidad de “JOINS” muy complejos. • Manejas una cantidad de datos no trivial y la replicacion y escalabilidad de MySQL te dan miedo.
  • 6.
  • 7.
    EL FUTURO!!! Tokio Cabinet / Redis Couchdb
  • 8.
    INTRO Y COMPARACIONCON COUCHDB • Super Rapido? • Super Rapido? • Conexion por drivers • REST (lento pero cool) • Documento/Colleccion • Vistas / Documentos • Consultas e indices dinamicos • Consultas e indices estaticos :( • Replicado • Replicado • A prueba de fallos? • A prueba de fallos? • Map / Reduce (muy pronto) • Map / Reduce
  • 9.
    BUENO PARA • Sitios web en general • Caching • Alto volumen, bajo valor • Gran escalabilidad • Guardar estructuras de los objetos en JSON o BSON
  • 10.
    NO TAN BUENOPARA • Alto volumen de transacciones • Inteligencia de Negocios (BI) • Cosas que requieran SQL
  • 11.
    INSTALACION • mkdir -p /data/db • bajar, descompactar, mongod run • http://video.railstips.org/mongomapper-demo/ • http://www.shiftcommathree.com/articles/how-to-install- mongodb-on-os-x
  • 12.
    BASE DE DATOS •mismo concepto que en MySQL (Repositorio de datos) • formado de colecciones • creadas al vuelo al ser instanciadas :D
  • 13.
    COLECCIÓN • Tabla pero sin esquema :D!!!!!!!!! • Agrupa datos en menores sets (velocidad, couch no hace esto.) • Cada entidad de primer nivel tiene su colección.(usuarios, artículos, etc.) • Indexable por una o mas llaves (Máximo 10 por el momento)
  • 14.
    DOCUMENTO • Almacenado como parte de una colección. • Pueden tener un campo _id que sirve como llave primaria. • Se manejan tres tipos de relaciones: • Documento Embebido (Subdocument) • Asociación. • Referencia a otra bd.
  • 15.
    CONSULTAS • db.collection.find({‘first_name’: ‘Paco’}) # los Pacos • db.collection.find({‘first_name’: /^J/}) # regex • db.collection.find_first({‘_id’:1}) # primero con _id 1 • db.collection.find({‘age’: {‘$gt’: 21}}) # borrachos • db.collection.find({‘author.first_name’:‘John’}) # subdocumento • db.collection.find({$where:‘this.age >= 6 && this.age <= 18’})
  • 16.
    MORE QUERYING • $in,$nin, $all, $ne, $gt, $gte, $lt, $lte, $size, $where • :fields (igual a :select en active record) • :limit, :offset para paginado • :sort ascendiente o descendiente [[‘foo’, 1], [‘bar’, -1]] • count and group (usa map/reduce)
  • 17.
  • 18.
    CON RUBY • mongo-ruby-driver http://github.com/mongodb/mongo-ruby- driver • activerecord adapter http://github.com/mongodb/ activerecord-mongo-adapter • mongorecord http://github.com/mongodb/mongo- activerecord-ruby
  • 19.
    NUNEMAPPER (MONGOMAPPER) • Mongo no es MySQL (No emula ORM atado a SQL) • DSL que abstrae a Mongo pero no lo esconde. • Aprendes Mongo mientras lo usas. • Es muy divertido de usar y refrescante! • Mas parecido a Datamapper.
  • 20.
    CARACTERISTICAS • Typecasting(El tipopuede • Creacion y actualizacion ser una clase definida por ti!) simple or multiple. • Callbacks (after_create, • Delete y Destroy y _all before_destroy etc.) • Find: id, ids, :all, :first, :last • Validaciones (como extension) • Manejo de asociaciones y sub documentos. • Conexióny base de datos por documento.
  • 21.
    EJEMPLOS class User include MongoMapper::Document key :name, String, :required => true, :length => 5..100 key :email, String, :required => true, :index => true key :age, Integer, :numeric => true key :active, Boolean, :default => true key :address, Address many :articles end class Address include MongoMapper::EmbeddedDocument key :street, String key :city, String key :state, String, :length => 2 key :zip, Integer, :numeric => true, :length => 5 end
  • 22.
    LINKS • http://railstips.org/2009/6/3/what-if-a-key-value-store-mated-with-a-relational-database-system • http://railstips.org/2009/6/27/mongomapper-the-rad-mongo-wrapper • http://railstips.org/2009/7/23/getting-started-with-mongomapper-and-rails • http://locomotivation.squeejee.com/post/117119353/mongodb-ruby-friendly-document-storage- that-doesnt-rhyme • http://mongodb.com/ • http://10gen.com
  • 23.
    GRACIAS Presentacion basada (copiada) de: http://www.mefeedia.com/watch/25040980 http://railstips.org/2009/8/19/mongomapper-indy-rb-presentation kidpollo@gmail.com

Notas del editor

  • #16 find always returns a cursor that you can keep iterating through