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

MongoDB Llegó para quedarse

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

MongoDB Llegó para quedarse

Introducción a MongoDB durante el Festival Internacional de Instalación de Software Libre FLISOL 2011 en la ciudad de Barranquilla, Colombia.
Mi primera charla pública.

Avatar for mongrelion

mongrelion

April 23, 2011
Tweet

More Decks by mongrelion

Other Decks in Programming

Transcript

  1. $ cat /etc/passwd | cat mongrelion mongrelion:x:1000:100:Carlos León,,,:/home/mongrelion:/bin/zsh $ uptime

    7681 $ cat ~/info Rails Rockstar at day Superhero at night twitter: @mongrelion github: mongrelion facebook: fb.com/mongrelion $ echo $EDITOR /usr/bin/vim
  2.  Not Only SQL  No relacional (Schema free) 

    Información distribuida  Open Source (Código Abierto)  Escalamiento horizontal  Soporte fácil de replicación de datos  API Simple  Open Source
  3.  Wide Column: Hadoop/HBase, Cassandra, Hypertable  Key/Value: AzureTable Storage,

    Membase, Redis, Riak  Documents: CouchDB, MongoDB, Terrastore  Graph: Neo4J, InfiniteGraph
  4.  Orientado a Documentos  Alto rendimiento  Alta disponibilidad

     Fácil escalabilidad  Amplio lenguaje de consulta  OpenSource: 153 colaboradores
  5.  Cada servidor de MongoDB soporta múltiples bases de datos.

    Cada base de datos es independiente y la información de cada base de datos es almacenada de forma separada, por cuestiones de seguridad y facilidad en la administración.
  6.  Byte  Int32  Int64  Double  Float

     UTF-8 String  ObjectId  Null  Regular Expression  JavaScriptCode  Binary  UUID  MD5
  7.  Almacenamiento de grandes archivos como audio, video, backups, etc.

     Ideal para grandes archivos y en abundancia.  Tiene que ser usado cuando el archivo supera los 16MB.  No debe ser usado para pequeños archivos estáticos.
  8.  Index básico: db.users.ensureIndex( { email : 1 } )

     _id: Index por defecto.  Aplica para cualquier tipo de campo.  Arrays: Cuando se aplica un index a un campo de tipo Array, MongoDB crea un índice para cada elemento del array.  Index compuesto: db.users.ensureIndex( { email : 1, name : -1 } )
  9.  Unique: db.users.ensureIndex( { firstname : 1, lastname : 1

    }, { unique:true } )  Datos duplicados: db.users.ensureIndex( { firstname : 1 }, { unique : true, dropDups : true } )  Borrar Index: db.users.dropIndexes() db.users.dropIndexes( { firstname : 1 } )
  10.  Precisión de proximidad de aproximadamente 1ft  Crear el

    index: db.places.ensureIndex( { loc : “2d”, bits : 26 } )  Permite establecer el máximo y mínimo valor para el index: db.places.ensureIndex( { loc : “2d”, min : -500, max : 500 } )
  11.  Consultando: db.places.find( { loc : [ 50, 50 ]

    } ) db.places.find( { loc : { $near : [ 50, 50 ], $maxDistance : 5 } } )
  12.  chuck = { nick : „chuck‟, email : „[email protected]‟,

    age : 71, created_at : new Date() } mongrelion = { nick : „mongrelion‟, age : 21, balance : 5000 } db.users.insert( chuck ) db.users.insert( mongrelion ) db.users.insert( { nick : „andphe‟} )
  13.  Básica db.users.find({}) db.users.find( { nick : „mongrelion‟ }, {

    email : 1 } ) db.users.find( { age : { $gt : 18 } }, { nick : 1 } ) db.users.find( {}, { _id : 0 } )  Ordenamiento db.users.find().sort( { age : 1 } ) db.users.find().sort( { age : -1 } )  Skip y Limit db.users.find({}).skip( 20 ).limit( 10 )
  14.  <, <=, >, >= ”>” db.users.find({ age : {

    $gt : 18 } }) “<” db.users.find({ age : { $lt : 18 } }) “>=” db.users.find({ age : { $gte : 18 } }) “<=” db.users.find({ age : { $lte : 18 } })  $or Simple db.users.find({ $or : [ { name : „Carlos‟}, { age : 18 } ] }) Con otro campo db.users.find({ name : „Carlos‟, $or : [ { age : 18, balance : 0 } ] })
  15.  db.things.find( { a : { $all : [ 2,

    3 ] } } ) db.things.find( { a : { $in : [ 2, 4, 6 ] } } ) db.things.find( { a : { $nin : [ 1, 3, 5 ] } } ) db.things.find( { a : { $size : 2 } } ) db.things.find( { tags : „ruby‟ } ) db.posts.find( { “author.name” : “John Doe” } )
  16.  post = { title : „MongoDB llegó para quedarse‟,

    _keywords : [ „MongoDB‟, „llegó‟, „para‟, „quedarse‟ ] } db.posts.insert( post ) db.posts.ensureIndex( { _keywords : 1 } )
  17.  Count db.users.count() db.users.count( { vip : true } )

     Distinct db.users.distinct( “age” )
  18.  db.collection.remove( criteria ) db.users.remove() db.users.remove( { vip : false

    } )  Concurrencia y eliminación db.users.remove( { vip : false, $atomic : true } )
  19.  update() db.collection.update( criteria, objNew, upsert, multi ) $inc: db.posts.update(

    { title : „foo‟ }, { $inc : { views : 1 } } ) $set: db.posts.update( { title: „foo‟ }, { $set: { title: „bar‟} } ) $unset: db.posts.update( {}, { $unset : { count : 1 } } ) $push: db.posts.update( {}, { $push : { tags : „rails‟ } } ) $pushAll: db.posts.update({}, { $push : { tags : [ „rails‟, „sql‟ ] } }) $addToSet: db.posts.update({}, { $addToSet : { tags : „rails‟ } }) $pop: db.posts.update({}, { $pop : { tags : 1 } }) db.posts.update({}, { $pop : { tags : -1 } })
  20. $pull: db.posts.update( {}, { $pull : { viewers : „chuck‟

    } } ) $pullAll: db.posts.update({}, { $pullAll : { tags : [ „rails‟, „sql‟ ] } }) $rename: db.posts.update( {}, { $rename : { mail : email } } )
  21.  Operaciones Write-Ahead para facilitar la fácil recuperación de caídas

    del servidor y durabilidad en el motor de almacenamiento.
  22.  Query Profiler para analizar el rendimiento de las operaciones

    de la base de datos.  HTTP Interface  Mongostat  Mongosniff
  23.  C  C#  C++  Erlang  Haskell

     Java  Javascript  Perl  PHP  Ruby  Scala  REST  AS3  Clojure  ColdFusion  D  Delphi  Factor  Fantom  F#  Go  Groovy  Lisp  Lua  Node.js  Objective-C  PowerShell  Python  R  Racket  Smalltalk