¡¾ÕªÒª¡¿µ±½ñÒѽøÈë´óÊý¾Ýʱ´ú£¬ÌرðÊÇ´ó¹æÄ£»¥ÁªÍøweb2.0Ó¦Óò»¶Ï·¢Õ¹¼°ÔƼÆËãËùÐèÒªµÄº£Á¿´æ´¢ºÍº£Á¿¼ÆËã·¢Õ¹£¬´«Í³µÄ¹ØÏµÐÍÊý¾Ý¿âÒÑÎÞ·¨Âú×ãÕâ·½ÃæµÄÐèÇó¡£Ëæ×ÅNoSQLÊý¾Ý¿âµÄ²»¶Ï·¢Õ¹ºÍ³ÉÊ죬¿ÉÒԽϺõؽâ¾öº£Á¿´æ´¢ºÍº£Á¿¼ÆËã·½ÃæµÄÓ¦ÓÃÐèÇó¡£±¾ÎÄÖØµãÃèÊö×÷ΪNoSQLÖ®Ò»MongoDBÊý¾Ý¿âÔÚº£Á¿Êý¾Ý´æ´¢·½ÃæµÄÓ¦Óá£
1 ÒýÑÔ
NoSQL,È«³ÆÊÇ¡°Not Only Sql¡±£¬Ö¸µÄÊǷǹØÏµÐ͵ÄÊý¾Ý¿â¡£ÕâÀàÊý¾Ý¿âÖ÷ÒªÓÐÕâÐ©ÌØµã£º·Ç¹ØÏµÐ͵ġ¢·Ö²¼Ê½¡¢¿ªÔ´µÄ¡¢Ë®Æ½¿ÉÀ©Õ¹µÄ¡£ÔʼĿµÄÊÇΪÁË´ó¹æÄ£webÓ¦Óã¬ÕⳡȫеÄÊý¾Ý¿â¸ïÃüÔ˶¯ÔçÆÚ¾ÍÓÐÈËÌá³ö£¬·¢Õ¹ÖÁ2009ÄêÇ÷ÊÆÔ½·¢¸ßÕÇ¡£·Ç¹ØÏµÐ͵ÄÊý¾Ý´æ´¢Í¨³£µÄÓ¦ÓÃÈ磺ģʽ×ÔÓС¢Ö§³Ö¼òÒ׸´ÖÆ¡¢¼òµ¥µÄAPI¡¢×îÖÕµÄÒ»ÖÂÐÔ£¨·ÇACID£©¡¢´óÈÝÁ¿Êý¾ÝµÈ¡£ËüµÄÖÖÀà·±¶à£¬ÈçÁÐʽÊý¾Ý¿â£¨Hadoop/HBase¡¢Cassandra¡¢Hypertable¡¢Amazon
SimpleDBµÈ£©¡¢ÎĵµÐÍÊý¾Ý¿â£¨MongoDB¡¢CouchDB¡¢OrientDBµÈ£©¡¢¼üÖµÊý¾Ý¿â£¨Azure
Table Storage¡¢MEMBASE¡¢Redis¡¢Berkeley DB¡¢MemcacheDBµÈ£©¡¢Í¼ÐÎÊý¾Ý¿â£¨Neo4J¡¢Infinite
Graph¡¢Sones¡¢BigdataµÈ£©¡¢ÃæÏò¶ÔÏóÊý¾Ý¿â£¨db4o¡¢Versant¡¢Objectivity¡¢StarcounterµÈ£©¡¢Íø¸ñ¼°ÔÆÊý¾Ý¿â£¨GigaSpaces¡¢Queplix¡¢HazelcastµÈ£©¡¢XMLÊý¾Ý¿â£¨Mark
Logic Server¡¢EMC Documentum xDB¡¢BaseX¡¢Berkeley DB XMLµÈ£©¡¢¶àÖµÊý¾Ý¿â£¨U2¡¢OpenInsight¡¢OpenQMµÈ£©¼°ÆäËû·Ç¹ØÏµÐÍÊý¾Ý¿â£¨ÈçFileDB£©µÈ¡£
MongoDBÊôÓÚNoSQLÊý¾ÝµÄÒ»ÖÖ£¬ÊÇÓÉ10gen¹«Ë¾ÌṩµÄÒ»¸ö¿ªÔ´µÄ¡¢Ä£Ê½×ÔÓɵġ¢ÃæÏòÎĵµ´æ´¢µÄ¡¢·Ö²¼Ê½µÄÊý¾Ý¿â£¬ÊÇÒ»¸ö½éÓÚ¹ØÏµÊý¾Ý¿âºÍ·Ç¹ØÏµÊý¾Ý¿âÖ®¼äµÄ²úÆ·¡£ÓÉC++ÓïÑÔ±àд£¬Ö¼ÔÚΪWebÓ¦ÓÃÌṩ¿ÉÀ©Õ¹µÄ¸ßÐÔÄÜÊý¾Ý´æ´¢½â¾ö·½°¸¡£ËûÖ§³ÖµÄÊý¾Ý½á¹¹·Ç³£ËÉÉ¢£¬ÊÇÀàËÆJsonµÄBson¸ñʽ£¬Òò´Ë¿ÉÒÔ´æ´¢±È½Ï¸´ÔÓµÄÊý¾ÝÀàÐÍ¡£
Ëû¿ÉÒÔÔËÐÐÔÚSolaris¡¢Linux¡¢WindowsºÍOSXƽ̨ÉÏ£¬Ö§³Ö32λºÍ64λӦÓã¬ÆäÖÐÔÚ32λӦÓÃÖе¥¸öÊý¾Ý¿â×î´óÈÝÁ¿Îª2G£¬ÔÚ64λӦÓÃÖд洢ÈÝÁ¿´óСֻÓëʵ¼Ê´æ´¢¿Õ¼ä´óСÓйأ¬²¢ÇÒÌṩÁËJava¡¢C#¡¢PHP¡¢C¡¢C++¡¢Javascript¡¢Python¡¢Ruby¡¢PerlµÈ¶àÖÖÓïÑÔµÄÇý¶¯³ÌÐò£¬×îеÄÉú²ú°æ±¾Îª2.0£¬¹Ù·½ÏÂÔØµØÖ·£ºhttp://www.mongodb.org/downloads¡£Ä¿Ç°ÕýÔÚʹÓÃËûµÄÍøÕ¾ºÍÆóÒµÒѳ¬¹ýÁË100¼Ò£¬ÈçÊÓ¾õÖйú¡¢´óÖÚµãÆÀÍø¡¢ÌÔ±¦Íø¡¢Ê¢´ó¡¢Foursquare¡¢Wordnik¡¢OpenShift¡¢SourceForge¡¢GithubµÈ¡£
Ëæ×ÅÆóÒµÊý¾Ý²»¶Ï»ýÀÛºÍÔö¼Ó¼°Web2.0Ó¦Óò»¶ÏÏòǰ·¢Õ¹£¬ÒѽøÈëÁ˸öÈËÐÅϢʱ´ú£¬¶ÔÓÚ´óÖÐÐÍÆóÒµÀ´Ëµ£¬¿ÉÄÜÿÌ콫²úÉú´óÁ¿µÄÊý¾Ý£¬À´Ö®ÓÚ¸÷Ààϵͳ£¬Èç¸÷ÀàÎĵµ(OAÎĵµ¡¢ÏîÄ¿ÎĵµµÈ)¡¢Éè¼ÆÍ¼Ö½¡¢¸ßÇåͼƬ¡¢ÊÓÆµµÈ£¬¶ÔÓÚÔ±¹¤À´Ëµ£¬¸ü¹ØÐĵÄÊǸöÈËÐÅÏ¢·½ÃæµÄ´æ´¢ºÍ¼ÆË㣬µ±ÕâЩÐÅÏ¢Á¿×ã¹»´óʱ£¬ÏëҪʵʱÌáÈ¡»ò·ÖÎöÊý¾Ý£¬´«Í³¼¯ÖÐʽ·½Ê½ÄÑÒÔÂú×ãÕâ·½ÃæµÄÐèÇó£¬Òò´Ë²ÉÓ÷ֲ¼Ê½µÄ´æ´¢ºÍ¼ÆËã³ÉΪ±ØÈ»µÄÑ¡Ôñ£¬Ò»·½ÃæÖ÷Òª½â¾öº£Á¿´æ´¢ÎÊÌ⣬ÁíÒ»·½Ãæ½â¾öº£Á¿¼ÆËãÎÊÌâ¡£²ÉÓÃMongoDBµÄÊý¾Ý¿â¼¼ÊõÄÜÓÐЧµØ½â¾ö·Ö²¼Ê½·½ÃæµÄÓ¦Ó㬱¾ÎÄÖØµã·ÖÎöMongoDBÔÚº£Á¿Êý¾Ý´æ´¢·½ÃæµÄÓ¦Óá£
2 ¸ÅÊö
2.1 MongoDBµÄÖ÷ÒªÌØµã
£¨1£©Îļþ´æ´¢¸ñʽΪBson£¬Ê¹ÓÃÒ×ÓÚÕÆÎÕºÍÀí½âµÄJson·ç¸ñÓï·¨¡£Ïà¶ÔJsonÀ´Ëµ£¬BsonÓµÓиüºÃµÄÐÔÄÜ£¬Ö÷Òª±íÏÖΪ¸ü¿ìµÄ±éÀúËÙ¶È¡¢²Ù×÷¸ü¼òÒס¢Ôö¼ÓÁ˶îÍâµÄÊý¾ÝÀàÐÍ¡£
£¨2£©Ä£Ê½×ÔÓÉ£¬Ö§³ÖǶÈë×ÓÎĵµºÍÊý×飬ÎÞÐèÊÂÏÈ´´½¨Êý¾Ý½á¹¹£¬ÊôÓÚÄæ¹æ·¶»¯µÄÊý¾ÝÄ£ÐÍ£¬ÓÐÀûÓÚÌá¸ß²éѯËÙ¶È¡£
£¨3£©¶¯Ì¬²éѯ£¬Ö§³Ö·á¸»µÄ²éѯ±í´ïʽ£¬Ê¹ÓÃJsonÐÎʽµÄ±ê¼Ç£¬¿ÉÇáÒײéѯÎĵµÖÐÄÚǶµÄ¶ÔÏóºÍÊý×é¼°×ÓÎĵµ¡£
£¨4£©ÍêÕûµÄË÷ÒýÖ§³Ö£¬°üÀ¨ÎĵµÄÚǶ¶ÔÏóºÍÊý¾Ý£¬Í¬Ê±»¹ÌṩÁËÈ«ÎÄË÷Òý·½Ê½£¬MongoDBµÄ²éѯÓÅ»¯Æ÷»á·ÖÎö²éѯ±í´ïʽ£¬²¢Éú³ÉÒ»¸ö¸ßЧµÄ²éѯ¼Æ»®¡£
£¨5£©Ê¹ÓøßЧµÄ¶þ½øÖÆÊý¾Ý´æ´¢£¬Êʺϴ洢´óÐͶÔÏó£¨Èç¸ßÇåͼƬ¡¢ÊÓÆµµÈ£©¡£
£¨6£©Ö§³Ö¶àÖÖ¸´ÖÆÄ£Ê½£¬ÌṩÈßÓ༰×Ô¶¯¹ÊÕÏ×ªÒÆ¡£Ö§³ÖMaster-Slave¡¢Replica
Pairs/Replica Sets¡¢ÓÐÏÞMaster-Masterģʽ¡£
£¨7£©Ö§³Ö·þÎñ¶Ë½Å±¾ºÍMap/Reduce£¬¿ÉÒÔʵÏÖº£Á¿Êý¾Ý¼ÆË㣬¼´ÊµÏÖÔÆ¼ÆË㹦ÄÜ¡£
£¨8£©ÐÔÄܸߡ¢Ëٶȿ졣ÔÚ¶àÊý³¡ºÏ£¬Æä²éѯËٶȶÔÓÚMySQLÒª¿ìµÄ¶à£¬¶ÔÓÚCPUÕ¼Ó÷dz£Ð¡¡£²¿ÊðºÜ¼òµ¥£¬¼¸ºõÊÇÁãÅäÖá£
£¨9£©×Ô¶¯´¦ÀíË鯬£¬Ö§³Ö×Ô¶¯·ÖƬ¹¦ÄÜʵÏÖˮƽÀ©Õ¹µÄÊý¾Ý¿â¼¯Èº£¬¿ÉÒÔ¶¯Ì¬Ìí¼Ó»òÒÆ³ý½Úµã¡£
£¨10£©ÄÚÖÃGridFS£¬Ö§³Öº£Á¿´æ´¢¡£
£¨11£©¿Éͨ¹ýÍøÂç·ÃÎÊ£¬²ÉÓøßЧµÄMongoDBÍøÂçÐÒ飬ÔÚÐÔÄÜ·½ÃæÒªÓÅÓÚhttp»òRestÐÒé¡£
£¨12£©µÚÈý·½Ö§³Ö·á¸»£¬MongoDBÉçÇø»îÔ¾£¬Ô½À´Ô½¶àµÄ¹«Ë¾ºÍÍøÕ¾ÔÚÉú²ú»·¾³ÖÐʹÓÃMongoDB½øÐм¼Êõ¼Ü¹¹ÓÅ»¯£¬Í¬Ê±ÓÉ10gen¹«Ë¾¹Ù·½Ìṩǿ´ó¼¼ÊõÖ§³Ö¡£
2.2 MongoDBµÄÊÊÓó¡¾°
MongoDBµÄÖ÷ҪĿ±êÊÇÔÚ¼ü/Öµ´æ´¢·½Ê½£¨ÌṩÁ˸ßÐÔÄܺ͸߶ÈÉìËõÐÔ£©ÒÔ¼°´«Í³µÄRDBMSϵͳ£¨·á¸»µÄ¹¦ÄÜ£©¼ÜÆðÒ»×ùÇÅÁº£¬¼¯Á½ÕßµÄÓÅÊÆÓÚÒ»Éí¡£
£¨1£©ÍøÕ¾Êý¾Ý£ºMongoDB·Ç³£ÊʺÏʵʱµÄ²åÈ룬¸üÐÂÓë²éѯ£¬²¢¾ß±¸ÍøÕ¾ÊµÊ±Êý¾Ý´æ´¢ËùÐèµÄ¸´ÖƼ°¸ß¶ÈÉìËõÐÔ¡£
£¨2£©»º´æ£ºÓÉÓÚÐÔÄܸܺߣ¬MongoDBÒ²ÊʺÏ×÷ΪÐÅÏ¢»ù´¡ÉèÊ©µÄ»º´æ²ã¡£ÔÚÏµÍ³ÖØÆôÖ®ºó£¬ÓÉMongoDB´î½¨µÄ³Ö¾Ã»¯»º´æ²ã¿ÉÒÔ±ÜÃâϲãµÄÊý¾ÝÔ´¹ýÔØ¡£
£¨3£©´ó³ß´ç£¬µÍ¼ÛÖµµÄÊý¾Ý£ºÊ¹Óô«Í³µÄ¹ØÏµÐÍÊý¾Ý¿â´æ´¢Ò»Ð©Êý¾Ýʱ¿ÉÄÜ»á±È½Ï°º¹ó£¬ÔÚ´Ë֮ǰ£¬ºÜ¶àʱºò³ÌÐòÔ±ÍùÍù»áÑ¡Ôñ´«Í³µÄÎļþ½øÐд洢¡£
£¨4£©¸ßÉìËõÐԵij¡¾°£ºMongoDB·Ç³£ÊʺÏÓÉÊýÊ®»òÊý°Ų̀·þÎñÆ÷×é³ÉµÄÊý¾Ý¿â¡£MongoDBµÄ·ÏßͼÖÐÒѾ°üº¬¶ÔMapReduce
ÒýÇæµÄÄÚÖÃÖ§³Ö¡£
£¨5£©ÓÃÓÚ¶ÔÏó¼°JSONÊý¾ÝµÄ´æ´¢£ºMongoDBµÄBsonÊý¾Ý¸ñʽ·Ç³£ÊʺÏÎĵµ»¯¸ñʽµÄ´æ´¢¼°²éѯ¡£
2.3 MongoDBµÄÌåϵ½á¹¹
MongoDBÊÇÓÉһϵÁÐÎïÀíÎļþ£¨Êý¾ÝÎļþ£¬ÈÕÖ¾ÎļþµÈ£©µÄ¼¯ºÏÓëÖ®¶ÔÓ¦µÄÂß¼½á¹¹£¨¼¯ºÏ¡¢ÎĵµµÈ£©¹¹³ÉµÄÊý¾Ý¿â¡£
MongoDBµÄÂß¼½á¹¹Êµ¼ÊÊÇÒ»ÖÖ²ã´Î½á¹¹£¬ÓÉÎĵµ£¨document£¬Ï൱ÓÚ¹ØÏµÊý¾Ý¿âÖеÄrow£©¡¢¼¯ºÏ£¨collection£¬Ï൱ÓÚ¹ØÏµÊý¾Ý¿âÖеÄtable£©¡¢Êý¾Ý¿â£¨database£¬Ï൱ÓÚ¹ØÏµÊý¾Ý¿âÖеÄdatabase£©ÕâÈý²¿·Ö×é³É¡£
Ò»¸öMongoDBʵÀýÖ§³Ö¶à¸öÊý¾Ý¿â¡£ÔÚMongoDBÄÚ²¿£¬Ã¿¸öÊý¾Ý¿â¶¼°üº¬Ò»¸ö.nsÎļþºÍһЩÊý¾ÝÎļþ£¬²ÉÓÃÔ¤·ÖÅä¿Õ¼äµÄ»úÖÆ£¬Ê¼ÖÕ±£³Ö¶îÍâµÄ¿Õ¼äºÍ¿ÕÓàµÄÊý¾ÝÎļþ£¬´Ó¶øÓÐЧ±ÜÃâÁËÓÉÓÚÊý¾Ý±©Ôö´øÀ´µÄ´ÅÅÌѹÁ¦¹ý´óÎÊÌ⡣ÿ¸öÔ¤·ÖÅäµÄÎļþ¶¼ÓÃ0½øÐÐÌî³ä£¬Êý¾ÝÎļþÿзÖÅäÒ»´Î£¬ËûµÄ´óС¶¼»áÊÇÉÏÒ»¸öÊý¾ÝÎļþ´óСµÄ2±¶£¬Ã¿¸öÊý¾ÝÎļþ×î´óΪ2G¡£
2.4 MongoDBÓëMS SQL ServerµÄÓï¾ä¶ÔÕÕ
MongoDBÌṩÁ˹¦ÄܷḻµÄ²éѯ±í´ïʽ£¬¿ÉÒÔʵÏÖ¾ø´ó¶àÊý¹ØÏµÊý¾Ý¿âµÄsqlÓï¾ä¹¦ÄÜ£¬ÒÔ±íemployee(id,name,age)¾ÙÀý¶ÔÕÕ˵Ã÷£¬ÈçÏÂͼ1Ëùʾ¡£

