{

    "_id" : ObjectId("4dcd3ebc9278000000005158"),

    "timestamp" : ISODate("2011-05-13T14:22:46.777Z"),

    "binary" : BinData(0,""),

    "string" : "abc",

    "number" : 3,

    "subobj" : {"subA": 1, "subB": 2 },

    "array" : [1, 2, 3],

    "dbref" : [_id1, _id2, _id3]

                        padding

}
{   db.coll.find({"string": "abc"});
db.coll.find({ "string" : /^a.*$/i });
    "_id" : ObjectId("4dcd3ebc9278000000005158"),

    "timestamp" : ISODate("2011-05-13T14:22:46.777Z"),
                   db.coll.find({"subobj.subA": 1});
                db.coll.find({"subobj.subB": {$exists: true} });
    "binary" : BinData(0,""),

    "string" : "abc",              db.coll.find({"number": 3});
                               db.coll.find({"number": {$gt: 1}});
    "number" : 3,

    "subobj" : {"subA": 1, "subB": 2 },

    "array" : [1, 2, 3],
                         db.coll.find({"array": {$all:[1, 2]} });
    "dbref" : [_id1, _id2, _id3]
                        db.coll.find({"array": {$in:[2, 4, 6]} });
                             padding

}
{

    "_id" : ObjectId("4dcd3ebc9278000000005158"),

    "timestamp" : ISODate("2011-05-13T14:22:46.777Z"),
          { $set : {"string": "def"} }

    "binary" : BinData(0,""), { $inc : {"number": 1} }

    "string" : "def",
                          { $pull : {"subobj": {"subB": 2 } } }
    "number" : 4,

    "subobj" : {"subA": 1, "subB": 2 },

    "array" : [1, 2, 3, 4, 5, 6],

    "dbref"$addToSet : { "array" : { $each : [ 4 , 5 , 6 ] } } }
         { : [_id1, _id2, _id3]


    "newkey" : "In-place"

}                              { $set : {"newkey": "In-place"} }
Member1     Member2
Primary     Secondary




Member4     Member3
Secondary   Secondary
Member1     Member2
Primary     Secondary




Member4     Member3
Secondary   Secondary
Member1     Member2
Primary     Secondary




Member4     Member3
Secondary   Secondary
Member2
            Secondary




Member4     Member3
Secondary   Secondary
Member1
            Primary

Member6                 Member2
Secondary               Secondary




Member5                 Member3
Secondary               Secondary
            Member4
            Secondary
Member1
            Primary

Member6                 Member2
Secondary               Secondary




Member5                 Member3
Secondary               Secondary
            Member4
            Secondary
Member1
            Primary

Member6                 Member2
Secondary               Secondary




Member5                 Member3
Secondary               Secondary
            Member4
            Secondary
Chunk

         Shard Key   Chunk

 200MB
Cluster
                                   Shard Servers (Data)
   config Servers
 (Shard Configration)   shard1           shard2           shard3
                        [ a, f )          [ k, n)         [ o, t )   Chunk
                        [ f, k )          [ n, o )        [ t, } )




                               mongos Servers (Routers)
http://www.mongodb.org/display/DOCS/Introduction
primary
  Shard
                      primary
      1
 ( mongos
primary     primary                   primary
        )
                         Shard




cinfig      Shard
                                      mongos
                                http://www.mongodb.org/display/DOCS/Introduction
shard1                   shard2

[ a, f )       [ n, o )   [ o, t)
       [ 0, 9)
[ f, k )       [ k, n)



           shard1                   shard2

[ a, f )                  [ o, t)        [ n, o )


[ f, k )       [ k, n)    [ 0, 9)
m = function(){
     this.tags.forEach{
          function(z) {
              emit(z, {count: 1});
          }
     };
};
r = function(key, values) {
     var total=0;
     for (i=0, i<values.length, i++)
          total += values[i].count;
     return { count : total };
}
res=db.things.mapReduce(m,!r);
#                              finalize
MongoDB: Replication,Sharding,MapReduce
MongoDB: Replication,Sharding,MapReduce
MongoDB: Replication,Sharding,MapReduce
MongoDB: Replication,Sharding,MapReduce
MongoDB: Replication,Sharding,MapReduce

