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

Entendiendo y adoptando MongoDB

Entendiendo y adoptando MongoDB

Esta presentación tuvo lugar en PUCP por motivo del INFOSOFT 2012.

Jorge Puente-Sarrín

August 23, 2012
Tweet

More Decks by Jorge Puente-Sarrín

Other Decks in Technology

Transcript

  1. NoSQL No relacional, distribuido, horizontalmente escalable y OpenSource. Tipos: •

    Llaves-valor y tuplas • Grafos • Orientado a columnas • Orientado a objetos • Orientado a documentos • Multimodelos
  2. MongoDB De "humongous" Orientado a documentos - BSON Escrito en

    C++ Multiplataforma RESTful API Escalable Fire-and-forget
  3. Analogía con los RDBMS RDBMS MongoDB Tabla Colección Fila Documento

    Índice Índice Join Documentos embebidos y vinculados
  4. Shell y comandos básicos db.listCommands() //Muestra todos los comandos db.runCommand()

    /*Ejecuta el comando ingresado como parámetro Por ejemplo: db.runCommand({listDatabases:1 })*/ db.getLastError() db.stats() db.serverStatus() db.repairDatabase() db.getCollection('[collection]') db.getCollectionNames() db.[collection].getIndexes() db.help() db.addUser(usuario, contraseña) db.copyDatabase(existente, nueva) Entre muchos otros...
  5. Colecciones db.createCollection("usuarios"); Con tope: Tamaño máximo definido en Bytes. db.createCollection("historial",

    {capped:true, size: 5000000}); db.runCommand({create:"historial", capped:true, size: 5000000}); TTL: Con tiempo de vida definido en segundos. db.log.events.ensureIndex({"status": 1}, {expireAfterSeconds: 3600});
  6. Diseño de modelos Docs. vinculados Colección de posts: { "_id":

    ObjectId(" 4f9c31753d32831252000000"), "text": "Mi primer post", "date": ISODate("2012-04-28T13:05:41.137Z"), "likes": 5 } Colección de comentarios: { "_id": ObjectId("4f9c31753d32781252000000"), "postid": ObjectId(" 4f9c31753d32831252000000"), "date": ISODate("2012-04-28T13:49:33.512Z"), "text": "Cool" }, { "_id": ObjectId("4f9c31753d32565465000000"), "postid": ObjectId(" 4f9c31753d32831252000000"), "date": ISODate("2012-04-28T13:49:38.719Z"), "text": "Genial" }
  7. Diseño de modelos Docs. embebidos Colección de posts: { "_id":

    ObjectId("4f9c31753d32831252000000"), "text": "Mi primer post" "comments": [ { "date": ISODate("2012-04-28T13:49:33.512Z"), "text": "Cool" }, { "date": ISODate("2012-04-28T13:49:38.719Z"), "text": "Genial" } ], "date": ISODate("2012-04-28T13:05:41.137Z"), "likes": 5 }
  8. Diseño de modelos Schema design is different in MongoDB Basic

    data design principals stay the same Focus on how the apps manipulates data Rapidly evolve schema to meet your requirements Enjoy your new freedom, use it wisely :-) 10gen
  9. Operaciones básicas Inserción: db.empleado.insert({"nombre": "Mirko Manrique", "email": "mirko.manrique@gmail. com", "posicion":

    "Docente universitario"} Consulta: db.empleado.find(); db.empleado.find({ "email": /^m/ }); Actualización: db.empleado.update({ "email": "[email protected]" }, { “$set”: { "posicion": "Analista de calidad" } }); db.empleado.update({ "email": "[email protected]" }, { “$set”: { "posicion": "Analista de calidad" } }, false); //upsert parameter db.empleado.update({ "email": "[email protected]" }, { “$set”: { "posicion": "Analista de calidad" } }, false, true); //multi parameter Eliminación: db.empleado.remove({"email":"[email protected]"}); db.empleado.remove();
  10. Índices Orden ascendente: db.empleado.ensureIndex({email:1}); Orden ascendente y descendente: db.empleado.ensureIndex({email:-1},{unique:true}); Índice

    disperso, se ignora el documentos al poseer el campo: db.empleado.ensureIndex({email:1},{unique:true, sparse:true}); Índice compuesto: db.empleado.ensureIndex({firstname: 1, lastname: 1}, {unique: true}); Índice geoespacial: db.places.ensureIndex( { loc : "2d" } ) Consultar los índices creados: db.empleado.getIndexes(); db.system.indexes.find();
  11. RESTful API ~# mongod --dbpath /var/lib/mongodb/ --rest ~# mongod --fork

    --logpath /var/log/mongodb.log --logappend --rest http://localhost:28017/test/empleado/ http://localhost:28017/test/empleado/?limit=100 http://localhost:28017/test/empleado/?limit=100&skip=50 http://localhost:28017/test/empleado/?filter_posicion=Programador http://localhost:28017/admin/$cmd/?filter_listDatabases=1
  12. GridFS GridFS myFS = new GridFS(myDatabase); myFS.storeFile(new File("/tmp/largething.mpg")); GridFS myContracts

    = new GridFS(myDatabase, "contracts"); myFS.retrieveFile("smithco", new File("/tmp/smithco_20090105.pdf")); { "_id" : <unspecified>, "length" : data_number, "chunkSize" : data_number, "uploadDate" : data_date, "md5" : data_string } { "filename" : data_string, "contentType" : data_string, "aliases" : data_array of data_string, "metadata" : data_object } http://www.mongodb.org/display/DOCS/GridFS
  13. Drivers • C • C# • C++ • Erlang •

    Haskell • Javascript • Java Comunidad: • ActionScript 3 • Dart • Delphi • Go • Lisp • Lua • Objective-C • R • Scala • ... muchos otros. • Node.js • Perl • PHP • Python • Ruby • Scala Oficiales:
  14. Enlaces de interés Documentación: http://docs.mongodb.org/manual Bug tracking: http://jira.mongodb.org MongoDB User

    Group - Lima: https://groups.google.com/group/mongodb-lima Lista de interés: https://groups.google.com/group/mongodb-user