ͼ1 MongoDBÓëMS SQL ServerÓï¾ä¶ÔÕÕ
3 ¹ý³Ì·ÖÎöÓë²âÊÔ
3.1 GridFS¸ÅÊö
ÓÉÓÚMongoDBÖеÄBson¶ÔÏó´óСÊÇÓÐÏÞÖÆµÄ£¬ÔÚ1.7°æ±¾ÒÔǰµ¥¸öBson¶ÔÏó×î´óÈÝÁ¿Îª4M£¬1.7°æ±¾ÒԺ󵥸öBson¶ÔÏó×î´óÈÝÁ¿Îª16M[5]¡£¶ÔÓÚÒ»°ãµÄÎļþ´æ´¢£¬µ¥¸ö¶ÔÏóµÄ4µ½16MµÄ´æ´¢ÈÝÁ¿Äܹ»Âú×ãÐèÇ󣬵«ÎÞ·¨Âú×ã¶ÔÓÚһЩ´óÎļþµÄ´æ´¢£¬Èç¸ßÇåͼƬ¡¢Éè¼ÆÍ¼Ö½¡¢ÊÓÆµµÈ£¬Òò´ËÔÚº£Á¿Êý¾Ý´æ´¢·½Ã棬MongoDBÌṩÁËÄÚÖõÄGridFS£¬¿ÉÒÔ½«Ò»¸ö´óÎļþ·Ö¸î³ÉΪ¶à¸ö½ÏСµÄÎĵµ£¬¿ÉÒÔÖ¸¶¨Îļþ·Ö¿é±ê×¼£¬¶ÔÓû§ÊÇ͸Ã÷µÄ¡£GridFSʹÓÃÁ½¸öÊý¾Ý½á¹¹À´´æ´¢Êý¾Ý£ºfiles£¨°üº¬ÔªÊý¾Ý¶ÔÏ󣩡¢chunks£¨°üº¬ÆäËûһЩÏà¹ØÐÅÏ¢µÄ¶þ½øÖƿ飩¡£ÎªÁËʹ¶à¸öGridFSÃüÃûΪһ¸öµ¥Ò»µÄÊý¾Ý¿â£¬ÎļþºÍ¿é¶¼ÓÐÒ»¸öǰ׺£¬Ä¬ÈÏǰ׺Ϊfs£¬Óû§ÓÐȨ¸Ä±äÕâ¸öǰ׺¡£
GridFS¶ÔJava¡¢C#¡¢Perl¡¢PHP¡¢Python¡¢RubyµÈ³ÌÐòÑÔÓï¾ùÖ§³Ö£¬ÇÒÌṩÁËÁ¼ºÃµÄAPI½Ó¿Ú¡£
3.2 »ùÓÚGridFSµÄº£Á¿Êý¾Ý´æ´¢²âÊÔ
±¾ÎÄÖ÷Òª²ÉÓÃMongoDB×îаæ2.0¼°¹Ù·½ÌṩµÄC#ÓïÑÔÇý¶¯½øÐвâÊÔ£¬C#Çý¶¯ÏÂÔØµØÖ·£ºhttps://github.com/mongodb/Mongo-csharp-driver¡£
MongoDBÔÚbinĿ¼ÏÂÌṩÁËһϵÁÐÓÐÓõŤ¾ß£¬¿ÉÒԺܷ½±ãµÄ½øÐÐÔËά¹ÜÀí£º
£¨1£©bsondump£º½«Bson¸ñʽµÄÎļþת´¢ÎªJson¸ñʽµÄÊý¾Ý¡£
£¨2£©mongo£º¿Í»§¶ËÃüÁîÐй¤¾ß£¬Ö§³ÖjsÓï·¨¡£
£¨3£©mongod£ºÊý¾Ý¿â·þÎñ¶Ë£¬Ã¿¸öʵÀýÆô¶¯Ò»¸ö½ø³Ì£¬¿ÉÒÔforkΪºǫ́ÔËÐС£
£¨4£©mongodump£ºÊý¾Ý¿â±¸·Ý¹¤¾ß¡£
£¨5£©mongorestore£ºÊý¾Ý¿â»Ö¸´¹¤¾ß¡£
£¨6£©mongoexport£ºÊý¾Ýµ¼³ö¹¤¾ß¡£
£¨7£©mongoimport£ºÊý¾Ýµ¼È빤¾ß¡£
£¨8£©mongofiles£ºGridFS¹ÜÀí¹¤¾ß£¬¿ÉʵÏÖ¶þ½øÖÆÎļþµÄ´æÈ¡¡£
£¨9£©mongos:·ÖƬ·ÓÉ£¬Èç¹ûʹÓÃÁËsharding¹¦ÄÜ£¬ÔòÓ¦ÓóÌÐòÁ¬½ÓµÄÊÇmongos£¬¶ø·Çmongod¡£
£¨10£©mongosniff£ºÕâÒ»¹¤¾ßµÄ×÷ÓÃÀàËÆÓÚtcpdump£¬²»Í¬µÄÊÇËûÖ»¼à¿ØMongoDBÏà¹Ø°üÇëÇ󣬲¢ÇÒÊÇÒÔÖ¸¶¨µÄ¿É¶ÁÐÔµÄÐÎʽÊä³ö¡£
£¨11£©mongostat£ºÊµÊ±ÐÔÄÜ¼à¿Ø¹¤¾ß¡£
ͬʱÓкü¸¸öµÚÈý·½ÌṩµÄ¿Í»§¶ËͼÐι¤¾ß£¬ÈçMongoVUE¡¢RockMongo¡¢MongoHubµÈ£¬·½±ã¹ÜÀíºÍά»¤¡£
GridFS½áºÏ×Ô¶¯·ÖƬ¼°×Ô¶¯¸´ÖƼ¼Êõ£¬¿ÉÒÔʵÏÖ¸ßÐÔÄܵķֲ¼Ê½Êý¾Ý¿â¼¯Èº¼Ü¹¹£¬´Ó¶ø½øÐк£Á¿Êý¾Ý´æ´¢£¬ÈçÏÂͼ2Ëùʾ¡£
ͼ2 ¸ßÐÔÄܵķֲ¼Ê½Êý¾Ý¿â¼¯Èº¼Ü¹¹
MongoDB Sharding ClusterÐèÒªÈýÖÖ½ÇÉ«£º
£¨1£©Shard Server£º¼´´æ´¢Êµ¼ÊÊý¾ÝµÄ·ÖƬ£¬Ã¿¸öShard¿ÉÒÔÊÇÒ»¸ömongodʵÀý£¬Ò²¿ÉÒÔÊÇÒ»×émongodʵÀý¹¹³ÉµÄReplica
Set¡£
£¨2£©Config Server£ºÓÃÀ´´æ´¢ËùÓÐshard½ÚµãµÄÅäÖÃÐÅÏ¢¡¢Ã¿¸öchunkµÄshard key·¶Î§¡¢chunkÔÚ¸÷shardµÄ·Ö²¼Çé¿ö¡¢¸Ã¼¯ÈºÖÐËùÓÐDBºÍcollectionµÄshardingÅäÖÃÐÅÏ¢¡£
£¨3£©Route Process£ºÕâÊÇÒ»¸öǰ¶Ë·ÓÉ£¬¿Í»§¶ËÓɴ˽ÓÈ룬ȻºóѯÎÊConfig ServersÐèÒªµ½ÄĸöshardÉϲéѯ»ò±£´æ¼Ç¼£¬ÔÙÁ¬½ÓÏàÓ¦µÄshard½øÐвÙ×÷£¬×îºó½«½á¹û·µ»Ø¸ø¿Í»§¶Ë£¬¶øÕâÒ»ÇжԿͻ§¶ËÊÇ͸Ã÷µÄ£¬¿Í»§¶Ë²»ÓùØÐÄËù²Ù×÷µÄ¼Ç¼´æ´¢ÔÚÄĸöshardÉÏ¡£
ΪÁ˲âÊÔ·½±ã£¬ÏÂÃæÔÚͬһ̨ÎïÀí»úÆ÷ÉϹ¹½¨Ò»¸ö¼òµ¥µÄSharding Cluster£¬ÈçÏÂͼ3Ëùʾ¡£

