Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Mongo Mapper (Pio.la 2010)

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

Mongo Mapper (Pio.la 2010)

Avatar for kidpollo

kidpollo

June 08, 2012
Tweet

More Decks by kidpollo

Other Decks in Programming

Transcript

  1. • Sufres de “Nubemania” • Necesitas una 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 le necesidad de “JOINS” muy complejos. • Manejas una cantidad de datos no trivial y la replicacion y escalabilidad de MySQL te dan miedo. Monday, November 9, 2009
  2. INTRO Y COMPARACION CON COUCHDB • Super Rapido? • Conexion

    por drivers • Documento/Colleccion • Consultas e indices dinamicos • Replicado • A prueba de fallos? • Map / Reduce (muy pronto) • Super Rapido? • REST (lento pero cool) • Vistas / Documentos • Consultas e indices estaticos :( • Replicado • A prueba de fallos? • Map / Reduce Monday, November 9, 2009
  3. BUENO PARA • Sitios web en general • Caching •

    Alto volumen, bajo valor • Gran escalabilidad • Guardar estructuras de los objetos en JSON o BSON Monday, November 9, 2009
  4. NO TAN BUENO PARA • Alto volumen de transacciones •

    Inteligencia de Negocios (BI) • Cosas que requieran SQL Monday, November 9, 2009
  5. 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 Monday, November 9, 2009
  6. BASE DE DATOS • mismo concepto que en MySQL (Repositorio

    de datos) • formado de colecciones • creadas al vuelo al ser instanciadas :D Monday, November 9, 2009
  7. 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) Monday, November 9, 2009
  8. 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. Monday, November 9, 2009
  9. 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’}) Monday, November 9, 2009
  10. 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 (uses map/reduce) Monday, November 9, 2009
  11. CON RUBY • mongo-ruby-driver http://github.com/mongodb/mongo-ruby- driver • active record adapter

    http://github.com/mongodb/ activerecord-mongo-adapter • mongorecord http://github.com/mongodb/mongo- activerecord-ruby Monday, November 9, 2009
  12. 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. Monday, November 9, 2009
  13. CARACTERISTICAS • Typecasting (El tipo puede ser una clase definida

    por ti!) • Callbacks (after_create, before_destroy etc.) • Validaciones (como extension) • Conexión y base de datos por documento. • Creacion y actualizacion simple or multiple. • Delete y Destroy y _all • Find: id, ids, :all, :first, :last • Manejo de asociaciones y sub documentos. Monday, November 9, 2009
  14. 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 Monday, November 9, 2009