¹ØÓÚÕâ¸öËٲ鿨
MongoDBÊÇÒ»¸öÎĵµÐÍÊý¾Ý¿â£¬Ëü¿ÉÒÔ·½±ãµÄÓ¦ÓÃÓÚ´ó¶àÊýÓïÑÔ¡£Õâ¸öСÇåµ¥ÁгöÁËMongoDB¾³£Ê¹ÓúÍÈÝÒ×Íü¼ÇµÄһЩ²Ù×÷£¬ÃüÁîºÍ¼¼Êõ¡£
ÅäÖÃÑ¡Ïî
°²×°Ñ¡Ïî
Æô¶¯MongoDBµÄÑ¡Ïî¿ÉÒÔͨ¹ýÃüÁîÐлòÕßÅäÖÃÎļþÉèÖã¬Á½ÕßµÄÓï·¨ÉÔ΢Óе㲻ͬ£¬ÕâÀïÓÐÒ»¸öÈýÖÖÑ¡ÏîµÄÉèÖÃÀý×Ó:

ÔÚmongodÏÂÔËÐÐ--help¿ÉÒÔÁгöËùÓеIJÙ×÷Ñ¡Ïµ«ÊÇÕâÀïÎÒÃÇÁгöÁËһЩ×î³£ÓõÄ:

Èç¹ûÏ밲ȫµÄÆô¶¯mongod£¬¾ÍҪʹÓÃnohttpinterfaceºÍbind_ip²Ù×÷Ñ¡Ïȷ¶¨ÍâÍø²»ÄÜÖ±½Ó·ÃÎÊ¡£ÓÈÆäÈ·±£ÄãûÓÐÆäÓàµÄÑ¡ÏîÆô¶¯£¬MongoDBÐèÒªÒÔÏÂÍøÂç»·¾³¿ÉÒÔ·ÃÎÊ:
1.µ¥¸ö·þÎñÆ÷ - ¿Í»§¶Ë³ÌÐò¿ÉÒÔ»ñÈ¡·ÃÎÊÁ¬½Ó
2.¸±±¾¼¯ - ÈκγÉÔ±¼¯Äܹ»·ÃÎÊ£¬°üÀ¨×Ô¼º£»¿Í»§¶ËÄܹ»·ÃÎÊÈκÎÒ»¸ö³ÉÔ±¼¯£¬²¢ÇÒ¿É·ÃÎʵijÉÔ±¼¯¶¼Äܹ»³ÉΪÖ÷½Úµã£¨»îÔ¾½Úµã£©.
3.·ÖƬ- mongos½ø³Ì±ØÐëÄܹ»Á¬½Óµ½ÅäÖõķþÎñÆ÷ºÍ·ÖƬ£¬·ÖƬ±ØÐëÄܹ»±Ë´ËÁ¬½Ó¡£¿Í»§¶Ë³ÌÐò±ØÐëÄܹ»Á¬½Óµ½mongos½ø³Ì¡£ÅäÖ÷þÎñÆ÷û±ØÒª±Ë´ËÌṩ·ÃÎÊÁ¬½ÓµÄÖ§³Ö¡£
ËùÓеÄÁ¬½Ó¶¼ÊÇͨ¹ýtcp½¨Á¢µÄ.
²é¿´ÅäÖÃ
Èç¹ûÄã6¸öÔÂǰÆô¶¯mongodʱ×öÁËÒ»¶ÑÅäÖã¬ÄÇôÏÖÔÚÄãÈçºÎÖªµÀ×öÁËʲôÅäÖÃÄØ£¿ÕâÀïÌṩÁËÒ»¸öshellСÖúÊÖ:
> db.serverCmdLineOpts() { "argv" : [ "./mongod", "--port", "30000" ], "parsed" : { }, "ok" : 1 } |
½âÎöºóµÄ×Ö¶ÎÊÇ´ÓÅäÖÃÎļþ¶ÁÈ¡µÄһЩ²ÎÊýÁбí.
ʹÓÃshell
Shell°ïÖú
µ±ÄãÍü¼ÇÒ»¸öÃüÁîʱ£¬mongodbÌṩÁËÐí¶à¹¦ÄܰïÖúÄã:
> // basic help > help db.help() help on db methods db.mycoll.help() help on collection methods sh.help() sharding helpers rs.help() replica set helpers help admin administrative help help connect connecting to a db help ... |
×¢Òâ¶ÔÓÚÊý¾Ý¿â£¬¼¯ºÏ£¬¸±±¾¼¯£¬·ÖƬ£¬¹ÜÀíÔ±µÈÌṩÁ˵¥¶ÀÁ˰ïÖú¹¦ÄÜ¡£ÕâÀïûÓÐÒ»Ò»Áгö£¬ÏñÓαêµÄ°ïÖú¹¦ÄÜÈçÏÂ:
> // list common cursor functions > db.foo.find().help() |
Äã¿ÉÒÔʹÓÃÕâ¸ö¹¦ÄܺÍСÖúÊÖ×÷Ϊһ¸öÄÚÖõı¸ÍüÇåµ¥¡£
²é¿´·½·¨µÄ¶¨Òå
Èç¹ûÄã²»ÖªµÀÒ»¸ö·½·¨ÊǸÉʲôÓõģ¬Äã¿ÉÒÔÔÚshellÖÐͨ¹ýÈ¥³ýÀ¨ºÅµÄ·½Ê½ÔËÐÐËü£¬²é¿´ËüµÄÔ´Âë:
> // run the function > db.serverCmdLineOpts() { "argv" : [ "./mongod" ], "parsed" : { }, "ok" : 1 } > // see its source > db.serverCmdLineOpts function () { return this._adminCommand("getCmdLineOpts"); } |
Õâ¿ÉÒÔ°ïÖúÎÒÃÇ»ñϤÕâ¸ö·½·¨ÐèҪʲô²ÎÊýºÍÅ׳öʲô´íÎó£¬ÒÔ¼°ÈçºÎÔÚÆäËûÓïÑÔÖÐʹÓá£
ʹÓñ༹¦ÄÜ
shellÃüÁîÏÞÖÆ¶àÐеÄÖ§³Ö£¬Òò´ËÔÚÀïÃæ±àд³ÌÐòºÜ·Ñ¾¢£¬shell±à¼Ð¡ÖúÊÖÈÃËü¸ü¼Ó¼òµ¥£¬´ò¿ªÒ»¸öÎı¾±à¼Æ÷£¬±à¼Ò»¸ö±äÁ¿£¬ÀýÈç:
> x = function() { /* some function we're going to fill in */ } > edit x |
ÔÚ±à¼Æ÷ÐÞ¸ÄÒ»¸ö±äÁ¿±£´æÍ˳ö¡£Õâ¸ö±äÁ¿¾ÍÔÚshellÀïÃæ±»É趨ºÃÁË¡£
²»¹ÜÊÇ±à¼Æ÷µÄ»·¾³±äÁ¿»òÕßMongoDB shellµÄ±äÁ¿±à¼»·¾³£¬¶¼±ØÐëÉèÖÃʹÓÃeditģʽ¡£Äã¿ÉÒÔÔÚMongoDB
shellÖÐͨ¹ýÈçÏÂÃüÁîÅäÖÃ:
> EDITOR="/usr/bin/emacs" |
±à¼Ä£Ê½ÔÚJavaScript½Å±¾ÏÂÊÇÎÞ·¨Ê¹Óõģ¬Ö»ÄÜÔÚ½»»¥µÄshellÖÐʹÓá£
.mongorc.js
Èç¹ûÄãµÄÖ÷Ŀ¼ÏÂÓиö.mongorc.jsÎļþ£¬ÄÇôµ±ÄãÆô¶¯shellʱËû¾Í»á×Ô¶¯ÔËÐС£Ê¹ÓÃËü¿ÉÒÔ³õʼ»¯ÈκÎÄã¾³£Ê¹ÓõÄhelper·½·¨ºÍÄã²»ÏëÒâÍâ²Ù×÷µÄɾ³ý·½·¨.
±ÈÈ磬Äã²»ÏëʹÓÃĬÈϵÄdropDatabase()·½·¨ÁË£¬Äã¿ÉÒÔÔÚ.mongorc.jsÎļþÖÐÌí¼ÓÏÂÃæµÄÃüÁî:
DB.prototype.dropDatabase = function() { print("No dropping DBs!"); } db.dropDatabase = DB.prototype.dropDatabase; |
ÉÏÃæµÄÀý×ӸıäÁËdropDatabase() helper·½·¨£¬Ê¹ËûÖ»´òÓ¡³öÒ»ÐÐÐÅÏ¢£¬¶øÃ»ÓÐÕæÕýµÄɾ³ýÊý¾Ý¿â.
×¢ÒâÕâ¸ö¼¼Çɲ»ÊÇÒ»¸ö°²È«ÊֶΣ¬¹ÌÖ´µÄÓû§ÈÔÈ»¿ÉÒÔÔÚ²»Ê¹ÓÃhelperǰÌáÏÂɾ³ýÊý¾Ý¿â¡£È»¶ø£¬ÒƳýΣÏÕµÄadminȨÏÞÃüÁîÒ²¿ÉÒÔ°ïÖú×èÖ¹¡°´óµÌµÄ±¼À£¡±.
¼¸¸ö½¨ÒéÔÚ.mongorc.jsÖÐʹÓÃhelperÃüÁîÊ±ÒÆ³ýµÄ:
1.DB.prototype.shutdownServer
2.DBCollection.prototype.drop
3.DBCollection.prototype.ensureIndex
4.DBCollection.prototype.reIndex
5.DBCollection.prototype.dropIndexes
¸Ä±äÌáʾ
shellµÄÌáʾ¿ÉÒÔͨ¹ýÒ»¸ö·½·¨ÉèÖÃÌáʾ±äÁ¿µÄ·½Ê½À´¸Ä±ä:
prompt = function() { try { db.getLastError(); } catch (e) { print(e); } return (new Date())+"$ "; } |
Èç¹ûÄãÉèÖÃÁËÌáʾ£¬Ã¿´ÎÖ´ÐÐʱ¶¼»áÖØÐ·µ»ØÌáʾÐÅÏ¢£¨ÉÏÃæµÄÀý×Ó½«·µ»Ø×îºóÖ´ÐеÄÐÅÏ¢£©¡£
³¢ÊÔÔÚÄãµÄÌáʾÀïÃæµ÷ÓÃdb.getLastError()·½·¨£¬Õ⽫°üº¬Ä¬ÈϵÄÌáʾºÍ·þÎñÆ÷ÖØÐÂÁ¬½ÓÒÔ¼°·µ»ØµÄ´íÎóÐÅÏ¢.
ͬʱ£¬°ÑÈκοÉÄܳöÏÖÒì³£µÄÓÃtry/catch°ü¹üÆðÀ´£¬ÄÇÊǷdz£ÄÕÈ˵쬵±ÄãµÄÌáʾ±ä³ÉÁËÒ»¸öÒì³£ÐÅÏ¢!
²Ù×÷Õï¶Ï
²é¿´ºÍÖÕÖ¹²Ù×÷
Äã¿ÉÒÔͨ¹ýcurrentOp²é¿´µ±Ç°²Ù×÷״̬:
> db.currentOp() { "inprog" : [ { "opid" : 123, "active" : false, "locktype" : "write", "waitingForLock" : false, "secs_running" : 200, "op" : "query", "ns" : "foo.bar", "query" : { } ... }, ... ] } |
ʹÓÃÉÏÃæµÄopid×ֶΣ¬Äã¿ÉÒÔÖÕÖ¹Õâ¸ö²Ù×÷:
²»ÊÇËùÓеIJÙ×÷¶¼Äܱ»ÖÕÖ¹»òÕßÁ¢¿ÌÖÕÖ¹£¬Í¨³££¬²Ù×÷²»»á±»ÖÕÖ¹£¬Ö±µ½ËûÃÇ»ñÈ¡µ½Ëø.
active×ֶαíÃ÷²Ù×÷µ±Ç°ÊÇ·ñÔÚÔËÐУ¬Èç¹ûÒ»¸ö²Ù×÷ûÓÐÔËÐУ¬Í¨³£ÊÇҪôûÆô¶¯£¬ÒªÃ´ÔڵȴýËø£¬ÒªÃ´Ö´ÐÐÁËÆäËû²Ù×÷¡£Í¨¹ýnumYieldsÄã¿ÉÒԲ鿴²Ù×÷Ö´ÐеÄʱ¼ä.
Ë÷ÒýʹÓÃ
ʹÓÃexplain()À´²é¿´µ±Ç°²éѯ²Ù×÷ʹÓÃÁËÄĸöË÷Òý.
> db.foo.find(criteria).explain() { "cursor" : "BasicCursor", "isMultiKey" : false, "n" : 2, "nscannedObjects" : 2, "nscanned" : 2, "nscannedObjectsAllPlans" : 2, "nscannedAllPlans" : 2, "scanAndOrder" : false, "indexOnly" : false, "nYields" : 0, "nChunkSkips" : 0, "millis" : 0, "indexBounds" : {
},
"server" : "ubuntu:27017"
} |
explain()Êä³öÖÐÓм¸¸öÖØÒªµÄ×Ö¶Î:
1.n: ·µ»Ø¼Ç¼ÐÐÊý.
2.nscanned: ʹÓÃË÷Òý¶ÁÈ¡µÄ¼Ç¼ÊýÁ¿.
3.nscannedObjects: ±»É¨ÃèµÄÎĵµÊýÁ¿.
4.indexOnly: Èç¹û²éѯûÓÐʹÓü¯ºÏ±¾Éí.
5.nYields: ²éѯ¶ÁÈ¡ËøµÄÊÍ·Åʱ¼äºÍµÈ´ýÏ´βÙ×÷ʱ¼ä.
6.indexBounds: µ±Ê¹ÓÃË÷Òýʱ£¬ÏÔʾµÄË÷ÒýɨÃ跶Χ.
ÓαêÀàÐÍ
Ò»¸ö±éÀúÓα꣨BasicCursor£©Òâζ×ÅûÓÐʹÓÃË÷Òý£»Ò»¸öBÊ÷Óαê(BtreeCursor)Òâζ×ÅʹÓÃÁËÒ»¸ö³£ÓõÄË÷Òý£»Æ½ÐÐÓα걻ÓÃÓÚ·ÖÆ¬£»¶þά¿Õ¼äË÷Òý£¨geospatial
indexes£©Ê¹ÓÃËûÃÇ×Ô¼ºÌØÊâµÄÓαꡣ
Ò»µ©Ò»¸öÊý×é±»Ë÷Òý£¬ÄÇôË÷ÒýÉϾͻáÉ趨һ¸ö¡°multikey¡±±ê¼Ç£¬Õâ¾ÍÊǶÔÉÏÃæisMultiKey×ֶεĽâÊÍ¡£Õâ¸ö±ê¼ÇÔÚË÷ÒýÉúÃüÖÜÆÚÄÚÒ»Ö±±£´æ£¬³ý·ÇÄãÈ¥µôÁËÊý×éµÄË÷Òý¡£
Èç¹ûÓ¦ÓÃË÷Òý×ö²éѯµÄ»°£¬explainÊä³öµÄÐÅÏ¢Àォ°üº¬Ë÷Òý·¶Î§×ֶΣ¬ËüÃèÊöÁËË÷Òý±éÀúµ½µÄÄDz¿·Ö¼Ç¼¡£±ÈÈ磬Èç¹ûÄãÖªµÀÄãµÄÎĵµÀïÃæÓиöage×ֶΣ¬²¢ÇÒÄêÁäÔÚ0-120Ö®¼ä¾ùÔÈ·Ö²¼£¬Ë÷Òý·¶Î§´Ó3-5£¬Äã¿ÉÒÔ¿´µ½Ë÷ÒýÖ»ÐèɨÃèһС²¿·ÖÊý¾Ý¾ÍÄÜÂú×ãÄãµÄ²éѯÐèÒª¡£
°µÊ¾£¨Hinting£©
ʹÓÃhint()ÄÜÈòéÑ¯Ç¿ÖÆÊ¹ÓÃÒ»¸öÌØÊâµÄË÷Òý:
> db.foo.find().hint({x:1}) |
Õâ¸ö°µÊ¾±ØÐëºÍÄãÏëʹÓõĵÄË÷ÒýkeyÏàÆ¥Å䣬Äã¿ÉÒÔͨ¹ýÔËÐÐÏÂÃæÃüÁî²é¿´¿ÉÓõÄË÷Òý:
Ò»°ãÀ´Ëµ£¬Äã¿ÉÒÔ´´½¨Ò»¸öË÷ÒýÓÃÓÚ²éѯ¡£Èç¹ûÄãÓÐÒ»¸ö²éѯºÍÅÅÐò£¬½¨Ë÷Òý×îºÏÊʵÄ×Ö¶ÎÈ¡¾öÓÚÄãµÄ²éѯ¡£Èç¹û²éѯһ¸öµ¥Ò»µÄÖµ£¨È磺{x:y}£©£¬Ë÷ÒýÓ¦¸ÃÕâÑù½¨{queryField:
1, sortField: 1}¡£Èç¹û²éѯµÄÊÇÒ»¸ö·¶Î§»òÕß¼¯ºÏ£¬²ÉÓÃÕâÑùµÄ·½Ê½½¨Ë÷Òý¿ÉÄܸü¸ßЧ£º{sortField:
1, queryField: 1}¡£Èç¹ûÄãÊÇÓÃÕâ¸öË÷Òý£¬MongoDB±ØÐëɨÃèËùÓеÄË÷Òý²éÕÒ½á¹û¼¯£¬µ«ÊÇËü¿ÉÒÔÔÚ²»Ê¹ÓÃÄÚ´æÅÅÐòµÄÇé¿öÏ·µ»ØÓÐÐòµÄ½á¹û¡£
ϵͳÐÔÄÜ·ÖÎö
Äã¿ÉÒÔ´ò¿ªÏµÍ³·ÖÎö£¬¿´¿´Êý¾Ý¿âµÄ²Ù×÷ÐÅÏ¢¡£ËäÈ»ÐÔÄÜÉÏ»áÓÐËðʧ£¬µ«¿ÉÒÔ°ïÖúÎÒÃDZÜÃâÂý²éѯ¡£
> db.setProfilingLevel(2) // profile all operations > db.setProfilingLevel(1) // profile operations that take longer than 100ms > db.setProfilingLevel(1, 500) // profile operations that take longer than 500ms > db.setProfilingLevel(0) // turn off profiling > db.getProfilingLevel(1) // see current profiling setting |
ÐÔÄÜÌõÄ¿±£´æÔÚ¿ªÆôÐÔÄÜ·ÖÎöµÄÊý¾Ý¿âÖÐÃûΪ system.profile µÄ¼¯ºÏ¡£¿ÉÒÔÕë¶Ôµ¥¸öÊý¾Ý¿â¿ªÆôºÍ¹Ø±ÕÐÔÄÜ·ÖÎö¡£
¸±±¾¼¯
ÒªÕÒµ½Ñӳٵĸ´ÖÆ£¬Á¬½Óµ½Ò»¸ö±¸½Úµã²¢ÔËÐÐÕâ¸öº¯Êý£º
> db.printReplicationStatus() configured oplog size: 2000MB log length start to end: 23091secs (6.4hrs) oplog first event time: Fri Aug 10 2012 04:33:03 GMT+0200 (CEST) oplog last event time: Mon Aug 20 2012 10:56:51 GMT+0200 (CEST) now: Mon Aug 20 2012 10:56:51 GMT+0200 (CEST) |
Òª²é¿´Ä³¸ö³ÉÔ±¶Ô¼¯ºÏµÄÐÔÄÜ×´¿ö£¬Á¬½Óµ½Õâ¸ö³ÉÔ±£¬²¢ÔËÐУº
´ËÃüÁî»á¸æËßÄãÆäËû³ÉÔ±Ö®ÓÚËüµÄ״̬ºÍµØÎ»¡£
ÔÚÒ»¸ö±¸½ÚµãÉÏÔËÐÐ rs.status() ½«¸æËßÄ㱸½ÚµãÊÇ´Ó syncingTo×Ö¶ÎÖÐÄĸöÖÐͬ²½Êý¾ÝµÄ¡£
·ÖƬ
Òª²é¿´Èº¼¯µÄÔªÊý¾Ý£¨·ÖƬ£¬Êý¾Ý¿â£¬Îļþ£¬Êý¾ÝµÈ£©£¬ÇëÔËÐÐÏÂÃæµÄº¯Êý£º
> db.printShardingStatus() > db.printShardingStatus(true) // show all chunks |
ÄúÒ²¿ÉÒÔÁ¬½Óµ½ Mongos £¬Ê¹Óá°use config¡±²é¿´·ÖƬ£¬Êý¾Ý¿â£¬¼¯ºÏ£¬»ò¿éµÄÊý¾Ý£¬È»ºó²éѯÏà¹ØµÄ¼¯ºÏ¡£
> use config switched to db config > show collections chunks databases lockpings locks mongos settings shards system.indexes version |
ÓÀÔ¶¶¼Á¬½Óµ½ mongos »ñÈ¡·ÖƬÐÅÏ¢¡£ÓÀÔ¶²»ÒªÖ±½ÓÁ¬½ÓÅäÖ÷þÎñÆ÷¡£ÓÀÔ¶²»ÒªÖ±½ÓдÈëÅäÖ÷þÎñÆ÷¡£¡£ÓÀԶʹÓÃ·ÖÆ¬ÃüÁîºÍ°ïÖú¡£
ÔÚά»¤Ö®ºó£¬ÓÐʱʵ¼ÊÉÏûÓÐʵʩά»¤µÄ mongos ½ø³ÌµÄÅäÖð汾ºÅ½«²»»á¸üС£ÎÞÂÛÊǻص¯·þÎñ»¹ÊÇÔËÐÐ
flushRouterConfig ÃüÁî¶¼ÄÜ¿ìËÙ½â¾öÎÊÌâ¡£
> use admin > db.runCommand({flushRouterConfig:1}) |
ͨ³£Õâ¸öÎÊÌ⽫±íÏÖΪ setShardVersion ʧ°ÜµÄ´íÎó¡£
ÎÞÐèµ£ÐÄÈÕÖ¾ÖÐµÄ setShardVersion ´íÎ󣬵«ËüÃDz»Ó¦¸Ã³öÏÖÔÚÄúµÄÓ¦ÓóÌÐòÖУ¨³ý·Ç
mongos ÎÞ·¨Á¬½Óµ½ÈκÎÅäÖ÷þÎñÆ÷£¬·ñÔòÄã²»Ó¦¸ÃµÃµ½´íÎ󣩡£D
ÒªÌí¼ÓÐ嵀ᅮ¬£¬ÔËÐУº
> db.addShard("rsName/seed1,seed2,seed3") |
ÒªÔÚÊý¾Ý¿âÉÏÔËÓÃ·ÖÆ¬£¬ÔËÐУº
> db.adminCommand({enableSharding: true}) |
ÒªÔÚ¼¯ºÏÉÏÔËÓÃ·ÖÆ¬£¬ÔËÐУº
> db.adminCommand({shardCollection: "dbName.collName", unique: true, key: {fieldName: 1}}) |
¼È²»Ó¦¸ÃÒѾ´æÔÚ dbName.collName£¬Ò²²»Ó¦¸ÃÒѾË÷ÒýfieldName(·ÖƬ¹Ø¼ü×Ö)¡£Èç¹ûÄãÔÚʹÓÃΨһ·ÖƬ¹Ø¼ü×Ö£¬Ëü±ØÐëÊÇΨһË÷ÒýµÄ¡£
ÔÚ¼¯ÈºÖУ¬Èç¹ûÄã²»ÊÇÔÚ _id ÉÏ·ÖÆ¬£¬_id ÎÞÐèΨһ¡£²»¹ÜÔõÑù£¬ËüÃǶ¼ÔÚ¶ÀÁ¢µÄ·ÖƬÉÏ£¨¾ÍÊÇ˵£¬Äã¿ÉÒÔÔÚ
shard1 ÉÏÓÐÒ»¸ö_id:123£¬ÔÚ shard2 ÉúÒ²ÓÐÒ»¸ö_id:123£¬µ«ËüÃDz»ÄÜͬʱ´æÔÚÓÚ
shard1ÖУ©¡£ÎļþÍùÍùÔÚ·ÖÆ¬¼äÒÆ¶¯£¬Èç¹ûÊÇ×Ô¼ºÉú³ÉµÄ_id£¬ÄãÐèҪȷ±£ÄãµÄ_idΨһ¡£Èç¹ûÄãÓõÄÊÇObject_Id
¾Í²»»á³öÎÊÌâ¡£
Òª¹Ø±Õ¾ùºâÆ÷£¬Í¨¹ýµÄ mongos ¸üРconfig.settings
¼¯ºÏ£º
> sh.setBalancerState(false) |
Òª»Ö¸´£¬ÔòʹÓÃͬÑùµÄÃüÁ´«µÝÒ»¸ö True¡£
Mongo¼à¿Ø·þÎñ (MMS)
MMS ÊÇÒ»ÖÖÃâ·ÑµÄ¡¢ÒײÙ×÷µÄ¼à¿Ø MongoDB µÄ·½Ê½¡£ÒªÊ¹ÓÃËü£¬ÏÈÔÚ
http://mms.10gen.com. ´´½¨Ò»¸öÕ˺š£

²é¿´ http://mms.10gen.com/help ÒÔ»ñµÃ¸ü¶àµÄÎĵµ¡£
|