ͼ3 ¼òµ¥µÄSharding Cluster¼Ü¹¹Í¼
ÅäÖòâÊÔ»·¾³ÈçÏ£º
Ä£Äâ2¸öShard·þÎñÆ÷ºÍ1¸öConfig·þÎñÆ÷£¬¾ùÔËÐÐÔÚ±¾»ú127.0.0.1ÉÏ£¬Ö»ÊǶ˿ڲ»Í¬£º
£¨1£©Shard Server1£º127.0.0.1£º27020¡£
£¨2£©Shard Server2£º127.0.0.1£º27021¡£
£¨3£©Config Server£º127.0.0.1£º27022¡£
£¨4£©Route Process£º127.0.0.1£º27017¡£
Æô¶¯Ïà¹Ø·þÎñ½ø³Ì£º
c:\mongodb 2.0.0\bin>mongod --shardsvr --dbpath
"c:\mongodb 2.0.0\db" --port 27020
d:\mongodb 2.0.0\bin>mongod --shardsvr --dbpath
"d:\mongodb 2.0.0\db" --port 27021
e:\mongodb 2.0.0\bin>mongod --configsvr --dbpath
"e:\mongodb 2.0.0\db" --port 27022
e:\mongodb 2.0.0\bin>mongos --configdb 127.0.0.1:27022
ÅäÖÃSharding£º
(1)e:\mongodb 2.0.0\bin>mongo
(2)use admin
(3)db.runCommand( { addshard : "127.0.0.1:27020",
allowLocal : 1,
maxSize:2 , minKey:1, maxKey:10 } )
(4)db.runCommand( { addshard : "127.0.0.1:27021",
allowLocal : 1, minKey:100 } )
(5)config =connect("127.0.0.1:27022")
(6)config = config.getSisterDB("config")
(7)ecDocs=db.getSisterDB("ecDocs")
(8)db.runCommand({enablesharding:"ecDocs"})
(9)db.runCommand( { shardcollection : "ecDocs.filedocs.chunks",
key : { files_id : 1 } } )
(10)db.runCommand( { shardcollection : "ecDocs.filedocs.files",
key : { _id : 1 } } )
ÒÔÉϵÄecDocsÊÇÖ¸Êý¾Ý¿âÃû£¬filedocsÊÇÖ¸Óû§×Ô¶¨ÒåµÄGridFSµÄÎļþ¼¯ºÏÃû£¬ÏµÍ³Ä¬ÈÏÎļþ¼¯ºÏÃûΪfs¡£
ʹÓùٷ½ÌṩµÄC#Çý¶¯,ÐèÒªÔÚ³ÌÐòÖÐÒýÓÃMongoDB.Driver.dllMongoDB.Bson.dll£¬Ñ»·Ìí¼ÓͬһÎļþµ½GridFSʾÀý´úÂ룬ÈçÏÂͼ4Ëùʾ¡£