MongoDB: Replication,Sharding,MapReduce

  • 9.
    { "_id" : ObjectId("4dcd3ebc9278000000005158"), "timestamp" : ISODate("2011-05-13T14:22:46.777Z"), "binary" : BinData(0,""), "string" : "abc", "number" : 3, "subobj" : {"subA": 1, "subB": 2 }, "array" : [1, 2, 3], "dbref" : [_id1, _id2, _id3] padding }
  • 10.
    { db.coll.find({"string": "abc"}); db.coll.find({ "string" : /^a.*$/i }); "_id" : ObjectId("4dcd3ebc9278000000005158"), "timestamp" : ISODate("2011-05-13T14:22:46.777Z"), db.coll.find({"subobj.subA": 1}); db.coll.find({"subobj.subB": {$exists: true} }); "binary" : BinData(0,""), "string" : "abc", db.coll.find({"number": 3}); db.coll.find({"number": {$gt: 1}}); "number" : 3, "subobj" : {"subA": 1, "subB": 2 }, "array" : [1, 2, 3], db.coll.find({"array": {$all:[1, 2]} }); "dbref" : [_id1, _id2, _id3] db.coll.find({"array": {$in:[2, 4, 6]} }); padding }
  • 11.
    { "_id" : ObjectId("4dcd3ebc9278000000005158"), "timestamp" : ISODate("2011-05-13T14:22:46.777Z"), { $set : {"string": "def"} } "binary" : BinData(0,""), { $inc : {"number": 1} } "string" : "def", { $pull : {"subobj": {"subB": 2 } } } "number" : 4, "subobj" : {"subA": 1, "subB": 2 }, "array" : [1, 2, 3, 4, 5, 6], "dbref"$addToSet : { "array" : { $each : [ 4 , 5 , 6 ] } } } { : [_id1, _id2, _id3] "newkey" : "In-place" } { $set : {"newkey": "In-place"} }
  • 14.
    Member1 Member2 Primary Secondary Member4 Member3 Secondary Secondary
  • 15.
    Member1 Member2 Primary Secondary Member4 Member3 Secondary Secondary
  • 16.
    Member1 Member2 Primary Secondary Member4 Member3 Secondary Secondary
  • 17.
    Member2 Secondary Member4 Member3 Secondary Secondary
  • 18.
    Member1 Primary Member6 Member2 Secondary Secondary Member5 Member3 Secondary Secondary Member4 Secondary
  • 19.
    Member1 Primary Member6 Member2 Secondary Secondary Member5 Member3 Secondary Secondary Member4 Secondary
  • 20.
    Member1 Primary Member6 Member2 Secondary Secondary Member5 Member3 Secondary Secondary Member4 Secondary
  • 24.
    Chunk Shard Key Chunk 200MB
  • 25.
    Cluster Shard Servers (Data) config Servers (Shard Configration) shard1 shard2 shard3 [ a, f ) [ k, n) [ o, t ) Chunk [ f, k ) [ n, o ) [ t, } ) mongos Servers (Routers)
  • 26.
  • 27.
    primary Shard primary 1 ( mongos primary primary primary ) Shard cinfig Shard mongos http://www.mongodb.org/display/DOCS/Introduction
  • 28.
    shard1 shard2 [ a, f ) [ n, o ) [ o, t) [ 0, 9) [ f, k ) [ k, n) shard1 shard2 [ a, f ) [ o, t) [ n, o ) [ f, k ) [ k, n) [ 0, 9)
  • 34.
    m = function(){ this.tags.forEach{ function(z) { emit(z, {count: 1}); } }; }; r = function(key, values) { var total=0; for (i=0, i<values.length, i++) total += values[i].count; return { count : total }; } res=db.things.mapReduce(m,!r); # finalize