ÕªÒª£ºMongoDB×î½üÔÚHack NewsÉÏÊÇÆµ·±ÖÐǹ£¬¸÷ÖÖȱµã±»·×·×±»Ì§ÉÏ×ÀÃæ£»È»¶øËüµÄ¸ßÐÔÄÜ¡¢Òײ¿Êð¡¢Ò×ʹÓÃÕâЩÓŵãͬÑùÊDz»ÈݺöÊӵġ£ÓÚÊǾÍÓÐÁËRussell Smith ¡ª¡ª MongoDB Master£¬ÔÚһƬÐêÉùÖÐΪÎÒÃÇ´øÀ´MongoDB¡°Ú¸²¡¡±µÄÈ«Ãæ·ÖÎö£¬²¢Ò»Ò»Ìá³öÁ˽â¾ö·½°¸¡£

½üÆÚMongoDBÔÚHack NewsÉÏÊÇÆµ·±ÖÐǹ¡£Ðí¶àÈ˸üÊÇÉù³ÆºÞÉÏÁËMongoDB£¬David mytton¾ÍÔÚËûµÄ²©¿ÍÖнÒ¶ÁËMongoDBÐí¶àÏÖ´æÎÊÌ⡣Ȼ¶øºÞµÄÈËÓÐ֮ƫ°®µÄҲͬÑùºÜ¶à£¬×÷Ϊ»Ø»÷£ºRussell Smith´øÀ´Á˶àÄ깤×÷¾ÑéµÄ×ܽᡣRussell SmithÔøµ£ÈÎOpsºÍ´óÐÍÍøÕ¾Ëõ·Å¹ËÎʲ¢ÇÒ°ïÖú¹ýGuardian¡¢ExperianµÈ¶à¼Ò¹«Ë¾£¬MongoDB London User GroupµÄÁªºÏ´´Ê¼ÈË¡£×÷ΪMongoDB Master£¨MongoDB¹Ù·½ÈϿɵÄMongoDBºËÐűÏ×Õß×éÖ¯£¬²¢Í¨¹ýÉçÇø·ÖÏí×Ô¼ºµÄרҵ¼¼Êõ£©£¬Æä²ÎÓ빤×÷µÄ»ù´¡ÉèÊ©µ¥·þÎñÆ÷ÿÃë²éѯ³¬¹ý3Íò´Î£¬Ã¿Ìì»îÔ¾Êý¾Ý¸üÔÚ1TBÒÔÉÏ¡£
ÏÂÃæÀ´¿´Russell¶ÔMongoDBһЩ³£¼û¼°ÉúƧµÄÎÊÌâ×ö³ö·ÖÎö£º
32λ vs 64λ
ÏÖÔÚ´ó¶àÊýµÄ·þÎñÆ÷¶¼¶Ô32λ²Ù×÷ϵͳʵÏÖÖ§³Ö£¬¸üÓÐÐí¶àÐÂÐÍÓ²¼þÖ§³Ö×ÅÔÊÐí¸ü¶àRAMµÄ64λ²Ù×÷ϵͳ¡£
MongoDBҲͬʱ·¢²¼ÁË32λ¼°64λÁ½¸ö°æ±¾µÄÊý¾Ý¿â¡£¹é½áÓÚMongoDBʹÓõÄÄÚ´æÓ³ÉäÎļþ£¬32λ°æ±¾Ö»Ö§³Ö2GÊý¾ÝµÄ´æ´¢¡£¶ÔÓÚ±ê×¼µÄReplica Set£¬MongoDBÖ»ÓµÓе¥Ò»µÄ´¦Àí²ßÂÔ ¡ª¡ª mongod¡£Èç¹ûÄãÏëÔÚδÀ´´¢´æ2GÒÔÉϵÄÊý¾Ý£¬ÇëʹÓÃ64λ°æ±¾µÄMongoDB¡£Èç¹ûÓµÓÐ·ÖÆ¬°²×°£¬ÄÇô32λ°æ±¾Í¬Ñù¿ÉÒÔʹÓá£
×ܽ᣺ʹÓÃ64λ°æ±¾»òÕßÀí½â32λ°æ±¾µÄÏÞÖÆ¡£
Îļþ´óСÏÞÖÆ
²»Í¬ÓÚRDBMS°ÑÊý¾Ý´¢´æÔÚÐÐÓëÁÐÖУ¬MongoDBµÄÊý¾ÝÊÇ´¢´æÔÚÎļþÖеġ£ÕâЩÎļþʹÓöþ½øÖÆ´æ´¢ÐÎʽ£¬Æä¸ñʽΪÀàËÆJSON¸ñʽµÄBSON¸ñʽ¡£
ºÍÆäËüµÄÊý¾Ý¿âÒ»Ñù£¬µ¥¸öÎļþµÄ´¢´æ´óСÊÇÓÐÏÞÖÆµÄ¡£Ôھɰ汾µÄMongoDBÖУ¬µ¥¸öÎļþ¶¼ÏÞÖÆÔÚ4MÒÔÄÚ¡£¶øÐ°汾µÄMongoDBµ¥ÎļþÒѾ֧³Öµ½16M´óС¡£ÕâÑùµÄÏÞÖÆÒ²ÐíÊÇÁîÈËÑá·³µÄ£¬µ«ÊÇ10genµÄÒâ¼ûÊÇ£ºÈç¹ûÕâÏîÉèÖò»Í£µÄÀ§Èŵ½Ä㣬ÄÇôÊÇ·ñÄãµÄÉè¼ÆÄ£Ê½´æÔÚ×ÅÎÊÌ⣻»òÕßÄã¿ÉÒÔʹÓÃÎļþÎÞ´óСÏÞÖÆµÄGridFS¡£
ÕâÖÖÇé¿öͨ³£µÄ½¨ÒéÊDZÜÃâ´æ´¢¹ý´óµÄÎļþ£¬²»¶¨ÆÚµÄ¸üÐÂÊý¾Ý¿âÖд洢µÄ¸÷ÖÖ¶ÔÏó¡£¶øÏñAmazon S3»òÕßRackspace CloudfilesÕâÑùµÄ·þÎñͨ³£¿ÉÄÜ»áÊǸüºÃµÄÑ¡Ôñ£¬¶ø·Ç±ØÒªÇé¿öÏÂ×îºÃ±ðÈûù´¡ÉèÊ©ÏÝÈë¹ýÔØ¡£
×ܽ᣺°Ñÿ¸öÎļþ±£³ÖÔÚ16MÒÔÏ£¬ÄÇôһÇж¼ºÃ¡£
дÈëʧ°Ü
MongoDBÔÚĬÈϵÄÇé¿öÏÂÔÊÐí¸ßËÙµÄдÈëºÍ¸üУ¬¶ø¸¶³öµÄ´ú¼Û¾ÍÊÇûÓÐÃ÷È·µÄ´íÎó֪ͨ¡£Ä¬ÈÏÇé¿ö϶àÊýµÄÇý¶¯¶¼ÔÚ×öÒì²½¡¢¡°²»°²È«¡±Ð´Èë ¡ª¡ª Õâ¾ÍÒâζ×ÅÇý¶¯³ÌÐò²»ÄÜÁ¢¼´·´À¡´íÎóÐÅÏ¢£¬ÀàËÆÓÚMySQLµÄINSERT DELAYED¡£Èç¹ûÄãÏëÖªµÀij¸öÊÂÇéÊÇ·ñ³É¹¦£¬Äã±ØÐëʹÓÃgetLastErrorÊÖ¶¯µÄ¼ì²é´íÎóÐÅÏ¢¡£
ijЩÇé¿öÏÂÈç¹ûÄãÐèÒªÔÚ´íÎó·¢ÉúºóÁ¢¿ÌµÃµ½´íÎóÐÅÏ¢£¬¼´£º´ó¶àÊýµÄÇý¶¯Öж¼ºÜÈÝÒ×ʵÏÖͬ²½¡°°²È«¡±²éѯ¡£Õ⽫ıɱµôMongoDB²»Í¬ÓÚ´«Í³Êý¾Ý¿âµÄÓŵ㡣
Èç¹û¶Ô±È¡°ÍêÈ«°²È«¡±µÄͬ²½Ð´ÈëÄãÐèÒª¶àÒ»µãÐÔÄÜ£¬Í¬Ê±»¹ÏëÒªÒ»¶¨³Ì¶ÈµÄ°²È«£¬ÄÇôÄã¿ÉÒÔʹÓÃgetLastError with¡®j¡¯ÈÃMongoDBÖ»µ½Ò»·ÝÈÕÖ¾Ìá½»ºóÔÙ·¢³ö´íÎ󱨸æÍ¨Öª¡£ÄÇôÈÕÖ¾½«ÒÔ100ºÁÃëÒ»´ÎµÄËÙ¶ÈÊä³öµ½´ÅÅÌ£¬¶ø²»ÊÇ60Ãë¡£
×ܽ᣺Èç¹û±ØÐëҪдÈëÈ·ÈÏ£¬Äã¿ÉÒÔʹÓð²È«Ð´Èë»ògetLastError¡£
Êý¾Ý½á¹¹Ä£Ð͵ÄÈõ»¯²»µÈÓÚûÓÐÊý¾Ý½á¹¹Ä£ÐÍ
RDBMSÒ»°ã¶¼ÓµÓÐÒ»¸öÔ¤¶¨ÒåµÄÊý¾Ý½á¹¹Ä£ÐÍ£º±í¸ñµÄÐкÍÁУ¬Ã¿¸ö×ֶζ¼ÓµÓÐÃû³ÆºÍÊý¾ÝÀàÐÍ¡£Èç¹ûÄãÏë¸øÆäÖÐÒ»ÐмÓÒ»ÁУ¬ÄÇôÄã±ØÐë¸øÕû¸ö±í¸ñ¶¼Ìí¼ÓÒ»ÁС£
MongoDBÔòÊÇÒÆ³ýÁËÕâ¸öÉèÖ㬶ÔÓÚCollectionºÍÎļþûÓÐÇ¿ÖÆµÄÄ£ÐÍÏÞ¶¨¡£ÕâÓÐÒæÓÚ¿ìËÙ¿ª·¢¼°¼òÒ×Ð޸ġ£
µ±È»Õâ²»Òâζ×ÅÄã¾Í¿ÉÒÔÎÞÊӽṹģÐ͵ÄÉè¼Æ£¬Ò»¸öºÏÊʵĽṹģÐÍ¿ÉÒÔÈÃÄã»ñµÃMongoDBµÄ×î¼ÑÐÔÄÜ¡£¸Ï¿ìÔĶÁMongoDBÎĵµ£¬»òÕß¹Û¿´ÕâЩ½á¹¹Ä£ÐÍÉè¼ÆµÄÏà¹ØÊÓÆµ°É£¡
- Schema Design Basics
-
Schema Design at Scale
-
Schema Design Principles and Practice
×ܽ᣺Éè¼Æ½á¹¹Ä£ÐͲ¢³ä·ÖÀûÓÃMongoDBµÄÌØÉ«¡£
ĬÈÏÇé¿öÏÂÐÞ¸ÄÓï¾äÐ޸ĵÄÖ»Êǵ¥¸öÎļþ
ÔÚ´«Í³µÄRDBMSÖгý·ÇʹÓÃLIMIT×Ӿ䣬ÐÞ¸ÄÓï¾ä×÷ÓõĽ«ÊÇËùÓÐÆ¥ÅäµÄµØ·½¡£È»¶øMongoDBÿ¸ö²éѯÉ϶¼Ä¬ÈÏʹÓõȼۡ°LIMIT 1¡±µÄÉèÖá£ËäÈ»ÎÞ·¨×öµ½¡°LIMIT 5¡±£¬µ«ÊÇÄã¿ÉÒÔͨ¹ýÏÂÃæµÄÓï¾äÕû¸öµÄÒÆ³ýÏÞÖÆ£º
db.people.update({age: {$gt: 30}}, {$set: {past_it: true}}, false, true)
ͬÑùÔÚ¹Ù·½µÄÇý¶¯Öл¹ÓÐÀàËÆµÄÑ¡Ïî ¡ª¡ª ¡®multi¡¯¡£
×ܽ᣺¿ÉÒÔͨ¹ýÖ¸¶¨¶à¸öÎļþµÄmultiΪtrueÀ´Íê³É¶àÎļþÐÞ¸Ä
²éÑ¯Çø·Ö´óСд
×Ö·û´®µÄ²éѯ¿ÉÄܲ»°´Ô¤ÆÚµÄÄÇÑù·¢Õ¹ ¡ª¡ª Õâ¹é½áÓÚMongoDBĬÈÏÇø·Ö´óСд¡£
ÀýÈ磺db.people.find£¨{name: ¡®Russell¡¯}£©Óëdb.people.find£¨{name: ¡® russell¡®}£©ÊDz»Í¬µÄ¡£ÔÚÕâÀï×îÀíÏëµÄ½â¾ö·½°¸¾ÍÊǶÔÐèÒª²éѯÊý¾Ý½øÐÐÈ·ÈÏ¡£ÄãÒ²¿ÉÒÔͨ¹ýÕýÔò±í´ïʽ½øÐвéѯ£¬±ÈÈ磺db.people.find£¨{name:/Russell/i}£©£¬µ«ÊÇÕâÑù»áÓ°Ïìµ½ÐÔÄÜ¡£
×ܽ᣺²éѯÊÇÇø·Ö´óСдµÄ£¬ÔÚÎþÉüËٶȵÄÇé¿öÏ¿ÉÒÔÀûÓÃÕýÔò±í´ïʽ¡£
¶ÔÊäÈëµÄÊý¾ÝÎÞÈÝ´íÐÔ
µ±Äã³¢ÊÔÏò´«Í³Êý¾Ý¿â²åÈë´íÎóÀàÐ͵ÄÊý¾Ý£¬´«Í³µÄÊý¾Ý¿âÒ»°ã»á°ÑÊý¾Ýת»»³ÉÔ¤¶¨ÒåµÄÀàÐÍ¡£È»¶øÕâÔÚMongoDBÖÐÊÇÐв»Í¨µÄ£¬ÒòΪMongoDBµÄÎļþÊÇûÓÐÔ¤¶¨ÒåÊý¾ÝÄ£Ð͵ġ£ÕâÑùµÄ»°MongoDB»á²åÈëÄãÊäÈëµÄÈκÎÊý¾Ý¡£
×ܽ᣺ʹÓÃ׼ȷµÄÊý¾ÝÀàÐÍ¡£
¹ØÓÚËø
µ±×ÊÔ´±»´úÂëµÄ¶à¸ö²¿·ÖËù¹²Ïíʱ£¬ÐèҪȷÐÅËø±ØÐëҪȷ±£Õâ´¦×ÊÔ´Ö»ÄÜÔÚÒ»¸öµØ·½±»²Ù×÷¡£
¾É°æ±¾µÄMongoDB £¨pre 2.0£©ÓµÓÐÒ»¸öÈ«¾ÖµÄдÈëËø¡£Õâ¾ÍÒâζ¹á´©Õû¸ö·þÎñÆ÷ÖÐÖ»ÓÐÒ»¸öµØ·½×öд²Ù×÷¡£Õâ¾Í¿ÉÄܵ¼ÖÂÊý¾Ý¿âÒòΪij¸öµØ·½Ëø¶¨³¬¸ºÔضøÍ£ÖÍ¡£Õâ¸öÎÊÌâÔÚ2.0°æ±¾Öеĵõ½ÁËÏÔÖøµÄ¸ÄÉÆ£¬²¢ÇÒÔÚµ±Ç°2.2°æ±¾Öеõ½Á˽øÒ»²½µÄ¼ÓÇ¿¡£MongoDB 2.2ʹÓÃÊý¾Ý¿â¼¶±ðµÄËøÔÚÕâ¸öÎÊÌâÉÏÂõ½øÁËÒ»´ó²½¡£Í¬ÑùÖµµÃÆÚ´ýµÄCollection¼¶±ðµÄËøÒ²¼Æ»®ÔÚÏÂÒ»¸ö°æ±¾ÖÐÍÆ³ö¡£
¾¡¹ÜÈç´Ë£¬Russell»¹ÊÇÈÏΪ£º´ó¶àÊýÊÜ´ËÏÞÖÆµÄÓ¦ÓóÌÐòÓÚÆä˵ÊÇÊÜMongoDBÓ°Ï죬»¹²»Èç˵ÊdzÌÐò±¾ÉíµÄÎÊÌâÀ´µÄ¸üÖ±½Ó¡£
×ܽ᣺ʹÓÃ×îеÄÎȶ¨°æ±¾²ÅÄÜ»ñµÃ×î¸ßµÄÐÔÄÜ¡£
¹ØÓÚ°ü
ÔÚÀàUbuntuºÍDebianϵͳÉϰ²×°Ê±£¬Ðí¶àÈ˶¼³öÏÖ¹ý¡°¹ýʱ°æ±¾¡±ÕâÑùµÄÎÊÌâ¡£½â¾ö·½°¸ºÜ¼òµ¥£ºÊ¹ÓÃ10gen¹Ù·½¿â£¬ÄÇôÔÚUbuntuºÍDebianÉϰ²×°Ò²»áÏñÔÚFedoraºÍCentosÉϰ²×°Ò»ÑùÁ÷³©¡£
×ܽ᣺ʹÓÃÓµÓдó¶àÊý×îа汾µÄ¹Ù·½°ü¡£
ʹÓÃżÊý¸öReplica Set³ÉÔ±
Replica SetÊÇÔö¼ÓÈßÓ༰ÌáÉýMongoDBÊý¾Ý¼¯ÈºÐÔÄܵÄÓÐЧ;¾¶¡£Êý¾ÝÔÚËùÓеĽڵãÖб»¸´ÖÆ£¬²¢Ñ¡³öÒ»¸ö×÷ΪÖ÷½Úµã¡£¼ÙÈçÖ÷½Úµã³ö¹ÊÕÏ£¬ÄÇô»áÔÚÆäËûµÄ½ÚµãÖÐÆ±Ñ¡Ò»¸ö×÷ΪеÄÖ÷½Úµã¡£
ÔÚͬһ¸öReplica SetÖÐʹÓÃÁ½Ì¨»úÆ÷ÊǺÜÓÐÓÕ»óµÄ£¬Ëü±È3̨»úÆ÷À´µÄ±ãÒ˲¢ÇÒÒ²ÊÇRDBMSµÄ±ê×¼ÐÐÊ·ç¸ñ¡£
µ«Êǵ½ÁËMongoDBÕâÀͬһ¸öReplica SetÖеijÉÔ±ÊýÁ¿Ö»ÄÜÊÇÆæÊý¸ö¡£¼ÙÈçÄãʹÓÃÁËżÊý¸ö³ÉÔ±£¬ÄÇôµ±Ö÷½Úµã·¢Éú¹ÊÕÏʱÄÇôÆäËüµÄ½Úµã¶¼»á±ä³ÉÖ»¶Á¡£·¢ÉúÕâÖÖÇé¿öÊÇÒòΪʣÏ´ýÑ¡½ÚµãµÄÊýÄ¿²»Âú×ãÆ±Ñ¡Ö÷½ÚµãµÄ¹æ¶¨¡£
Èç¹ûÄãÏë½ÚÔ¼³É±¾£¬Í¬Ê±»¹Ï£ÍûÖ§³Ö¹ÊÕÏ×ªÒÆºÍÈßÓàµÄÔöÇ¿£¬ÄÇôÄã¿ÉÒÔʹÓÃArbiter¡£ArbiterÊÇÒ»ÖÖÌØÊâµÄReplica Set³ÉÔ±£¬Ëü²»´¢´æÈκÎÓû§Êý¾Ý£¨Õâ¾ÍÒâζ×ÅËûÃÇ¿ÉÒÔʹÓ÷dz£Ð¡µÄ·þÎñÆ÷£©¡£
×ܽ᣺ֻ¿ÉÒÔʹÓÃżÊý¸öReplica Set³ÉÔ±£¬µ«ÊÇ¿ÉÒÔʹÓÃArbitterÀ´Ï÷¼õ³É±¾¡£
ûÓÐjoinÓï¾ä
MongoDB²»Ö§³Öjoin£ºÈç¹ûÄãÏëÔÚ¶à¸öCollectionÖмìË÷Êý¾Ý£¬ÄÇôÄã±ØÐë×ö¶à´ÎµÄ²éѯ¡£
Èç¹ûÄã¾õµÃÄãÊÖ¶¯×öµÄ²éѯ̫¶àÁË£¬Äã¿ÉÒÔÖØÉè¼ÆÄãµÄÊý¾ÝÄ£ÐÍÀ´¼õÉÙÕûÌå²éѯµÄÊýÁ¿¡£MongoDBÖеÄÎļþ¿ÉÒÔÊÇÈκÎÀàÐÍ£¬ÄÇô¿ÉÒÔÇáÒ׵ĶÔÊý¾Ý½øÐÐDe-Normalize¡£ÕâÑù¾Í¿ÉÒÔÈÃËüʼÖÕºÍÄãµÄÓ¦ÓóÌÐò±£³ÖÒ»Ö¡£
×ܽ᣺ûÓÐjoin²»·Á¿´Ò»ÏÂÈçºÎÉè¼ÆÊý¾Ý½á¹¹Ä£ÐÍ¡£
Journaling
MongoDBʹÓÃÄÚ´æÓ³ÉäÎļþ²¢ÇÒÿ60ÃëÏò´ÅÅÌÊä³öÒ»´Î֪ͨ£¬Õâ¾ÍÒâζ×Å×î´ó³Ì¶ÈÉÏÄã¿ÉÄܶªÊ§60Ãë¼ÓÉÏÏòÓ²ÅÌÊä³ö֪ͨÕâ¶Îʱ¼äÄÚËùÓеÄÊý¾Ý¡£
ΪÁ˱ÜÃâÊý¾Ý¶ªÊ§£¬MongoDB´Ó2.0°æ±¾Æð¾ÍÌí¼ÓÁËJournaling£¨Ä¬ÈÏÇé¿öÏ¿ªÆô£©¡£Journaling°Ñʱ¼ä´Ó60Ãë¸ü¸ÄΪ100ms¡£Èç¹ûÊý¾Ý¿âÒâÍâµÄÍ£»ú£¬ÔÚÆô¶¯Ö®Ç°Ëü½«»á±»ÖØÆôÓÃÒÔÈ·±£Êý¾Ý¿â´¦ÓÚÒ»ÖÂ״̬¡£ÕâÒ²ÊÇMongoDBÓ봫ͳÊý¾Ý¿â×î½Ó½üµÄµØ·½¡£
µ±È»Journaling»áÇá΢µÄÓ°Ïìµ½ÐÔÄÜ£¬´óÔ¼5%¡£µ«ÊǶÔÓÚ¶àÊýÈËÀ´Ëµ¶îÍâ´øÀ´µÄ°²È«ÐԿ϶¨ÊÇÎïÓÐËùÖµµÄ¡£
×ܽ᣺×îºÃ±ð¹Ø±ÕJournaling¡£
ĬÈÏÇé¿öÏÂûÓÐÉí·ÝÈÏÖ¤
MongoDBÔÚĬÈÏÉèÖÃϲ¢Ã»ÓÐÉí·ÝÑéÖ¤¡£MongoDB»áÈÏΪ×ÔÉí´¦ÔÚÒ»¸öÓµÓзÀ»ðǽµÄÐÅÈÎÍøÂç¡£µ«ÊÇÕâ²»´ú±íËü²»Ö§³ÖÉí·ÝÑéÖ¤£¬Èç¹ûÐèÒª¿ÉÒÔÇáËɵĿªÆô¡£
×ܽ᣺MongoDBµÄ°²È«ÐÔ¿ÉÒÔͨ¹ýʹÓ÷À»ðǽºÍ°ó¶¨ÕýÈ·µÄ½Ó¿ÚÀ´±£Ö¤£¬µ±È»Ò²¿ÉÒÔ¿ªÆôÉí·ÝÑéÖ¤¡£
Replica SetÖÐËðʧµÄÊý¾Ý
ʹÓÃReplica SetÊÇÌá¸ßϵͳ¿É¿¿ÐÔ¼°Ò×ά»¤µÄÓÐЧ;¾¶¡£ÕâÑùµÄ»°£¬ÅªÇå½Úµã¼ä¹ÊÕϵķ¢Éú¼°×ªÒÆ»úÖÆ¾Í±äµÃÖÁ¹ØÖØÒª¡£
Replica SetÖеijÉÔ±Ò»°ãͨ¹ýoplog£¨¼Ç¼ÁËÊý¾ÝÖз¢ÉúÔö¡¢É¾¡¢¸ÄµÈ²Ù×÷µÄÁÐ±í£©À´´«µÝÐÅÏ¢£¬µ±ÆäÖÐÒ»¸ö³ÉÔ±·¢Éú±ä»¯ÐÞ¸Äoplogºó£¬ÆäËûµÄ³ÉÔ±Ò²½«°´ÕÕoplogÀ´Ö´ÐС£Èç¹ûÄ㸺Ôð´¦ÀíÐÂÊý¾ÝµÄ½ÚµãÔÚ³ö´íºó»Ö¸´ÔËÐУ¬Ëü½«»á±»»Ø¹öÖÁ×îºóÒ»¸öoplog¹«¹²µã¡£È»¶øÔÚÕâ¸ö¹ý³ÌÖУº¶ªÊ§µÄ¡°ÐÂÊý¾Ý¡±ÒѾ±»MongoDB´ÓÊý¾Ý¿âÖÐ×ªÒÆ²¢´æ·Åµ½ÄãµÄÊý¾ÝĿ¼¡®rollback¡¯ÀïÃæµÈ´ý±»ÊÖ¶¯»Ö¸´¡£Èç¹ûÄã²»ÖªµÀÕâ¸öÌØÐÔ£¬Äã¿ÉÄܾͻáÈÏΪÊý¾Ý±»Åª¶ªÁË¡£ËùÒÔÿµ±ÓгÉÔ±´Ó³ö´íÖлָ´¹ýÀ´¶¼±ØÐëÒª¼ì²éÕâ¸öĿ¼¡£¶øÍ¨¹ýMongoDB·¢²¼µÄ±ê×¼¹¤¾ßÀ´»Ö¸´ÕâЩÊý¾ÝÊǼþºÜÈÝÒ×µÄÊÂÇé¡£²é¿´¹Ù·½ÎĵµÒÔÁ˽â¸ü¶àÏà¹ØÐÅÏ¢¡£
×ܽ᣺¹ÊÕϻָ´ÖжªÊ§µÄÊý¾Ý½«»á³öÏÖÔÚrollbackĿ¼ÀïÃæ¡£
·ÖƬ̫³Ù
·ÖƬÊǰÑÊý¾Ý²ð·Öµ½¶ą̀»úÆ÷ÉÏ£¬Í¨³£±»ÓÃÓÚReplica SetÔËÐйýÂýʱ½øÐÐÐÔÄÜÌáÉý¡£MongoDBÖ§³Ö×Ô¶¯·ÖƬ¡£È»¶øÈç¹ûÄãÈÃ·ÖÆ¬½øÐÐÌ«³ÙµÄ»°£¬ÎÊÌâ¾Í²úÉúÁË¡£ÒòΪ¶ÔÊý¾ÝµÄ²ð·ÖºÍ¿éµÄÇ¨ÒÆÐèҪʱ¼äºÍ×ÊÔ´£¬ËùÒÔÈç¹ûµ±·þÎñÆ÷×ÊÔ´»ù±¾ÉϺľ¡Ê±ºÜ¿ÉÄܻᵼÖÂÔÚÄã×îÐèÒª·ÖƬʱȴ·Ö²»ÁËÆ¬¡£
½â¾öµÄ·½·¨ºÜ¼òµ¥£¬Ê¹ÓÃÒ»¸ö¹¤¾ß¶ÔMongoDB½øÐмàÊÓ¡£¶ÔÄãµÄ·þÎñÆ÷×ö×î׼ȷµÄÆÀ¹À£¬²¢ÇÒÔÚÕ¼ÕûÌåÐÔÄܵÄ80%ǰ½øÐÐ·ÖÆ¬¡£ÀàËÆµÄ¼àÊÓ¹¤¾ßÓУºMMS¡¢Munin£¨+Mongo Plugin£©ºÍCloudWatch¡£
Èç¹ûÄãÈ·¶¨´ÓÒ»¿ªÊ¼¾ÍÒª·ÖƬ´¦Àí£¬ÄÇô¸üºÃµÄ½¨Òé»áÊÇÑ¡ÓÃAWS»òÕßÀàËÆµÄÔÆ·þÎñ½øÐÐ·ÖÆ¬¡£¶øÔÚСÐÍ·þÎñÆ÷ÉÏ£¬¹Ø»ú»òÕßÊǵ÷Õû»úÆ÷Ã÷ÏÔ±È×ªÒÆ³ÉǧÉÏÍòÌõÊý¾Ý¿éÀ´µÄ¸üÖ±½ÓÒ»µã¡£
×ܽ᣺¾¡ÔçµÄ·ÖƬ²ÅÄÜÓÐЧµÄ±ÜÃâÎÊÌâ¡£
²»¿ÉÒÔ¸ü¸ÄÎļþÖеÄshard key
¶ÔÓÚ·ÖÆ¬ÉèÖã¬shard keyÊÇMongoDBÓÃÀ´Ê¶±ð·Ö¿é¶ÔÓ¦ÎļþµÄƾ֤¡£µ±Äã²åÈëÒ»¸öÎļþºó£¬Äã¾Í²»¿ÉÒÔ¶ÔÎļþµÄshard key½øÐиü¸Ä¡£¶øÕâÀïµÄ½â¾ö·½°¸ÊǰÑÎĵµÉ¾³ýÈ»ºóÖØÐ½¨Á¢£¬ÕâÑù¾ÍÔÊÐí°ÑËüÖ¸¶¨µ½¶ÔÓ¦µÄ·Ö¿éÁË¡£
×ܽ᣺shard key²»¿ÉÒÔÐ޸쬱ØÒªµÄʱºò¿ÉÒÔɾ³ýÎļþÖØÐ½¨Á¢¡£
²»¿ÉÒÔ¶Ô256GÒÔÉϵÄCollection½øÐÐ·ÖÆ¬
ÖØÐ»ص½·ÖƬ̫³ÙµÄÎÊÌâÉÏÀ´ ¡ª¡ª MongoDB²»ÔÊÐí¶ÔÔö³¤µ½256GÒÔÉϵÄCollection½øÐÐ·ÖÆ¬£¬Ö®Ç°°æ±¾µÄÉèÖû¹Ã»ÓÐ256G¡£Õâ¸öÏÞ¶¨ÔÚÒÔºó¿Ï¶¨»á±»ÒƳý£¬¶øÕâÀïҲûÓиüºÃµÄ½â¾ö·½°¸¡£Ö»ÄܽøÐÐÖØ±àÒë»òÕß°Ñ´óС¿ØÖÆÔÚ256GÒÔÏ¡£
×ܽ᣺ÔÚCollection´ïµ½256GÒÔǰ½øÐÐ·ÖÆ¬¡£
ΨһÐÔË÷ÒýÓë¹²Ïí
Ë÷ÒýµÄΨһÐÔÔ¼ÊøÖ»ÄÜͨ¹ýshard keyÀ´±£Ö¤¡£
Ñ¡ÔñÁË´íÎóµÄshard key
MongDBÐèÒªÄãÑ¡ÔñÒ»¸öshard keyÀ´½«Êý¾Ý·ÖƬ¡£Èç¹ûÑ¡ÔñÁË´íÎóµÄshard key,¸ü¸ÄÆðÀ´½«ÊǼþºÜÂé·³µÄÊÂÇé¡£
×ܽ᣺ѡÔñshard key֮ǰÏÈÔĶÁÕâ¸öÎĵµ¡£
ÓëMongoDBͨÐŵÄδ¾¼ÓÃÜ
ÓëMongoDBµÄÁ¬½ÓĬÈÏÇé¿ö϶¼ÊǷǼÓÃܵģ¬Õâ¾ÍÒâζÄãµÄÊý¾Ý¿ÉÄܱ»µÚÈý·½¼Ç¼ºÍʹÓá£Èç¹ûÄãµÄMongoDBÊÇÔÚ×Ô¼ºµÄ·Ç¹ãÓòÍøÏÂʹÓã¬ÄÇôÕâÖÖÇé¿öÊDz»¿ÉÄÜ·¢ÉúµÄ¡£
È»¶øÈç¹ûÄãÊÇͨ¹ý¹«Íø·ÃÎÊMongoDBµÄ»°£¬ÄÇôÄã¿Ï¶¨»áÏ£ÍûÄãµÄͨÐÅÊǾ¹ý¼ÓÃܵġ£¹«°æµÄMongoDBÊDz»Ö§³ÖSSLµÄ¡£ÇìÐÒµÄÊÇ¿ÉÒԷdz£¼òµ¥µÄ¶¨ÖÆ×Ô¼ºµÄ°æ±¾¡£10genµÄÓû§ÔòÓµÓÐÌØ±ð¶¨ÖƵļÓÃܰ汾¡£ÐÒÔ˵ÄÊǴ󲿷ֵĹٷ½Çý¶¯¶¼Ö§³ÖSSL£¬µ«ÊÇСÂ鷳ͬÑùÊDz»¿É±ÜÃâµÄ¡£µã»÷²é¿´Îĵµ¡£
×ܽ᣺µ±Óù«ÍøÁ¬½Óʱ£¬Òª×¢ÒâºÍMongoDBµÄͨÐÅÊÇδ¼ÓÃܵġ£
ÊÂÎñ
²»ÏñMySQLÕâЩ֧³Ö¶àÐÐÊý¾ÝÔ×Ó²Ù×÷µÄ´«Í³Êý¾Ý¿â£¬MongoDBÖ»Ö§³Öµ¥ÎļþµÄÔ×ÓÐÔÐ޸ġ£½â¾öÕâ¸öÎÊÌâµÄ·½·¨Ö®Ò»ÊÇÔÚÓ¦ÓóÌÐòÖÐʹÓÃÒì²½Ìá½»µÄ·½Ê½£»ÁíÒ»¸öÊÇ£º½¨Á¢Ò»¸öÒÔÉϵÄÊý¾Ý´æ´¢¡£ËäÈ»µÚÒ»ÖÖ·½·¨²¢²»ÊÊÓÃÓÚËùÓÐÇé¿ö£¬µ«ÊǺÜÏÔÈ»±ÈµÚ¶þ¸öÀ´µÄÒªºÃ¡£
×ܽ᣺²»Ö§³Ö¶Ô¶àÎļþÊÂÎñ¡£
ÈÕÖ¾Ô¤·ÖÅäÂý
MongDB¿ÉÄÜ»á¸æËßÄãÒѾ׼±¸¾ÍÐ÷£¬µ«ÊÂʵÉÏËü»¹ÔÚ¶ÔÈÕÖ¾½øÐзÖÅä¡£Èç¹ûÄãÑ¡ÔñÁËÈûúÆ÷×ÔÐзÖÅ䣬¶øÇ¡ÇÉÄãµÄÎļþϵͳºÍ´ÅÅÌËÙ¶ÈÓÖºÜÂý£¬ÄÇô·³ÄÕµÄÊÂÇé·¢ÉúÁË¡£Í¨³£Çé¿öÏÂÕâ²»»á³ÉΪÎÊÌ⣬µ«ÊÇÒ»µ©³öÏÖÁË¿ÉÒÔʹÓÃundocumented flag ¨CnopreallocjÀ´¹Ø±ÕÔ¤·ÖÅä¡£
×ܽ᣺Èç¹û»úÆ÷ÎļþϵͳºÍ´ÅÅ̹ýÂýµÄ»°£¬ÄÇôÈÕÖ¾µÄÔ¤·ÖÅäÒ²¿ÉÄܺÜÂý¡£
NUMA + Linux +MongoDB
Linux¡¢NUMAÓëMongoDBÓöµ½Ò»ÆðµÄʱºòÔËÐÐ×ÜÊDz»»áºÜºÃ¡£Èç¹ûÄãÔÚNUMAÓ²¼þÉÏÔËÐÐMongoDBµÄ»°£¬ÕâÀィÒéÊÇÖ±½Ó¹Øµô¡£ÒòΪ¸÷ÖÖÆæ¹ÖµÄÎÊÌâËæÖ®¶øÀ´£¬±ÈÈ磺ËÙ¶È»á½×¶ÎÐÔ»òÕßÔÚCPUÕ¼ÓÃÂʺܸߵÄʱºò´ó·ùϽµ¡£
×ܽ᣺½ûNUMA¡£
LinuxÀïÃæµÄ½ø³ÌÏÞÖÆ
Èç¹ûÄãÔÚMongoDBδÂúÔØµÄʱºò³ö¹ýSEGMENTATION FAULT´íÎó£¬Äã¿ÉÄܻᷢÏÖÕâÊÇÒòΪʹÓÃÁ˹ýµÍ»òÕßĬÈϵĴò¿ªÎļþ»òÓû§½ø³ÌÏÞÖÆ¡£10gen½¨Òé°ÑÏÞÖÆÉèÖÃÔÚ4K+£¬È»¶øÉèÖõĴóС¸ÃÈ¡¾ö¾ßÌåÇé¿ö¡£ÔĶÁulimitÁ˽â¸ü¶à¡£
×ܽ᣺³¤¾ÃµÄΪMongoDBÔÚLinux¼ÓÉÏÈí»òÓ²µÄ´ò¿ªÎļþ»òÓû§½ø³ÌÏÞÖÆ¡£
|