ͼ4 Ñ»·Ìí¼ÓͬһÎļþµ½GridFS´úÂë
²âÊÔÅäÖû·¾³ÈçÏ£º
²Ù×÷ϵͳ£ºWindowsXPרҵ°æ32λSP3¡£
´¦ÀíÆ÷(CPU)£ºÓ¢ÌضûXeon(ÖÁÇ¿)W3503@2.40GHz¡£
Äڴ棺3567MB(DDR31333MHz/FLASH)¡£
Ó²ÅÌ£ºÏ£½ÝST3250318AS(250GB/7200ת/·Ö)¡£
ÓÉÓÚ±¾»úÊÇ32λ²Ù×÷ϵͳ£¬Òò´Ëµ¥¸ö·þÎñʵÀýÖ»Ö§³ÖGridFSµÄÎļþÈÝÁ¿´óСΪ0.9G×óÓÒ£¬ÓÉÓÚ²ÉÓÃÁËÁ½Ì¨Shard·þÎñʵÀý£¬¿ÉÒÔÖ§³Ö´æ´¢µÄÎļþ×ÜÈÝÁ¿´óСΪ1.8G×óÓÒ£¬Èç¹ûÊÇ64λ²Ù×÷ϵͳ¾ÍûÓдËÏÞÖÆ¡£
±¾ÎÄÖ÷Òª²âÊÔGridFS²ÉÓÃÑ»·²åÈë´óÈÝÁ¿ÎļþµÄÐÔÄÜºÍ·ÖÆ¬ÈÝÁ¿´óС,²âÊÔ½á¹û£¬ÈçÏÂͼ5Ëùʾ¡£
´Óͼ5¿ÉÒÔ¿´³ö£¬µÚ1µ½3²½Ö裬ֻÌí¼Óµ¥¸öÎļþʱ£¬Shard2²¢Ã»ÓвúÉú·ÖƬÊý¾Ý£¬Ö»ÓвâÊÔµ½²½Öè4Á¬ÐøÌí¼Ó100¸öÏàͬÎļþʱShard2²Å²úÉú·ÖƬÊý¾Ý£¬²¢ÇÒÌí¼ÓÈýËİÙÕ׵ĵ¥¸öÎļþ£¬Ö»Ðè11Ãë¶à¾ÍÍê³ÉÁ˲Ù×÷£¬¶ø¼´Ê¹Í¨¹ýÎļþ¿½±´·½Ê½Õâô´óµÄÎļþÒ²ÖÁÉÙÐèÒª¶þÈýÊ®Ãë²ÅÄÜÍê³É£¬¿É¼ûMongoDBÔÚ´óÈÝÁ¿Îļþ´æ´¢·½ÃæÓµÓзdz£¸ßµÄÐÔÄÜ¡£
ͨ¹ýÔÚ¿Í»§¶ËµÄmongo¹¤¾ßÊäÈëdb.printShardingStatus()ÃüÁî¿ÉÒԲ鿴Ïêϸ·ÖƬÇé¿ö£¬ÈçÏÂͼ6Ëùʾ¡£
´Óͼ6¿ÉÒÔ¿´³ö£¬ÔÚshard1ÖзÖÅäÁË6¸öchunks£¬ÔÚshard2ÖзÖÅäÁË7¸öchunks£¬·ÖƬÊý¾ÝÏà¶Ô»¹ÊDZȽϾùÔȵġ£
´ÓÒÔÉϵIJâÊÔ¿ÉÒÔµÃÖª£¬²ÉÓÃGridFS¿ÉÒÔ´æ´¢º£Á¿Êý¾Ý£¬²¢ÇÒ¿ÉÒÔͨ¹ýÁ®¼Û·þÎñÆ÷½øÐдó¹æÄ£Êý¾Ý¿â¼¯Èº£¬·Ç³£ÈÝÒ×À©Õ¹²¿Ê𣬳ÌÐò±àÂëÒ²·Ç³£ÈÝÒ×£¬Òò´ËÄܹ»ÓÐЧ֧³ÖÔÆ´æ´¢µÄÓ¦Óã¬Äܹ»Âú×ã´ó¹æÄ£Êý¾Ý´æ´¢µÄÓ¦ÓÃÐèÇó¡£

