Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
MongoDBÓ¦Óð¸Àý£ºÊ¹Óà MongoDB ´æ´¢ÈÕÖ¾Êý¾Ý
 
 À´Ô´£ºyq.aliyun.com ·¢²¼ÓÚ 2017-2-13
  3284  次浏览      27
 

ÏßÉÏÔËÐеķþÎñ»á²úÉú´óÁ¿µÄÔËÐм°·ÃÎÊÈÕÖ¾£¬ÈÕÖ¾Àï»á°üº¬Ò»Ð©´íÎó¡¢¾¯¸æ¡¢¼°Óû§ÐÐΪµÈÐÅÏ¢£¬Í¨³£·þÎñ»áÒÔÎı¾µÄÐÎʽ¼Ç¼ÈÕÖ¾ÐÅÏ¢£¬ÕâÑù¿É¶ÁÐÔÇ¿£¬·½±ãÓÚÈÕ³£¶¨Î»ÎÊÌ⣬µ«µ±²úÉú´óÁ¿µÄÈÕÖ¾Ö®ºó£¬ÒªÏë´Ó´óÁ¿ÈÕÖ¾ÀïÍÚ¾ò³öÓмÛÖµµÄÄÚÈÝ£¬ÔòÐèÒª¶ÔÊý¾Ý½øÐнøÒ»²½µÄ´æ´¢ºÍ·ÖÎö¡£

±¾ÎÄÒÔ´æ´¢ web ·þÎñµÄ·ÃÎÊÈÕ־ΪÀý£¬½éÉÜÈçºÎʹÓà MongoDB À´´æ´¢¡¢·ÖÎöÈÕÖ¾Êý¾Ý£¬ÈÃÈÕÖ¾Êý¾Ý·¢»Ó×î´óµÄ¼ÛÖµ£¬±¾ÎĵÄÄÚÈÝͬÑùʹÓÃÆäËûµÄÈÕÖ¾´æ´¢ÐÍÓ¦Óá£

ģʽÉè¼Æ

Ò»¸öµäÐ͵Äweb·þÎñÆ÷µÄ·ÃÎÊÈÕÖ¾ÀàËÆÈçÏ£¬°üº¬·ÃÎÊÀ´Ô´¡¢Óû§¡¢·ÃÎʵÄ×ÊÔ´µØÖ·¡¢·ÃÎʽá¹û¡¢Óû§Ê¹ÓõÄϵͳ¼°ä¯ÀÀÆ÷ÀàÐ͵È

