·½°¸2£ºÒ»°ãqueryµÄ×ÜÁ¿ÊÇÓÐÏ޵ģ¬Ö»ÊÇÖØ¸´µÄ´ÎÊý±È½Ï¶à¶øÒÑ£¬¿ÉÄܶÔÓÚËùÓеÄquery£¬Ò»´ÎÐԾͿÉÒÔ¼ÓÈëµ½ÄÚ´æÁË¡£ÕâÑù£¬ÎÒÃǾͿÉÒÔ²ÉÓÃtrieÊ÷/hash_mapµÈÖ±½ÓÀ´Í³¼ÆÃ¿¸öquery³öÏֵĴÎÊý£¬È»ºó°´³öÏÖ´ÎÊý×ö¿ìËÙ/¶Ñ/¹é²¢ÅÅÐò¾Í¿ÉÒÔÁË¡£
·½°¸3£ºÓë·½°¸1ÀàËÆ£¬µ«ÔÚ×öÍêhash£¬·Ö³É¶à¸öÎļþºó£¬¿ÉÒÔ½»¸ø¶à¸öÎļþÀ´´¦Àí£¬²ÉÓ÷ֲ¼Ê½µÄ¼Ü¹¹À´´¦Àí£¨±ÈÈçMapReduce£©£¬×îºóÔÙ½øÐкϲ¢¡£
6¡¢¸ø¶¨a¡¢bÁ½¸öÎļþ£¬¸÷´æ·Å50ÒÚ¸öurl£¬Ã¿¸öurl¸÷Õ¼64×Ö½Ú£¬ÄÚ´æÏÞÖÆÊÇ4G£¬ÈÃÄãÕÒ³öa¡¢bÎļþ¹²Í¬µÄurl£¿
¿ÉÒÔ¹À¼ÆÃ¿¸öÎļþ°²µÄ´óСΪ5G¡Á64=320G£¬Ô¶Ô¶´óÓÚÄÚ´æÏÞÖÆµÄ4G¡£ËùÒÔ²»¿ÉÄܽ«ÆäÍêÈ«¼ÓÔØµ½ÄÚ´æÖд¦Àí¡£¿¼ÂDzÉÈ¡·Ö¶øÖÎÖ®µÄ·½·¨¡£
- ·Ö¶øÖÎÖ®/hashÓ³É䣺±éÀúÎļþa£¬¶Ôÿ¸öurlÇóÈ¡
£¬È»ºó¸ù¾ÝËùÈ¡µÃµÄÖµ½«url·Ö±ð´æ´¢µ½1000¸öСÎļþ£¨¼ÇΪ
£©ÖС£ÕâÑùÿ¸öСÎļþµÄ´óԼΪ300M¡£±éÀúÎļþb£¬²ÉÈ¡ºÍaÏàͬµÄ·½Ê½½«url·Ö±ð´æ´¢µ½1000СÎļþÖУ¨¼ÇΪ
£©¡£ÕâÑù´¦Àíºó£¬ËùÓпÉÄÜÏàͬµÄurl¶¼ÔÚ¶ÔÓ¦µÄСÎļþ£¨
£©ÖУ¬²»¶ÔÓ¦µÄСÎļþ²»¿ÉÄÜÓÐÏàͬµÄurl¡£È»ºóÎÒÃÇÖ»ÒªÇó³ö1000¶ÔСÎļþÖÐÏàͬµÄurl¼´¿É¡£
- hashͳ¼Æ£ºÇóÿ¶ÔСÎļþÖÐÏàͬµÄurlʱ£¬¿ÉÒÔ°ÑÆäÖÐÒ»¸öСÎļþµÄurl´æ´¢µ½hash_setÖС£È»ºó±éÀúÁíÒ»¸öСÎļþµÄÿ¸öurl£¬¿´ÆäÊÇ·ñÔڸղʹ½¨µÄhash_setÖУ¬Èç¹ûÊÇ£¬ÄÇô¾ÍÊ**²Í¬µÄurl£¬´æµ½ÎļþÀïÃæ¾Í¿ÉÒÔÁË¡£
OK£¬´ËµÚÒ»ÖÖ·½·¨£º·Ö¶øÖÎÖ®/hashÓ³Éä + hashͳ¼Æ + ¶Ñ/¿ìËÙ/¹é²¢ÅÅÐò£¬ÔÙ¿´×îºó4µÀÌ⣬ÈçÏ£º
7¡¢ÔõôÔÚº£Á¿Êý¾ÝÖÐÕÒ³öÖØ¸´´ÎÊý×î¶àµÄÒ»¸ö£¿
·½°¸1£ºÏÈ×öhash£¬È»ºóÇóÄ£Ó³ÉäΪСÎļþ£¬Çó³öÿ¸öСÎļþÖÐÖØ¸´´ÎÊý×î¶àµÄÒ»¸ö£¬²¢¼ÇÂ¼ÖØ¸´´ÎÊý¡£È»ºóÕÒ³öÉÏÒ»²½Çó³öµÄÊý¾ÝÖÐÖØ¸´´ÎÊý×î¶àµÄÒ»¸ö¾ÍÊÇËùÇ󣨾ßÌå²Î¿¼Ç°ÃæµÄÌ⣩¡£
8¡¢ÉÏǧÍò»òÉÏÒÚÊý¾Ý£¨ÓÐÖØ¸´£©£¬Í³¼ÆÆäÖгöÏÖ´ÎÊý×î¶àµÄÇ®N¸öÊý¾Ý¡£
·½°¸1£ºÉÏǧÍò»òÉÏÒÚµÄÊý¾Ý£¬ÏÖÔڵĻúÆ÷µÄÄÚ´æÓ¦¸ÃÄÜ´æÏ¡£ËùÒÔ¿¼ÂDzÉÓÃhash_map/ËÑË÷¶þ²æÊ÷/ºìºÚÊ÷µÈÀ´½øÐÐͳ¼Æ´ÎÊý¡£È»ºó¾ÍÊÇÈ¡³öǰN¸ö³öÏÖ´ÎÊý×î¶àµÄÊý¾ÝÁË£¬¿ÉÒÔÓõÚ2ÌâÌáµ½µÄ¶Ñ»úÖÆÍê³É¡£
9¡¢Ò»¸öÎı¾Îļþ£¬´óÔ¼ÓÐÒ»ÍòÐУ¬Ã¿ÐÐÒ»¸ö´Ê£¬ÒªÇóͳ¼Æ³öÆäÖÐ×îÆµ·±³öÏÖµÄǰ10¸ö´Ê£¬Çë¸ø³ö˼Ï룬¸ø³öʱ¼ä¸´ÔÓ¶È·ÖÎö¡£
·½°¸1£ºÕâÌâÊÇ¿¼ÂÇʱ¼äЧÂÊ¡£ÓÃtrieÊ÷ͳ¼ÆÃ¿¸ö´Ê³öÏֵĴÎÊý£¬Ê±¼ä¸´ÔÓ¶ÈÊÇO(n*le)£¨le±íʾµ¥´ÊµÄƽ׼³¤¶È£©¡£È»ºóÊÇÕÒ³ö³öÏÖ×îÆµ·±µÄǰ 10¸ö´Ê£¬¿ÉÒÔÓöÑÀ´ÊµÏÖ£¬Ç°ÃæµÄÌâÖÐÒѾ½²µ½ÁË£¬Ê±¼ä¸´ÔÓ¶ÈÊÇO(n*lg10)¡£ËùÒÔ×ܵÄʱ¼ä¸´ÔÓ¶È£¬ÊÇO(n*le)ÓëO(n*lg10)ÖнϴóµÄÄÄÒ»¸ö¡£
10. 1000Íò×Ö·û´®£¬ÆäÖÐÓÐЩÊÇÖØ¸´µÄ£¬ÐèÒª°ÑÖØ¸´µÄÈ«²¿È¥µô£¬±£ÁôûÓÐÖØ¸´µÄ×Ö·û´®¡£ÇëÔõôÉè¼ÆºÍʵÏÖ£¿
- ·½°¸1£ºÕâÌâÓÃtrieÊ÷±È½ÏºÏÊÊ£¬hash_mapÒ²ÐС£
- ·½°¸2£ºfrom xjbzju:£¬1000wµÄÊý¾Ý¹æÄ£²åÈë²Ù×÷ÍêÈ«²»ÏÖʵ£¬ÒÔǰÊÔ¹ýÔÚstlÏÂ100wÔªËØ²åÈësetÖÐÒѾÂýµÃ²»ÄÜÈÌÊÜ£¬¾õµÃ»ùÓÚhashµÄʵÏÖ²»»á±ÈºìºÚÊ÷ºÃÌ«¶à£¬Ê¹ÓÃvector+sort+unique¶¼Òª¿ÉÐÐÐí¶à£¬½¨Ò黹ÊÇÏÈhash³ÉСÎļþ·Ö¿ª´¦ÀíÔÙ×ۺϡ£
ÉÏÊö·½°¸2ÖжÁÕßxbzjuµÄ·½·¨ÈÃÎÒÏëµ½ÁËһЩÎÊÌ⣬¼´ÊÇset/map£¬Óëhash_set/hash_mapµÄÐÔÄܱȽÏ?¹²¼Æ3¸öÎÊÌ⣬ÈçÏ£º
- 1¡¢hash_setÔÚǧÍò¼¶Êý¾ÝÏ£¬insert²Ù×÷ÓÅÓÚset? Õâλblog£ºhttp://t.cn/zOibP7t ¸øµÄʵ¼ùÊý¾Ý¿É¿¿²»?
- 2¡¢ÄÇmapºÍhash_mapµÄÐÔÄܱȽÏÄØ? Ë×ö¹ýÏà¹ØÊµÑé?
- 3¡¢ÄDzéѯ²Ù×÷ÄØ£¬Èç϶ÎÎÄ×ÖËùÊö?