ͼ5 GridFS´óÈÝÁ¿Îļþ²âÊÔ½á¹û

ͼ6 GridFS´óÈÝÁ¿Îļþ·ÖƬÐÅÏ¢
4 ½áÂÛ
Ëæ×ÅÆóÒµºÍ¸öÈËÊý¾ÝµÄ²»¶ÏÀ©´ó£¬Ëæ×ÅÔÆ¼ÆËãµÄ¸ßËÙ·¢Õ¹£¬Ô½À´Ô½¶àµÄÓ¦ÓÃÐèÒª´æ´¢º£Á¿Êý¾Ý£¬²¢ÇҶԸ߲¢·¢ºÍ´¦Àíº£Á¿Êý¾ÝÌá³öÁ˸ü¸ßµÄÒªÇ󣬴«Í³µÄ¹ØÏµÐÍÊý¾Ý¿â¶ÔÓÚÕâЩӦÓó¡¾°ÄÑÒÔÂú×ãÓ¦ÓÃÐèÇ󣬶ø×÷ΪNoSQLÊý¾Ý¿âÖ®Ò»µÄMongoDBÊý¾Ý¿âÄܹ»ÍêÈ«Âú×ãºÍ½â¾öÔÚº£Á¿Êý¾Ý´æ´¢·½ÃæµÄÓ¦Óã¬Ô½À´Ô½¶àµÄ´óÍøÕ¾ºÍÆóҵѡÔñMongoDB´úÌæMysql½øÐд洢¡£
|