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

Mongo Mapper (Pio.la 2010)

Mongo Mapper (Pio.la 2010)

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