»òÕßСÊý¾ÝÁ¿Ê±ÓÃmap£¬¹¹Ôì¿ì£¬´óÊý¾ÝÁ¿Ê±ÓÃhash_map?
rbtree£¨ºìºÚÊ÷£© PK hashtable
¾ÝÅóÓÑ×öµÄºìºÚÊ÷ºÍhash tableµÄÐÔÄܲâÊÔÖз¢ÏÖ£ºµ±Êý¾ÝÁ¿»ù±¾ÉÏintÐÍkeyʱ£¬hash tableÊÇrbtreeµÄ3-4±¶£¬µ«hash tableÒ»°ã»áÀË·Ñ´ó¸ÅÒ»°ëÄÚ´æ¡£
ÒòΪhash tableËù×öµÄÔËËã¾ÍÊǸö%£¬¶ørbtreeÒª±È½ÏºÜ¶à£¬±ÈÈçrbtreeÒª¿´valueµÄÊý¾Ý£¬Ã¿¸ö½ÚµãÒª¶à³ö3¸öÖ¸Õ루»òÕ߯«ÒÆÁ¿£© Èç¹ûÐèÒªÆäËû¹¦ÄÜ£¬±ÈÈ磬ͳ¼ÆÄ³¸ö·¶Î§ÄÚµÄkeyµÄÊýÁ¿£¬¾ÍÐèÒª¼ÓÒ»¸ö¼ÆÊý³ÉÔ±¡£
ÇÒ1s rbtreeÄܽøÐдó¸Å50w+´Î²åÈ룬hash table´ó¸ÅÊDz¶à200w´Î¡£²»¹ýºÜ¶àµÄʱºò£¬ÆäËÙ¶È¿ÉÒÔÈÌÁË£¬ÀýÈçµ¹ÅÅË÷Òý²î²»¶àÒ²ÊÇÕâ¸öËÙ¶È£¬¶øÇÒµ¥Ị̈߳¬ÇÒµ¹ÅűíµÄÀÁ´³¤¶È²»»áÌ«´ó¡£ÕýÒòΪ»ùÓÚÊ÷µÄʵÏÖÆäʵ²»±ÈhashtableÂýµ½ÄÄÀïÈ¥£¬ËùÒÔÊý¾Ý¿âµÄË÷ÒýÒ»°ã¶¼ÊÇÓõÄB/B+Ê÷£¬¶øÇÒB+Ê÷»¹¶Ô´ÅÅÌÓѺÃ(BÊ÷ÄÜÓÐЧ½µµÍËüµÄ¸ß¶È£¬ËùÒÔ¼õÉÙ´ÅÅ̽»»¥´ÎÊý)¡£±ÈÈçÏÖÔڷdz£Á÷ÐеÄNoSQLÊý¾Ý¿â£¬ÏñMongoDBÒ²ÊDzÉÓõÄBÊ÷Ë÷Òý¡£¹ØÓÚBÊ÷ϵÁУ¬Çë²Î¿¼±¾blogÄÚ´ËÆªÎÄÕ£º´ÓBÊ÷¡¢B+Ê÷¡¢B*Ê÷̸µ½R Ê÷¡£
OK£¬¸ü¶àÇë´ýºóÐøÊµÑéÂÛÖ¤¡£½ÓÏÂÀ´£¬ÔÛÃÇÀ´¿´µÚ¶þÖÖ·½·¨£¬Ë«²ãͱ»®·Ö¡£
Ãܳ׶þ¡¢Ë«²ãͰ»®·Ö
Ë«²ãͰ»®·Ö----Æäʵ±¾ÖÊÉÏ»¹ÊÇ·Ö¶øÖÎÖ®µÄ˼Ïë£¬ÖØÔÚ¡°·Ö¡±µÄ¼¼ÇÉÉÏ£¡
¡¡¡¡ÊÊÓ÷¶Î§£ºµÚk´ó£¬ÖÐλÊý£¬²»Öظ´»òÖØ¸´µÄÊý×Ö
¡¡¡¡»ù±¾ÔÀí¼°Òªµã£ºÒòÎªÔªËØ·¶Î§ºÜ´ó£¬²»ÄÜÀûÓÃÖ±½ÓѰַ±í£¬ËùÒÔͨ¹ý¶à´Î»®·Ö£¬Öð²½È·¶¨·¶Î§£¬È»ºó×îºóÔÚÒ»¸ö¿ÉÒÔ½ÓÊܵķ¶Î§ÄÚ½øÐС£¿ÉÒÔͨ¹ý¶à´ÎËõС£¬Ë«²ãÖ»ÊÇÒ»¸öÀý×Ó¡£
ÎÊÌâʵÀý£º
11¡¢2.5ÒÚ¸öÕûÊýÖÐÕÒ³ö²»Öظ´µÄÕûÊýµÄ¸öÊý£¬ÄÚ´æ¿Õ¼ä²»×ãÒÔÈÝÄÉÕâ2.5ÒÚ¸öÕûÊý¡£
¡¡¡¡ÓеãÏñ¸ë³²ÔÀí£¬ÕûÊý¸öÊýΪ2^32,Ò²¾ÍÊÇ£¬ÎÒÃÇ¿ÉÒÔ½«Õâ2^32¸öÊý£¬»®·ÖΪ2^8¸öÇøÓò(±ÈÈçÓõ¥¸öÎļþ´ú±íÒ»¸öÇøÓò£»Õâ8¸öÇøµÄ·¶Î§ÈçÏ£º0µ½(2^24-1),2^24µ½(2^25-1)£¬2^25µ½2^26-1,2^26µ½2^27-1,2^27µ½2^28-1,2^28µ½2^29-1,2^29µ½2^30-1,2^30µ½2^31-1)¡£È»ºó½«Êý¾Ý·ÖÀëµ½²»Í¬µÄÇøÓò£¬È»ºó²»Í¬µÄÇøÓòÔÚÀûÓÃbitmap¾Í¿ÉÒÔÖ±½Ó½â¾öÁË¡£Ò²¾ÍÊÇ˵ֻҪÓÐ×ã¹»µÄ´ÅÅ̿ռ䣬¾Í¿ÉÒԺܷ½±ãµÄ½â¾ö¡£
×¢£º½«2.5ÒÚ¸öÕûÊý»®·ÖµÄº¯Êý¿ÉÒÔ²ÉÓÃ:value/2^(32-8)£¬¼´value/2^24¡£Öð¸ö¶ÁÈ¡2.5ÒÚ¸öÕûÊý£¬¸ù¾Ý»®·Öº¯Êý½«Ã¿¸öÕûÊý»®·Öµ½²»Í¬µÄÇøÓò¡£
12¡¢5ÒÚ¸öintÕÒËüÃǵÄÖÐλÊý¡£
¡¡¡¡Õâ¸öÀý×Ó±ÈÉÏÃæÄǸö¸üÃ÷ÏÔ¡£Ê×ÏÈÎÒÃǽ«int»®·ÖΪ2^16¸öÇøÓò£¬È»ºó¶ÁÈ¡Êý¾Ýͳ¼ÆÂäµ½¸÷¸öÇøÓòÀïµÄÊýµÄ¸öÊý£¬Ö®ºóÎÒÃǸù¾Ýͳ¼Æ½á¹û¾Í¿ÉÒÔÅжÏÖÐλÊýÂäµ½ÄĸöÇøÓò£¬Í¬Ê±ÖªµÀÕâ¸öÇøÓòÖеĵڼ¸´óÊý¸ÕºÃÊÇÖÐλÊý¡£È»ºóµÚ¶þ´ÎɨÃèÎÒÃÇֻͳ¼ÆÂäÔÚÕâ¸öÇøÓòÖеÄÄÇЩÊý¾Í¿ÉÒÔÁË¡£
¡¡¡¡Êµ¼ÊÉÏ£¬Èç¹û²»ÊÇintÊÇint64£¬ÎÒÃÇ¿ÉÒÔ¾¹ý3´ÎÕâÑùµÄ»®·Ö¼´¿É½µµÍµ½¿ÉÒÔ½ÓÊܵij̶ȡ£¼´¿ÉÒÔÏȽ«int64·Ö³É2^24¸öÇøÓò£¬È»ºóÈ·¶¨ÇøÓòµÄµÚ¼¸´óÊý£¬ÔÚ½«¸ÃÇøÓò·Ö³É2^20¸ö×ÓÇøÓò£¬È»ºóÈ·¶¨ÊÇ×ÓÇøÓòµÄµÚ¼¸´óÊý£¬È»ºó×ÓÇøÓòÀïµÄÊýµÄ¸öÊýÖ»ÓÐ2^20£¬¾Í¿ÉÒÔÖ±½ÓÀûÓÃdirect addr table½øÐÐͳ¼ÆÁË¡£
Ãܳ×Èý£ºBloom filter/Bitmap
Bloom filter
¹ØÓÚʲôÊÇBloom filter£¬Çë²Î¿´blogÄÚ´ËÎÄ£º
¡¡¡¡ÊÊÓ÷¶Î§£º¿ÉÒÔÓÃÀ´ÊµÏÖÊý¾Ý×ֵ䣬½øÐÐÊý¾ÝµÄÅÐÖØ£¬»òÕß¼¯ºÏÇó½»¼¯
¡¡¡¡»ù±¾ÔÀí¼°Òªµã£º
¡¡¡¡¶ÔÓÚÔÀíÀ´ËµºÜ¼òµ¥£¬Î»Êý×é+k¸ö¶ÀÁ¢hashº¯Êý¡£½«hashº¯Êý¶ÔÓ¦µÄÖµµÄλÊý×éÖÃ1£¬²éÕÒʱÈç¹û·¢ÏÖËùÓÐhashº¯Êý¶ÔӦλ¶¼ÊÇ1˵Ã÷´æÔÚ£¬ºÜÃ÷ÏÔÕâ¸ö¹ý³Ì²¢²»±£Ö¤²éÕҵĽá¹ûÊÇ100%ÕýÈ·µÄ¡£Í¬Ê±Ò²²»Ö§³Öɾ³ýÒ»¸öÒѾ²åÈëµÄ¹Ø¼ü×Ö£¬ÒòΪ¸Ã¹Ø¼ü×Ö¶ÔÓ¦µÄλ»áÇ£¶¯µ½ÆäËûµÄ¹Ø¼ü×Ö¡£ËùÒÔÒ»¸ö¼òµ¥µÄ¸Ä½ø¾ÍÊÇ counting Bloom filter£¬ÓÃÒ»¸öcounterÊý×é´úÌæÎ»Êý×飬¾Í¿ÉÒÔÖ§³Öɾ³ýÁË¡£
¡¡¡¡»¹ÓÐÒ»¸ö±È½ÏÖØÒªµÄÎÊÌ⣬ÈçºÎ¸ù¾ÝÊäÈëÔªËØ¸öÊýn£¬È·¶¨Î»Êý×émµÄ´óС¼°hashº¯Êý¸öÊý¡£µ±hashº¯Êý¸öÊýk=(ln2)*(m/n)ʱ´íÎóÂÊ×îС¡£ÔÚ´íÎóÂʲ»´óÓÚEµÄÇé¿öÏ£¬m ÖÁÉÙÒªµÈÓÚn*lg(1/E)²ÅÄܱíʾÈÎÒân¸öÔªËØµÄ¼¯ºÏ¡£µ«m»¹Ó¦¸Ã¸ü´óЩ£¬ÒòΪ»¹Òª±£Ö¤bitÊý×éÀïÖÁÉÙÒ»°ëΪ0£¬ÔòmÓ¦¸Ã>=nlg(1 /E)*lge ´ó¸Å¾ÍÊÇnlg(1/E)1.44±¶(lg±íʾÒÔ2Ϊµ×µÄ¶ÔÊý)¡£
¡¡¡¡¾Ù¸öÀý×ÓÎÒÃǼÙÉè´íÎóÂÊΪ0.01£¬Ôò´ËʱmÓ¦´ó¸ÅÊÇnµÄ13±¶¡£ÕâÑùk´ó¸ÅÊÇ8¸ö¡£
¡¡¡¡×¢ÒâÕâÀïmÓënµÄµ¥Î»²»Í¬£¬mÊÇbitΪµ¥Î»£¬¶ønÔòÊÇÒÔÔªËØ¸öÊýΪµ¥Î»(׼ȷµÄ˵ÊDz»Í¬ÔªËصĸöÊý)¡£Í¨³£µ¥¸öÔªËØµÄ³¤¶È¶¼ÊÇÓкܶàbitµÄ¡£ËùÒÔʹÓÃbloom filterÄÚ´æÉÏͨ³£¶¼ÊǽÚÊ¡µÄ¡£
¡¡¡¡À©Õ¹£º
¡¡ ¡¡Bloom filter½«¼¯ºÏÖеÄÔªËØÓ³É䵽λÊý×éÖУ¬ÓÃk£¨kΪ¹þÏ£º¯Êý¸öÊý£©¸öÓ³ÉäλÊÇ·ñÈ«1±íÊ¾ÔªËØÔÚ²»ÔÚÕâ¸ö¼¯ºÏÖС£Counting bloom filter£¨CBF£©½«Î»Êý×éÖеÄÿһλÀ©Õ¹ÎªÒ»¸öcounter£¬´Ó¶øÖ§³ÖÁËÔªËØµÄɾ³ý²Ù×÷¡£Spectral Bloom Filter£¨SBF£©½«ÆäÓ뼯ºÏÔªËØµÄ³öÏÖ´ÎÊý¹ØÁª¡£SBF²ÉÓÃcounterÖеÄ×îСֵÀ´½üËÆ±íÊ¾ÔªËØµÄ³öÏÖÆµÂÊ¡£
13¡¢¸øÄãA,BÁ½¸öÎļþ£¬¸÷´æ·Å50ÒÚÌõURL£¬Ã¿ÌõURLÕ¼ÓÃ64×Ö½Ú£¬ÄÚ´æÏÞÖÆÊÇ4G£¬ÈÃÄãÕÒ³öA,BÎļþ¹²Í¬µÄURL¡£Èç¹ûÊÇÈý¸öÄËÖÁn¸öÎļþÄØ£¿
¡¡¡¡¸ù¾ÝÕâ¸öÎÊÌâÎÒÃÇÀ´¼ÆËãÏÂÄÚ´æµÄÕ¼Óã¬4G=2^32´ó¸ÅÊÇ40ÒÚ*8´ó¸ÅÊÇ340ÒÚ£¬n=50ÒÚ£¬Èç¹û°´³ö´íÂÊ0.01ËãÐèÒªµÄ´ó¸ÅÊÇ650ÒÚ¸ö bit¡£ÏÖÔÚ¿ÉÓõÄÊÇ340ÒÚ£¬Ïà²î²¢²»¶à£¬ÕâÑù¿ÉÄÜ»áʹ³ö´íÂÊÉÏÉýЩ¡£ÁíÍâÈç¹ûÕâЩurlipÊÇÒ»Ò»¶ÔÓ¦µÄ£¬¾Í¿ÉÒÔת»»³Éip£¬Ôò´ó´ó¼òµ¥ÁË¡£
ͬʱ£¬ÉÏÎĵĵÚ5Ì⣺¸ø¶¨a¡¢bÁ½¸öÎļþ£¬¸÷´æ·Å50ÒÚ¸öurl£¬Ã¿¸öurl¸÷Õ¼64×Ö½Ú£¬ÄÚ´æÏÞÖÆÊÇ4G£¬ÈÃÄãÕÒ³öa¡¢bÎļþ¹²Í¬µÄurl£¿Èç¹ûÔÊÐíÓÐÒ»¶¨µÄ´íÎóÂÊ£¬¿ÉÒÔʹÓÃBloom filter£¬4GÄÚ´æ´ó¸Å¿ÉÒÔ±íʾ340ÒÚbit¡£½«ÆäÖÐÒ»¸öÎļþÖеÄurlʹÓÃBloom filterÓ³ÉäΪÕâ340ÒÚbit£¬È»ºó°¤¸ö¶ÁÈ¡ÁíÍâÒ»¸öÎļþµÄurl£¬¼ì²éÊÇ·ñÓëBloom filter£¬Èç¹ûÊÇ£¬ÄÇô¸ÃurlÓ¦¸ÃÊ**²Í¬µÄurl£¨×¢Òâ»áÓÐÒ»¶¨µÄ´íÎóÂÊ£©¡£
Bitmap
ÏÂÃæ¹ØÓÚBitmapµÄÓ¦Óã¬Ö±½ÓÉÏÌ⣬ÈçϵÚ9¡¢10µÀ£º
14¡¢ÔÚ2.5ÒÚ¸öÕûÊýÖÐÕÒ³ö²»Öظ´µÄÕûÊý£¬×¢£¬ÄÚ´æ²»×ãÒÔÈÝÄÉÕâ2.5ÒÚ¸öÕûÊý¡£
·½°¸1£º²ÉÓÃ2-Bitmap£¨Ã¿¸öÊý·ÖÅä2bit£¬00±íʾ²»´æÔÚ£¬01±íʾ³öÏÖÒ»´Î£¬10±íʾ¶à´Î£¬11ÎÞÒâÒ壩½øÐУ¬¹²ÐèÄÚ´æ2^32 * 2 bit=1 GBÄڴ棬»¹¿ÉÒÔ½ÓÊÜ¡£È»ºóɨÃèÕâ2.5ÒÚ¸öÕûÊý£¬²é¿´BitmapÖÐÏà¶ÔӦ룬Èç¹ûÊÇ00±ä01£¬01±ä10£¬10±£³Ö²»±ä¡£ËùÃèÍêʺ󣬲鿴 bitmap£¬°Ñ¶ÔӦλÊÇ01µÄÕûÊýÊä³ö¼´¿É¡£
·½°¸2£ºÒ²¿É²ÉÓÃÓëµÚ1ÌâÀàËÆµÄ·½·¨£¬½øÐл®·ÖСÎļþµÄ·½·¨¡£È»ºóÔÚСÎļþÖÐÕÒ³ö²»Öظ´µÄÕûÊý£¬²¢ÅÅÐò¡£È»ºóÔÙ½øÐй鲢£¬×¢ÒâÈ¥³ýÖØ¸´µÄÔªËØ¡£
15¡¢ÌÚÑ¶ÃæÊÔÌ⣺¸ø40ÒÚ¸ö²»Öظ´µÄunsigned intµÄÕûÊý£¬Ã»ÅŹýÐòµÄ£¬È»ºóÔÙ¸øÒ»¸öÊý£¬ÈçºÎ¿ìËÙÅжÏÕâ¸öÊýÊÇ·ñÔÚÄÇ40ÒÚ¸öÊýµ±ÖУ¿
·½°¸1£ºfrome oo£¬ÓÃλͼ/BitmapµÄ·½·¨£¬ÉêÇë512MµÄÄڴ棬һ¸öbitλ´ú±íÒ»¸öunsigned intÖµ¡£¶ÁÈë40ÒÚ¸öÊý£¬ÉèÖÃÏàÓ¦µÄbit룬¶ÁÈëÒª²éѯµÄÊý£¬²é¿´ÏàÓ¦bitλÊÇ·ñΪ1£¬Îª1±íʾ´æÔÚ£¬Îª0±íʾ²»´æÔÚ¡£
Ãܳ×ËÄ¡¢TrieÊ÷/Êý¾Ý¿â/µ¹ÅÅË÷Òý
TrieÊ÷
¡¡¡¡ÊÊÓ÷¶Î§£ºÊý¾ÝÁ¿´ó£¬Öظ´¶à£¬µ«ÊÇÊý¾ÝÖÖÀàС¿ÉÒÔ·ÅÈëÄÚ´æ
¡¡¡¡»ù±¾ÔÀí¼°Òªµã£ºÊµÏÖ·½Ê½£¬½Úµãº¢×ӵıíʾ·½Ê½
¡¡¡¡À©Õ¹£ºÑ¹ËõʵÏÖ¡£
¡¡¡¡ÎÊÌâʵÀý£º
- ÉÏÃæµÄµÚ2Ì⣺ѰÕÒÈÈÃŲéѯ£º²éѯ´®µÄÖØ¸´¶È±È½Ï¸ß£¬ËäÈ»×ÜÊýÊÇ1ǧÍò£¬µ«Èç¹û³ýÈ¥ÖØ¸´ºó£¬²»³¬¹ý3°ÙÍò¸ö£¬Ã¿¸ö²»³¬¹ý255×Ö½Ú¡£
- ÉÏÃæµÄµÚ5Ì⣺ÓÐ10¸öÎļþ£¬Ã¿¸öÎļþ1G£¬Ã¿¸öÎļþµÄÿһÐж¼´æ·ÅµÄÊÇÓû§µÄquery£¬Ã¿¸öÎļþµÄquery¶¼¿ÉÄÜÖØ¸´¡£ÒªÄã°´ÕÕqueryµÄƵ¶ÈÅÅÐò¡£
- 1000Íò×Ö·û´®£¬ÆäÖÐÓÐЩÊÇÏàͬµÄ(ÖØ¸´),ÐèÒª°ÑÖØ¸´µÄÈ«²¿È¥µô£¬±£ÁôûÓÐÖØ¸´µÄ×Ö·û´®¡£ÇëÎÊÔõôÉè¼ÆºÍʵÏÖ£¿
- ÉÏÃæµÄµÚ8Ì⣺һ¸öÎı¾Îļþ£¬´óÔ¼ÓÐÒ»ÍòÐУ¬Ã¿ÐÐÒ»¸ö´Ê£¬ÒªÇóͳ¼Æ³öÆäÖÐ×îÆµ·±³öÏÖµÄǰ10¸ö´Ê¡£Æä½â¾ö·½·¨ÊÇ£ºÓÃtrieÊ÷ͳ¼ÆÃ¿¸ö´Ê³öÏֵĴÎÊý£¬Ê±¼ä¸´ÔÓ¶ÈÊÇO(n*le)£¨le±íʾµ¥´ÊµÄƽ׼³¤¶È£©£¬È»ºóÊÇÕÒ³ö³öÏÖ×îÆµ·±µÄǰ10¸ö´Ê¡£
¸ü¶àÓйØTrieÊ÷µÄ½éÉÜ£¬Çë²Î¼û´ËÎÄ£º´ÓTrieÊ÷£¨×ÖµäÊ÷£©Ì¸µ½ºó׺Ê÷¡£
Êý¾Ý¿âË÷Òý
¡¡¡¡ÊÊÓ÷¶Î§£º´óÊý¾ÝÁ¿µÄÔöɾ¸Ä²é
¡¡¡¡»ù±¾ÔÀí¼°Òªµã£ºÀûÓÃÊý¾ÝµÄÉè¼ÆÊµÏÖ·½·¨£¬¶Ôº£Á¿Êý¾ÝµÄÔöɾ¸Ä²é½øÐд¦Àí¡£
µ¹ÅÅË÷Òý(Inverted index)
¡¡¡¡ÊÊÓ÷¶Î§£ºËÑË÷ÒýÇæ£¬¹Ø¼ü×Ö²éѯ
¡¡¡¡»ù±¾ÔÀí¼°Òªµã£ºÎªºÎ½Ðµ¹ÅÅË÷Òý£¿Ò»ÖÖË÷Òý·½·¨£¬±»ÓÃÀ´´æ´¢ÔÚÈ«ÎÄËÑË÷ÏÂij¸öµ¥´ÊÔÚÒ»¸öÎĵµ»òÕßÒ»×éÎĵµÖеĴ洢λÖõÄÓ³Éä¡£
¡¡ÒÔÓ¢ÎÄΪÀý£¬ÏÂÃæÊÇÒª±»Ë÷ÒýµÄÎı¾£º
T0 = "it is what it is"
T1 = "what is it"
T2 = "it is a banana"
ÎÒÃǾÍÄܵõ½ÏÂÃæµÄ·´ÏòÎļþË÷Òý£º
"a": {2}
"banana": {2}
"is": {0, 1, 2}
"it": {0, 1, 2}
"what": {0, 1}
¡¡¼ìË÷µÄÌõ¼þ"what","is"ºÍ"it"½«¶ÔÓ¦¼¯ºÏµÄ½»¼¯¡£
¡¡¡¡ÕýÏòË÷Òý¿ª·¢³öÀ´ÓÃÀ´´æ´¢Ã¿¸öÎĵµµÄµ¥´ÊµÄÁÐ±í¡£ÕýÏòË÷ÒýµÄ²éѯÍùÍùÂú×ãÿ¸öÎĵµÓÐÐòƵ·±µÄÈ«ÎIJéѯºÍÿ¸öµ¥´ÊÔÚУÑéÎĵµÖеÄÑéÖ¤ÕâÑùµÄ²éѯ¡£ÔÚÕýÏòË÷ÒýÖУ¬ÎĵµÕ¼¾ÝÁËÖÐÐĵÄλÖã¬Ã¿¸öÎĵµÖ¸ÏòÁËÒ»¸öËüËù°üº¬µÄË÷ÒýÏîµÄÐòÁС£Ò²¾ÍÊÇ˵ÎĵµÖ¸ÏòÁËËü°üº¬µÄÄÇЩµ¥´Ê£¬¶ø·´ÏòË÷ÒýÔòÊǵ¥´ÊÖ¸ÏòÁ˰üº¬ËüµÄÎĵµ£¬ºÜÈÝÒ׿´µ½Õâ¸ö·´ÏòµÄ¹ØÏµ¡£
¡¡¡¡À©Õ¹£º
¡¡¡¡ÎÊÌâʵÀý£ºÎĵµ¼ìË÷ϵͳ£¬²éѯÄÇЩÎļþ°üº¬ÁËijµ¥´Ê£¬±ÈÈç³£¼ûµÄѧÊõÂÛÎĵĹؼü×ÖËÑË÷¡£
¹ØÓÚµ¹ÅÅË÷ÒýµÄÓ¦Ó㬸ü¶àÇë²Î¼û£º
Ãܳ×Îå¡¢ÍâÅÅÐò
¡¡¡¡ÊÊÓ÷¶Î§£º´óÊý¾ÝµÄÅÅÐò£¬È¥ÖØ
¡¡¡¡»ù±¾ÔÀí¼°Òªµã£ºÍâÅÅÐòµÄ¹é²¢·½·¨£¬Öû»Ñ¡Ôñ°ÜÕßÊ÷ÔÀí£¬×îÓŹ鲢Ê÷
¡¡¡¡À©Õ¹£º
¡¡¡¡ÎÊÌâʵÀý£º
¡¡¡¡1).ÓÐÒ»¸ö1G´óСµÄÒ»¸öÎļþ£¬ÀïÃæÃ¿Ò»ÐÐÊÇÒ»¸ö´Ê£¬´ÊµÄ´óС²»³¬¹ý16¸ö×Ö½Ú£¬ÄÚ´æÏÞÖÆ´óСÊÇ1M¡£·µ»ØÆµÊý×î¸ßµÄ100¸ö´Ê¡£
¡¡¡¡Õâ¸öÊý¾Ý¾ßÓкÜÃ÷ÏÔµÄÌØµã£¬´ÊµÄ´óСΪ16¸ö×Ö½Ú£¬µ«ÊÇÄÚ´æÖ»ÓÐ1M×öhashÃ÷ÏÔ²»¹»£¬ËùÒÔ¿ÉÒÔÓÃÀ´ÅÅÐò¡£ÄÚ´æ¿ÉÒÔµ±ÊäÈ뻺³åÇøÊ¹Óá£
¹ØÓڶ෹鲢Ëã·¨¼°ÍâÅÅÐòµÄ¾ßÌåÓ¦Óó¡¾°£¬Çë²Î¼ûblogÄÚ´ËÎÄ£º
Ãܳ×Áù¡¢·Ö²¼Ê½´¦ÀíÖ®Mapreduce
MapReduceÊÇÒ»ÖÖ¼ÆËãÄ£ÐÍ£¬¼òµ¥µÄ˵¾ÍÊǽ«´óÅúÁ¿µÄ¹¤×÷£¨Êý¾Ý£©·Ö½â£¨MAP£©Ö´ÐУ¬È»ºóÔÙ½«½á¹ûºÏ²¢³É×îÖÕ½á¹û£¨REDUCE£©¡£ÕâÑù×öµÄºÃ´¦ÊÇ¿ÉÒÔÔÚÈÎÎñ±»·Ö½âºó£¬¿ÉÒÔͨ¹ý´óÁ¿»úÆ÷½øÐв¢ÐмÆË㣬¼õÉÙÕû¸ö²Ù×÷µÄʱ¼ä¡£µ«Èç¹ûÄãÒªÎÒÔÙͨË×µã½éÉÜ£¬ÄÇô£¬Ëµ°×ÁË£¬MapreduceµÄÔÀí¾ÍÊÇÒ»¸ö¹é²¢ÅÅÐò¡£
ÊÊÓ÷¶Î§£ºÊý¾ÝÁ¿´ó£¬µ«ÊÇÊý¾ÝÖÖÀàС¿ÉÒÔ·ÅÈëÄÚ´æ
¡¡¡¡»ù±¾ÔÀí¼°Òªµã£º½«Êý¾Ý½»¸ø²»Í¬µÄ»úÆ÷È¥´¦Àí£¬Êý¾Ý»®·Ö£¬½á¹û¹éÔ¼¡£
¡¡¡¡À©Õ¹£º
¡¡¡¡ÎÊÌâʵÀý£º
- The canonical example application of MapReduce is a process to count the appearances of each different word in a set of documents:
- º£Á¿Êý¾Ý·Ö²¼ÔÚ100̨µçÄÔÖУ¬Ïë¸ö°ì·¨¸ßЧͳ¼Æ³öÕâÅúÊý¾ÝµÄTOP10¡£
- Ò»¹²ÓÐN¸ö»úÆ÷£¬Ã¿¸ö»úÆ÷ÉÏÓÐN¸öÊý¡£Ã¿¸ö»úÆ÷×î¶à´æO(N)¸öÊý²¢¶ÔËüÃDzÙ×÷¡£ÈçºÎÕÒµ½N^2¸öÊýµÄÖÐÊý(median)£¿
¸ü¶à¾ßÌå²ûÊöÇë²Î¼ûblogÄÚ£º
ÆäËüģʽ/·½·¨ÂÛ£¬½áºÏ²Ù×÷ϵͳ֪ʶ
ÖÁ´Ë£¬ÁùÖÖ´¦Àíº£Á¿Êý¾ÝÎÊÌâµÄģʽ/·½·¨ÒѾ²ûÊöÍê±Ï¡£¾Ý¹Û²ì£¬Õâ·½ÃæµÄÃæÊÔÌâÎÞÍâºõÒÔÉÏÒ»ÖÖ»òÆä±äÐΣ¬È»ÌâĿΪºÎȡΪÊÇ£ºÃëɱ99%µÄº£Á¿Êý¾Ý´¦ÀíÃæÊÔÌ⣬¶ø²»ÊÇ100%ÄØ¡£OK£¬¸ø¶ÁÕß¿´×îºóÒ»µÀÌ⣬ÈçÏ£º
·Ç³£´óµÄÎļþ£¬×°²»½øÄڴ档ÿÐÐÒ»¸öintÀàÐÍÊý¾Ý£¬ÏÖÔÚÒªÄãËæ»úÈ¡100¸öÊý¡£
ÎÒÃÇ·¢ÏÖÉÏÊöÕâµÀÌ⣬ÎÞÂÛÊÇÒÔÉÏÈκÎÒ»ÖÖģʽ/·½·¨¶¼²»ºÃ×ö£¬ÄÇÓÐʲôºÃµÄ±ðµÄ·½·¨ÄØ£¿ÎÒÃÇ¿ÉÒÔ¿´¿´£º²Ù×÷ϵͳÄÚ´æ·ÖҳϵͳÉè¼Æ(˵°×ÁË£¬¾ÍÊÇÓ³Éä+½¨Ë÷Òý)¡£
Windows 2000ʹÓûùÓÚ·ÖÒ³»úÖÆµÄÐéÄâÄڴ档ÿ¸ö½ø³ÌÓÐ4GBµÄÐéÄâµØÖ·¿Õ¼ä¡£»ùÓÚ·ÖÒ³»úÖÆ£¬Õâ4GBµØÖ·¿Õ¼äµÄһЩ²¿·Ö±»Ó³ÉäÁËÎïÀíÄڴ棬һЩ²¿·ÖÓ³ÉäÓ²ÅÌÉϵĽ»»»ÎÄ ¼þ£¬Ò»Ð©²¿·ÖʲôҲûÓÐÓ³Éä¡£³ÌÐòÖÐʹÓõͼÊÇ4GBµØÖ·¿Õ¼äÖеÄÐéÄâµØÖ·¡£¶ø·ÃÎÊÎïÀíÄڴ棬ÐèҪʹÓÃÎïÀíµØÖ·¡£¹ØÓÚʲôÊÇÎïÀíµØÖ·ºÍÐéÄâµØÖ·£¬Çë¿´£º
- ÎïÀíµØÖ· (physical address): ·ÅÔÚѰַ×ÜÏßÉϵĵØÖ·¡£·ÅÔÚѰַ×ÜÏßÉÏ£¬Èç¹ûÊǶÁ£¬µç·¸ù¾ÝÕâ¸öµØÖ·Ã¿Î»µÄÖµ¾Í½«ÏàÓ¦µØÖ·µÄÎïÀíÄÚ´æÖеÄÊý¾Ý·Åµ½Êý¾Ý×ÜÏßÖд«Êä¡£Èç¹ûÊÇд£¬µç·¸ù¾ÝÕâ¸öµØÖ·Ã¿Î»µÄÖµ¾Í½«ÏàÓ¦µØÖ·µÄÎïÀíÄÚ´æÖзÅÈëÊý¾Ý×ÜÏßÉϵÄÄÚÈÝ¡£ÎïÀíÄÚ´æÊÇÒÔ×Ö½Ú(8λ)Ϊµ¥Î»±àÖ·µÄ¡£
- ÐéÄâµØÖ· (virtual address): 4GÐéÄâµØÖ·¿Õ¼äÖеĵØÖ·£¬³ÌÐòÖÐʹÓõͼÊÇÐéÄâµØÖ·¡£ ʹÓÃÁË·ÖÒ³»úÖÆÖ®ºó£¬4GµÄµØÖ·¿Õ¼ä±»·Ö³ÉÁ˹̶¨´óСµÄÒ³£¬Ã¿Ò»Ò³»òÕß±»Ó³Éäµ½ÎïÀíÄڴ棬»òÕß±»Ó³Éäµ½Ó²ÅÌÉϵĽ»»»ÎļþÖУ¬»òÕßûÓÐÓ³ÉäÈκζ«Î÷¡£¶ÔÓÚÒ»°ã³ÌÐòÀ´Ëµ£¬4GµÄµØÖ·¿Õ¼ä£¬Ö»ÓÐһС²¿·ÖÓ³ÉäÁËÎïÀíÄڴ棬´óƬ´óƬµÄ²¿·ÖÊÇûÓÐÓ³ÉäÈκζ«Î÷¡£ÎïÀíÄÚ´æÒ²±»·ÖÒ³£¬À´Ó³É䵨ַ¿Õ¼ä¡£¶ÔÓÚ32bitµÄ Win2k£¬Ò³µÄ´óСÊÇ4K×Ö½Ú¡£CPUÓÃÀ´°ÑÐéÄâµØÖ·×ª»»³ÉÎïÀíµØÖ·µÄÐÅÏ¢´æ·ÅÔÚ½Ð×öҳĿ¼ºÍÒ³±íµÄ½á¹¹Àï¡£
ÎïÀíÄÚ´æ·ÖÒ³£¬Ò»¸öÎïÀíÒ³µÄ´óСΪ4K×Ö½Ú£¬µÚ0¸öÎïÀíÒ³´ÓÎïÀíµØÖ· 0x00000000 ´¦¿ªÊ¼¡£ÓÉÓÚÒ³µÄ´óСΪ4KB£¬¾ÍÊÇ0x1000×Ö½Ú£¬ËùÒÔµÚ1Ò³´ÓÎïÀíµØÖ· 0x00001000 ´¦¿ªÊ¼¡£µÚ2Ò³´ÓÎïÀíµØÖ· 0x00002000 ´¦¿ªÊ¼¡£¿ÉÒÔ¿´µ½ÓÉÓÚÒ³µÄ´óСÊÇ4KB£¬ËùÒÔÖ»ÐèÒª32bitµÄµØÖ·Öиß20bitÀ´Ñ°Ö·ÎïÀíÒ³¡£
·µ»ØÉÏÃæÎÒÃǵÄÌâÄ¿£º·Ç³£´óµÄÎļþ£¬×°²»½øÄڴ档ÿÐÐÒ»¸öintÀàÐÍÊý¾Ý£¬ÏÖÔÚÒªÄãËæ»úÈ¡100¸öÊý¡£Õë¶Ô´ËÌ⣬ÎÒÃÇ¿ÉÒÔ½è¼øÉÏÊö²Ù×÷ϵͳÖÐÄÚ´æ·ÖÒ³µÄÉè¼Æ·½·¨£¬×ö³öÈçϽâ¾ö·½°¸£º
²Ù×÷ϵͳÖеķ½·¨£¬ÏÈÉú³É4GµÄµØÖ·±í£¬ÔÚ°ÑÕâ¸ö±í»®·ÖΪСµÄ4MµÄСÎļþ×ö¸öË÷Òý£¬¶þ¼¶Ë÷Òý¡£30λǰʮλ±íʾµÚ¼¸¸ö4MÎļþ£¬ºó20λ±íʾÔÚÕâ¸ö4MÎļþµÄµÚ¼¸¸ö£¬µÈµÈ£¬»ùÓÚkey valueÀ´Éè¼Æ´æ´¢£¬ÓÃkeyÀ´½¨Ë÷Òý¡£
µ«Èç¹ûÏÖÔÚÖ»ÓÐ10000¸öÊý£¬È»ºóÔõÃ´È¥Ëæ»ú´ÓÕâÒ»Íò¸öÊýÀïÃæËæ»úÈ¡100¸öÊý£¿Çë¶ÁÕß˼¿¼¡£
http://blog.sina.com.cn/s/blog_6dd65c6f01013ypp.html