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

Entendiendo y adoptando MongoDB 2.4

Entendiendo y adoptando MongoDB 2.4

Esta presentación tuvo lugar en Wayra por motivo de la reunión de Febrero del Peruvian Linux User Group.

Jorge Puente-Sarrín

February 16, 2013
Tweet

More Decks by Jorge Puente-Sarrín

Other Decks in Programming

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.[coleccion].getIndexes() db.help() db.addUser(usuario, contraseña) db.copyDatabase(existente, nueva) Entre muchos otros...
  5. 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();
  6. Otras colecciones Con tope: Tamaño máximo definido en Bytes. db.createCollection("historial",

    { capped:true, size: 1024}); db.runCommand({ create:"historial", capped:true, size: 1024}); Tamaño máximo definido en número de documentos. 232 db.createCollection("historial", { capped:true, size: 1024, max: 10 }); TTL: Con tiempo de vida definido en segundos. db.historial.ensureIndex({ "fecha": 1 }, { expireAfterSeconds: 3600 });
  7. 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" }
  8. 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 }
  9. 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
  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. Aggregation Framework Útil para obtener valores agregados sin necesidad de

    MapReduce. $project $match $limit $skip $unwind $group $sort Ejemplos: db.posts.aggregate([{$group: {_id: "$author", suma: {$sum: 1}}}]) db.posts.aggregate([{$group: {_id: "$author", suma: {$sum: 1}}}, {$sort: {suma: -1}}])
  12. Índices de texto Funcionalidad experimental para FullTextSearch. mongod --setParameter textSearchEnabled=true

    db.adminCommand({ setParameter: 1, textSearchEnabled: true }) Uso: db.posts.ensureIndex({ "contenido": "text" }) db.posts.ensureIndex({ "contenido": "text", "etiquetas": "text" }, { "name": "TextIndex", "weights": { "contenido": 10, "etiquetas": 2 } }) db.posts.runCommand( "text", { search: "mongodb" }) db.posts.runCommand( "text", { search: "mongodb nosql" }) db.posts.runCommand( "text", { search: "\"base de datos\"" })
  13. 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
  14. 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
  15. 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:
  16. Enlaces de interés Documentación: http://docs.mongodb.org/manual http://es.docs.mongodb.org/manual Bug tracking: http://jira.mongodb.org MongoDB

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