@mongodb @mdirolf   http://www.mongodb.org/
How it Works




               http://www.flickr.com/photos/tmh9/677919415/
BSON
       {“hello”: “bson”}



x15 x00 x00 x00 x02 h e
   l l o x00 x05 x00 x00
  x00 b s o n x00 x00


                           http://bsonspec.org
Messages


• TCP/IP Wire Protocol
• Separate messages for
  insert, update, query, get_more, delete, etc.




      http://www.mongodb.org/display/DOCS/Mongo+Wire+Protocol
Anatomy of an insert
    use foo;
    db.test.insert({“hello”: “bson”});



message length      request id        response id op code (insert)
x67x00x00x0     xXXxXXxXX     x00x00x00x xd2x07x00x00
       0                xXX               00
    reserved            collection name            document(s)
 x00x00x00x00        f o o . t e s t x00   BSON({“hello”: “bson”})




             http://www.mongodb.org/display/DOCS/Mongo+Wire+Protocol
Memory mapped
 storage engine
Commands
          db.foo.drop();

              =
db.foo.runCommand({drop: "foo"});
              =
  db.$cmd.findOne({drop: "foo"});

                =
db.$cmd.find({drop: "foo"}).limit(-1);
Query optimizer
        find({x: 10, y: “foo”})


         scan
                         terminate
   index on x

index on y         remember
Geohashing
               (20, 10)

    (0001 0100, 0000 1010)
        0000 0010 0110 0100
(21, 9) 0000 0010 0110 0011


    Problem: bit-flips (127 vs 128)
Replication
                                            Replica sets
        Master - slave

                                   master                  slave
        master

                                   master                  slave
slave         slave        slave
                                   master              master
    slave
                                    slave              master
Replication


• oplog - capped collection
• idempotent ($inc -> $set)
Auto-sharding
                    Shards

           mongod   mongod    mongod
                                         ...
Config      mongod   mongod    mongod
Servers

mongod

mongod

mongod
                    mongos    mongos   ...


                     client

MongoDB: How it Works

  • 1.
    @mongodb @mdirolf http://www.mongodb.org/
  • 2.
    How it Works http://www.flickr.com/photos/tmh9/677919415/
  • 3.
    BSON {“hello”: “bson”} x15 x00 x00 x00 x02 h e l l o x00 x05 x00 x00 x00 b s o n x00 x00 http://bsonspec.org
  • 4.
    Messages • TCP/IP WireProtocol • Separate messages for insert, update, query, get_more, delete, etc. http://www.mongodb.org/display/DOCS/Mongo+Wire+Protocol
  • 5.
    Anatomy of aninsert use foo; db.test.insert({“hello”: “bson”}); message length request id response id op code (insert) x67x00x00x0 xXXxXXxXX x00x00x00x xd2x07x00x00 0 xXX 00 reserved collection name document(s) x00x00x00x00 f o o . t e s t x00 BSON({“hello”: “bson”}) http://www.mongodb.org/display/DOCS/Mongo+Wire+Protocol
  • 6.
  • 7.
    Commands db.foo.drop(); = db.foo.runCommand({drop: "foo"}); = db.$cmd.findOne({drop: "foo"}); = db.$cmd.find({drop: "foo"}).limit(-1);
  • 8.
    Query optimizer find({x: 10, y: “foo”}) scan terminate index on x index on y remember
  • 9.
    Geohashing (20, 10) (0001 0100, 0000 1010) 0000 0010 0110 0100 (21, 9) 0000 0010 0110 0011 Problem: bit-flips (127 vs 128)
  • 10.
    Replication Replica sets Master - slave master slave master master slave slave slave slave master master slave slave master
  • 11.
    Replication • oplog -capped collection • idempotent ($inc -> $set)
  • 12.
    Auto-sharding Shards mongod mongod mongod ... Config mongod mongod mongod Servers mongod mongod mongod mongos mongos ... client