127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "
GET /apache_pb.gif HTTP/1.0" 200 2326 "
[http://www.example.com/start.html]
(http://www.example.com/start.html)"
"Mozilla/4.08 [en] (Win98; I ;Nav)"

×î¼òµ¥´æ´¢ÕâЩÈÕÖ¾µÄ·½·¨ÊÇ£¬½«Ã¿ÐÐÈÕÖ¾´æ´¢ÔÚÒ»¸öµ¥¶ÀµÄÎĵµÀÿÐÐÈÕÖ¾ÔÚMongoDBÀïÀàËÆ

{
_id: ObjectId('4f442120eb03305789000000'),
line: '127.0.0.1 - frank
[10/Oct/2000:13:55:36 -0700]
"GET /apache_pb.gif
HTTP/1.0" 200 2326 "
[http://www.example.com/start.html]
(http://www.example.com/start.html)"
"Mozilla/4.08 [en] (Win98; I ;Nav)"'
}

ÉÏÊöģʽËäÈ»Äܽâ¾öÈÕÖ¾´æ´¢µÄÎÊÌ⣬µ«Ê¹µÃÕâЩÊý¾Ý·ÖÎöÆðÀ´±È½ÏÂé·³£¬ÒòΪÎı¾·ÖÎö²¢²»ÊÇMongoDBËùÉó¤µÄ£¬¸üºÃµÄ°ì·¨Ê±£¬ÔÚ°ÑÒ»ÐÐÈÕÖ¾´æ´¢µ½MongoDBµÄÎĵµÀïǰ£¬ÏÈÌáÈ¡³ö¸÷¸ö×ֶεÄÖµ£¬ÈçÏÂËùʾ£¬ÉÏÊöµÄÈÕÖ¾±»×ª»»ÎªÒ»¸ö°üº¬ºÜ¶à¸ö×ֶεÄÎĵµ¡£

{
_id: ObjectId('4f442120eb03305789000000'),
host: "127.0.0.1",
logname: null,
user: 'frank',
time: ISODate("2000-10-10T20:55:36Z"),
path: "/apache_pb.gif",
request: "GET /apache_pb.gif HTTP/1.0",
status: 200,
response_size: 2326,
referrer: "[http://www.example.com/start.html]
(http://www.example.com/start.html)",
user_agent: "Mozilla/4.08 [en] (Win98; I ;Nav)"
}

ͬʱ£¬ÔÚÕâ¸ö¹ý³ÌÖУ¬Èç¹ûÄã¾õµÃÓÐЩ×ֶζÔÊý¾Ý·ÖÎöûÓÐÈκΰïÖú£¬Ôò¿ÉÒÔÖ±½Ó¹ýÂ˵ô£¬ÒÔ¼õÉÙ´æ´¢ÉϵÄÏûºÄ£¬±ÈÈç

Êý¾Ý·ÖÎö²»»á¹ØÐÄuserÐÅÏ¢¡¢request¡¢statusÐÅÏ¢£¬Õ⼸¸ö×Ö¶Îû±ØÒª´æ´¢

ObjectIdÀï±¾Éí°üº¬ÁËʱ¼äÐÅÏ¢£¬Ã»±ØÒªÔÙµ¥¶À´æ´¢Ò»¸ötime×Ö¶Î (µ±È»´øÉÏtimeÒ²Óкô¦£¬time¸üÄÜ´ú±íÇëÇó²úÉúµÄʱ¼ä£¬¶øÇÒ²éѯÓï¾äдÆðÀ´¸ü·½±ã£¬¾¡Á¿Ñ¡Ôñ´æ´¢¿Õ¼äÕ¼ÓÃСµÄÊý¾ÝÀàÐÍ£©

»ùÓÚÉÏÊö¿¼ÂÇ£¬Ò»ÐÐÈÕÖ¾×îÖÕ´æ´¢µÄÄÚÈÝ¿ÉÄÜÀàËÆÈçÏÂ

{
_id: ObjectId('4f442120eb03305789000000'),
host: "127.0.0.1",
time: ISODate("2000-10-10T20:55:36Z"),
path: "/apache_pb.gif",
referer: "[http://www.example.com/start.html]
(http://www.example.com/start.html)",
user_agent: "Mozilla/4.08 [en] (Win98; I ;Nav)"
}

дÈÕÖ¾

ÈÕÖ¾´æ´¢·þÎñÐèÒªÄÜͬʱ֧³Ö´óÁ¿µÄÈÕ־дÈ룬Óû§¿ÉÒÔ¶¨ÖÆ writeConcern À´¿ØÖÆÈÕ־дÈëÄÜÁ¦,ÃÍ»÷ÕâÀïÏêϸÁ˽âwriteConcern

db.events.insert({
host: "127.0.0.1",
time: ISODate("2000-10-10T20:55:36Z"),
path: "/apache_pb.gif",
referer: "[http://www.example.com/start.html]
(http://www.example.com/start.html)",
user_agent: "Mozilla/4.08 [en] (Win98; I ;Nav)"
}
)

Èç¹ûÒªÏë´ïµ½×î¸ßµÄдÈëÍÌÍ£¬¿ÉÒÔÖ¸¶¨ writeConcern Ϊ {w: 0}

¶øÈç¹ûÈÕÖ¾µÄÖØÒªÐԱȽϸߣ¨±ÈÈçÐèÒªÓÃÈÕÖ¾À´×÷Ϊ¼Æ·Ñƾ֤£©£¬Ôò¿ÉÒÔʹÓøü°²È«µÄwriteConcern¼¶±ð£¬±ÈÈç {w: 1} »ò {w: "majority"}

ͬʱ£¬ÎªÁË´ïµ½×îÓŵÄдÈëЧÂÊ£¬Óû§»¹¿ÉÒÔ¿¼ÂÇÅúÁ¿µÄдÈ뷽ʽ£¬Ò»´ÎÍøÂçÇëÇóдÈë¶àÌõÈÕÖ¾¡£

db.events.insert([doc1, doc2, ...])

²éѯÈÕÖ¾

µ±ÈÕÖ¾°´ÉÏÊö·½Ê½´æ´¢µ½ MongoDB ºó£¬¾Í¿ÉÒÔÂú×ã¸÷ÖÖ²éѯÐèÇó

²éѯËùÓзÃÎÊ /apache_pb.gif µÄÇëÇó

q_events = db.events.find({'path': '/apache_pb.gif'})

Èç¹ûÕâÖÖ²éѯ·Ç³£Æµ·±£¬¿ÉÒÔÕë¶Ôpath×ֶν¨Á¢Ë÷Òý£¬ÒÔ¸ßЧµÄ·þÎñÕâÀà²éѯ

db.events.createIndex({path: 1})

²éѯijһÌìµÄËùÓÐÇëÇó

q_events = db.events.find
({'time': { '$gte': ISODate("2016-12-19T00:00:00.00Z"),
'$lt': ISODate("2016-12-20T00:00:00.00Z")}})

ͨ¹ý¶Ôtime×ֶν¨Á¢Ë÷Òý£¬¿É¼ÓËÙÕâÀà²éѯ

 db.events.createIndex({time: 1})

²éѯij̨Ö÷»úÒ»¶Îʱ¼äÄÚµÄËùÓÐÇëÇó

q_events = db.events.find({
'host': '127.0.0.1',
'time': {'$gte': ISODate("2016-12-19T00:00:00.00Z"),
'$lt': ISODate("2016-12-20T00:00:00.00Z" }})

ͨ¹ý¶Ôhost¡¢time½¨Á¢¸´ºÏË÷Òý¿ÉÒÔ¼ÓËÙÕâÀà²éѯ

db.events.createIndex({host: 1, time: 1})

ͬÑù£¬Óû§»¹¿ÉÒÔʹÓÃMongoDBµÄaggregation¡¢mapreduce¿ò¼ÜÀ´×öһЩ¸ü¸´ÔӵIJéѯ·ÖÎö£¬ÔÚʹÓÃʱӦ¸Ã¾¡Á¿½¨Á¢ºÏÀíµÄË÷ÒýÒÔÌáÉý²éѯЧÂÊ¡£

Êý¾Ý·ÖƬ

µ±Ð´ÈÕÖ¾µÄ·þÎñ½ÚµãÔ½À´Ô½¶àʱ£¬ÈÕÖ¾´æ´¢µÄ·þÎñÐèÒª±£Ö¤¿ÉÀ©Õ¹µÄÈÕ־дÈëÄÜÁ¦ÒÔ¼°º£Á¿µÄÈÕÖ¾´æ´¢ÄÜÁ¦£¬Õâʱ¾ÍÐèҪʹÓÃMongoDB shardingÀ´À©Õ¹£¬½«ÈÕÖ¾Êý¾Ý·ÖÉ¢´æ´¢µ½¶à¸öshard£¬¹Ø¼üµÄÎÊÌâ¾ÍÊÇshard keyµÄÑ¡Ôñ¡£

°´Ê±¼ä´Á×Ö¶Î·ÖÆ¬

Ò»ÖÖ¼òµ¥µÄ·½Ê½ÊÇʹÓÃʱ¼ä´ÁÀ´½øÐÐ·ÖÆ¬£¨ÈçObjectIdÀàÐ͵Ä_id£¬»òÕßtime×ֶΣ©£¬ÕâÖÖ·ÖÆ¬·½Ê½´æÔÚÈçÏÂÎÊÌâ

ÒòΪʱ¼ä´Áһֱ˳ÐòÔö³¤µÄÌØÐÔ£¬ÐµÄдÈë¶¼»á·Öµ½Í¬Ò»¸öshard£¬²¢²»ÄÜÀ©Õ¹ÈÕ־дÈëÄÜÁ¦

ºÜ¶àÈÕÖ¾²éѯÊÇÕë¶Ô×îеÄÊý¾Ý£¬¶ø×îеÄÊý¾Ýͨ³£Ö»·ÖÉ¢ÔÚ²¿·ÖshardÉÏ£¬ÕâÑùµ¼Ö²éѯҲֻ»áÂäµ½²¿·Öshard

°´Ëæ»ú×Ö¶Î·ÖÆ¬

°´ÕÕ_id×Ö¶ÎÀ´½øÐÐhash·ÖƬ£¬Äܽ«Êý¾ÝÒÔ¼°Ð´Èë¶¼¾ùÔȶ¼·ÖÉ¢µ½¸÷¸öshard£¬Ð´ÈëÄÜÁ¦»áËæshardÊýÁ¿ÏßÐÔÔö³¤£¬µ«¸Ã·½°¸µÄÎÊÌâʱ£¬Êý¾Ý·ÖÉ¢ºÁÎÞ¹æÂÉ£¬ËùÓеķ¶Î§²éѯ£¨Êý¾Ý·ÖÎö¾­³£ÐèÒªÓõ½£©¶¼ÐèÒªÔÚËùÓеÄshardÉϽøÐвéÕÒÈ»ºóºÏ²¢²éѯ½á¹û£¬Ó°Ïì²éѯЧÂÊ¡£

°´¾ùÔÈ·Ö²¼µÄkey·ÖƬ

¼ÙÉèÉÏÊö³¡¾°Àï path ×ֶεķֲ¼ÊDZȽϾùÔȵ쬶øÇҺܶà²éѯ¶¼Êǰ´pathά¶ÈÈ¥»®·ÖµÄ£¬ÄÇô¿ÉÒÔ¿¼Âǰ´ÕÕpath×ֶζÔÈÕÖ¾Êý¾Ý½øÐÐ·ÖÆ¬£¬ºÃ´¦ÊÇ

дÇëÇó»á±»¾ù·Öµ½¸÷¸öshard

Õë¶ÔpathµÄ²éѯÇëÇó»á¼¯ÖÐÂ䵽ij¸ö£¨»ò¶à¸ö£©shard£¬²éѯЧÂʸß

²»×ãµÄµØ·½ÊÇ

Èç¹ûij¸öpath·ÃÎÊÌØ±ð¶à£¬»áµ¼Öµ¥¸öchunkÌØ±ð´ó£¬Ö»ÄÜ´æ´¢µ½µ¥¸öshard£¬ÈÝÒ׳öÏÖ·ÃÎÊÈȵã

Èç¹ûpathµÄȡֵºÜÉÙ£¬Ò²»áµ¼ÖÂÊý¾Ý²»Äܺܺõķֲ¼µ½¸÷¸öshard

µ±È»ÉÏÊö²»×ãµÄµØ·½Ò²Óа취¸Ä½ø£¬·½·¨ÊǸø·ÖƬkeyÀïÒýÈëÒ»¸ö¶îÍâµÄÒò×Ó,±ÈÈçÔ­À´µÄshard keyÊÇ {path: 1}£¬ÒýÈë¶îÍâµÄÒò×Óºó±ä³É

{path: 1, ssk: 1} ÆäÖÐssk¿ÉÒÔÊÇÒ»¸öËæ»úÖµ£¬
±ÈÈç_idµÄhashÖµ£¬»òÊÇʱ¼ä´Á
ÕâÑùÏàͬµÄpath»¹ÊǸù¾Ýʱ¼äÅÅÐòµÄ

ÕâÑù×öµÄЧ¹ûÊÇ·ÖÆ¬keyµÄȡֵ·Ö²¼·á¸»£¬²¢ÇÒ²»»á³öÏÖµ¥¸öÖµÌØ±ð¶àµÄÇé¿ö¡£

ÉÏÊö¼¸ÖÖ·ÖÆ¬·½Ê½¸÷ÓÐÓÅÁÓ£¬Óû§¿ÉÒÔ¸ù¾Ýʵ¼ÊÐèÇóÀ´Ñ¡Ôñ·½°¸¡£

Ó¦¶ÔÊý¾ÝÔö³¤

·ÖƬµÄ·½°¸ÄÜÌṩº£Á¿µÄÊý¾Ý´æ´¢Ö§³Ö£¬µ«Ëæ×ÅÊý¾ÝÔ½À´Ô½¶à£¬´æ´¢µÄ³É±¾»á²»¶ÏµÄÉÏÉý£¬¶øÍ¨³£ºÜ¶àÈÕÖ¾Êý¾ÝÓиöÌØÐÔ£¬ÈÕÖ¾Êý¾ÝµÄ¼ÛÖµËæÊ±¼äµÝ¼õ£¬±ÈÈç1Äêǰ¡¢ÉõÖÁ3¸öÔÂǰµÄÀúÊ·Êý¾ÝÍêȫûÓзÖÎö¼ÛÖµ£¬Õⲿ·Ö¿ÉÒÔ²»Óô洢£¬ÒÔ½µµÍ´æ´¢³É±¾£¬¶øÔÚMongoDBÀïÓкܶ෽·¨Ö§³ÖÕâÒ»ÐèÇó¡£

TTL Ë÷Òý

MongoDB µÄTTLË÷Òý ¿ÉÒÔÖ§³ÖÎĵµÔÚÒ»¶¨Ê±¼äÖ®ºó×Ô¶¯¹ýÆÚɾ³ý£¬ÀýÈçÉÏÊöÈÕÖ¾time×ֶδú±íÁËÇëÇó²úÉúµÄʱ¼ä£¬Õë¶Ô¸Ã×ֶν¨Á¢Ò»¸öTTLË÷Òý£¬ÔòÎĵµ»áÔÚ30Ììºó×Ô¶¯±»É¾³ý¡£

db.events.createIndex( { time: 1 }, { expireAfterSeconds: 108000 } )

TTL Ë÷ÒýĿǰÊǺǫ́µ¥Ïß³ÌÀ´¶¨ÆÚ£¨Ä¬ÈÏ60sÒ»´Î£©È¥É¾³ýÒѹýÆÚµÄÎĵµ£¬Èç¹ûдÈëºÜ¶à£¬µ¼Ö»ýÀÛÁË´óÁ¿´ý¹ýÆÚµÄÎĵµ£¬Ôò»áµ¼ÖÂÎĵµ¹ýÆÚÒ»Ö±¸ú²»É϶øÒ»Ö±Õ¼ÓÃ×Å´æ´¢¿Õ¼ä¡£

ʹÓÃCapped¼¯ºÏ

Èç¹û¶ÔÈÕÖ¾±£´æµÄʱ¼äûÓÐÌØ±ðÑϸñµÄÒªÇó£¬Ö»ÊÇÔÚ×ܵĴ洢¿Õ¼äÉÏÓÐÏÞÖÆ£¬Ôò¿ÉÒÔ¿¼ÂÇʹÓÃcapped collectionÀ´´æ´¢ÈÕÖ¾Êý¾Ý£¬Ö¸¶¨Ò»¸ö×î´óµÄ´æ´¢¿Õ¼ä»òÎĵµÊýÁ¿£¬µ±´ïµ½ãÐֵʱ£¬MongoDB»á×Ô¶¯É¾³ýcapped collectionÀï×îÀϵÄÎĵµ¡£

db.createCollection("event", {capped: true, size: 104857600000}

¶¨ÆÚ°´¼¯ºÏ»òDB¹éµµ

±ÈÈçÿµ½Ôµ׾ͽ«events¼¯ºÏ½øÐÐÖØÃüÃû£¬Ãû×ÖÀï´øÉϵ±Ç°µÄÔ·ݣ¬È»ºó´´½¨ÐµÄevents¼¯ºÏÓÃÓÚдÈ룬±ÈÈç2016ÄêµÄÈÕÖ¾×îÖջᱻ´æ´¢ÔÚÈçÏÂ12¸ö¼¯ºÏÀï

events-201601
events-201602
events-201603
events-201604
....
events-201612

µ±ÐèÒªÇåÀíÀúÊ·Êý¾Ýʱ£¬Ö±½Ó½«¶ÔÓ¦µÄ¼¯ºÏɾ³ýµô

 db["events-201601"].drop()
db["events-201602"].drop()

²»×㵽ʱºò£¬Èç¹ûÒª²éѯ¶à¸öÔ·ݵÄÊý¾Ý£¬²éѯµÄÓï¾ä»áÉÔ΢¸´ÔÓЩ£¬ÐèÒª´Ó¶à¸ö¼¯ºÏÀï²éѯ½á¹ûÀ´ºÏ²¢

   
3284 ´Îä¯ÀÀ       27
 
Ïà¹ØÎÄÕÂ

ÔÆ¼ÆËãµÄ¼Ü¹¹
¶ÔÔÆ¼ÆËã·þÎñÄ£ÐÍ
ÔÆ¼ÆËãºËÐļ¼ÊõÆÊÎö
Á˽âÔÆ¼ÆËãµÄ©¶´
 
Ïà¹ØÎĵµ

ÔÆ¼ÆËã¼ò½é
ÔÆ¼ÆËã¼ò½éÓëÔÆ°²È«
ÏÂÒ»´úÍøÂç¼ÆËã--ÔÆ¼ÆËã
ÈídzÎöÔÆ¼ÆËã
 
Ïà¹Ø¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
ÔÆ¼ÆËãÓ¦ÓÃÓ뿪·¢
CMMIÌåϵÓëʵ¼ù
»ùÓÚCMMI±ê×¼µÄÈí¼þÖÊÁ¿±£Ö¤
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

ר¼ÒÊӽǿ´ITÓë¼Ü¹¹
Èí¼þ¼Ü¹¹Éè¼Æ
ÃæÏò·þÎñÌåϵ¼Ü¹¹ºÍÒµÎñ×é¼þµÄ˼¿¼
ÈËÈËÍøÒÆ¶¯¿ª·¢¼Ü¹¹
¼Ü¹¹¸¯»¯Ö®ÃÕ
̸ƽ̨¼´·þÎñPaaS
Ïà¹ØÅàѵ¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
Windows Azure ÔÆ¼ÆËãÓ¦ÓÃ

ĦÍÐÂÞÀ­ ÔÆÆ½Ì¨µÄ¹¹½¨ÓëÓ¦ÓÃ
ͨÓù«Ë¾GE DockerÔ­ÀíÓëʵ¼ù
ijÑз¢ÖÐÐÄ Openstackʵ¼ù
ÖªÃûµç×Ó¹«Ë¾ ÔÆÆ½Ì¨¼Ü¹¹ÓëÓ¦ÓÃ
ijµçÁ¦ÐÐÒµ »ùÓÚÔÆÆ½Ì¨¹¹½¨ÔÆ·þÎñ
ÔÆ¼ÆËãÓëWindows AzureÅàѵ
±±¾© ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