锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
鎵鏈夌殑freepool,浠ユ暟緇勫艦寮忕粍緇囧湪涓璧?姣忎釜freepool鍏冪礌緇撴瀯浣撶殑瀹氫箟鏄?
uint64_t off; // offset of the block
uint32_t rsiz; // size of the block
} HDBFB;
褰撻渶瑕佹彃鍏ユ柊鐨勮褰曟椂,闇瑕佸湪褰撳墠鐨刦reepool涓繘琛屾煡璇?鐪嬫湁娌℃湁閫傚悎鐨刦reepool鍙互鍥炴敹鍒╃敤,鍥犳闇瑕佹牴鎹昂瀵歌繘琛屾煡璇?鎵浠ヤ負(fù)浜嗘彁楂樻煡璇㈤熺巼,freepool鏁扮粍涓殑鍏冪礌鏄牴鎹瘡涓猣reepool鐨勫昂瀵歌繘琛屾帓搴忕殑,榪欐牱鏍規(guī)嵁灝哄榪涜鏌ユ壘鏃跺氨鍙互閲囩敤浜屽垎鏌ユ壘鎻愰珮鏁堢巼浜?浣嗘槸瑕佹敞鎰忓埌鍙兘鍑虹幇鐨勬壘鍒扮殑灝哄涓嶇鍚堣姹?榪囧ぇ浜?澶т簬鎵闇灝哄鐨勪竴鍊嶄互涓?,榪欎釜鏃跺欎細(xì)灝嗚繖鍧梖reepool榪涜鎷嗗垎,涓閮ㄥ垎緇欎簣浣跨敤,鍓╀綑鐨勫洖鏀跺埌freepool涓?鍙﹀,濡傛灉鍦╢reepool涓煡鎵炬墍闇灝哄鍑虹幇浜嗗緢澶氭澶辮觸鐨勬儏鍐?涓鏃﹀け璐ヨ〃紺烘病鏈夌鍚堣姹傜殑freepool鍙互鍥炴敹鍒╃敤,榪欐椂灝遍渶瑕佸鍔犳暟鎹簱鏂囦歡澶у皬浠ュ姞鍏ユ柊鐨勮褰曚簡),灝遍渶瑕佸freepool榪涜涓嬈″悎騫舵搷浣?灝嗙浉閭?cè)潥刦reepool鍚堝茍璧鋒潵褰㈡垚灝藉彲鑳藉ぇ鐨刦reepool,鑰屽垽鏂槸鍚︾浉閭?cè)潥勪緷鎹疄鏄犚?guī)嵁鍦ㄦ暟鎹簱鏂囦歡涓殑offset,姝ゆ椂鍙堜細(xì)灝嗘墍鏈夌殑freepool鏍規(guī)嵁offset榪涜涓嬈℃帓搴?鐒跺悗鍐嶈繘琛屽墠闈㈢殑鍚堝茍鎿嶄綔.
浠ヤ笂灝辨槸freepool鏁扮粍鐨勫ぇ浣撶粍緇囨儏鍐?鍥犱負(fù)瀹冧繚瀛樺湪鍐呭瓨閲岄潰鐨?鑰屼笖浼?xì)缁忓父鏈夋洿鏂?閭d箞灝變細(xì)鍑虹幇褰撳墠鐨刦reepool涓庢暟鎹簱鏂囦歡涓繚瀛樼殑freepool鎯呭喌涓嶄竴鑷寸殑鍙兘,鎵浠ュ湪鍏抽棴/鎷瘋礉鏁版嵁搴撶殑鏃跺欒繕瑕佸皢鍐呭瓨涓殑freepool淇℃伅涓嬈℃х殑鍚屾鍒版暟鎹簱鏂囦歡涓?浣嗘槸鎴戞敞鎰忓埌,鍦ㄦ暟鎹簱榪愯鏈熼棿鏄病鏈夎繖涓悓姝ユ搷浣滅殑,鎵浠?涓鏃︽暟鎹簱琚潪娉曞叧闂?閭d箞鏁版嵁搴撴枃浠朵腑閲岄潰鐨刦reepool淇℃伅灝嗗畬鍏ㄧ殑閿欎貢,鎴戞兂榪欎篃鏄疶C涓嶅瀹夊叏鐨勪竴涓綈璇佸惂.
涓嬮潰綆鍗曠殑浠嬬粛TC hash鏁版嵁搴撲腑涓巉reepool鐩稿叧鐨凙PI:
1)static bool tchdbsavefbp(TCHDB *hdb)
灝嗗綋鍓嶅唴瀛樹腑freepool鏁扮粍淇℃伅鍚屾鍒版暟鎹簱鏂囦歡涓?浠呭綋鍏抽棴/鎷瘋礉鏁版嵁搴撴椂琚皟鐢?
2) static bool tchdbloadfbp(TCHDB *hdb)
鍔犺澆鏁版嵁搴撴枃浠朵腑鐨刦reepool淇℃伅鍒板唴瀛樹腑,涓巘chdbsavefbp
鏄袱涓簰閫嗙殑榪囩▼.
3) static void tcfbpsortbyoff(HDBFB *fbpool, int fbpnum)
鏍規(guī)嵁offset瀵筬reepool鏁扮粍榪涜鎺掑簭
4) static void tcfbpsortbyrsiz(HDBFB *fbpool, int fbpnum)
鏍規(guī)嵁size瀵筬reepool鏁扮粍榪涜鎺掑簭
5) static void tchdbfbpmerge(TCHDB *hdb)
灝嗗湴鍧鐩擱偦鐨刦reepool榪涜鍚堝茍,鍐呴儴瀹炵幇涓鍏堜細(xì)璋冪敤tcfbpsortbyoff
瀵筬reepool鏍規(guī)嵁offset榪涜鎺掑簭,榪欐牱鎵嶆柟渚垮悎騫舵搷浣?
6) static void tchdbfbpinsert(TCHDB *hdb, uint64_t off, uint32_t rsiz)
灝嗕竴鍧梑lock鎻掑叆鍒板悎閫傜殑freepool涓?鎻掑叆涔嬪墠鍜屾彃鍏ヤ箣鍚巉reepool鏁扮粍閮芥槸鏍規(guī)嵁size鎺掑簭濂界殑.
7) static bool tchdbfbpsearch(TCHDB *hdb, TCHREC *rec)
鏍規(guī)嵁rec鎵瑕佹眰鐨勫昂瀵?鏌ユ壘涓鍧楀悎閫傜殑freepool鍥炴敹鍒╃敤,濡傛灉鎵懼埌鐨刦reepool榪囧ぇ(澶т簬鎵瑕佹眰鐨勪竴鍊?,閭d箞灝卞垎涓轟袱浠?涓浠借礋璐f彃鍏ec,涓浠介噸鏂版彃鍏ュ埌鍚堥傜殑freepool涓?
8) static bool tchdbfbpsplice(TCHDB *hdb, TCHREC *rec, uint32_t nsiz)
鏌ョ湅绱ц窡鐫rec鐨勬暟鎹簱鏂囦歡絀洪棿鏄惁鏄┖闂茬殑,濡傛灉鏄氨鍚堝茍榪涙潵,涔熷氨鏄姞澶ec鐨勫昂瀵?浠ユ弧瓚硁siz澶у皬鐨勮姹?
9) static bool tchdbwritefb(TCHDB *hdb, uint64_t off, uint32_t rsiz)
灝嗕竴鍧梑lock緗綅絀洪棽鐨?灝辨槸鍐欏畠鐨刴agic number涓?xb0)
鎬諱綋鏉ョ湅,freepool鏄疶C hash鏁版嵁搴撲腑鎿嶄綔寰堥綣佺殑涓鍧楁暟鎹尯,鍦ㄥ垹闄や竴鏉¤褰曟椂闇瑕佸皢榪欐潯璁板綍鏀懼埌鍚堥傜殑freepool涓?鑰屾柊澧炶褰曟椂榪橀渶瑕佷粠褰撳墠鐨刦reepool涓煡鎵懼悎閫傜殑block,浣嗘槸鐢變簬freepool鏄繚瀛樺湪鍐呭瓨涓殑,鑰屼笖鍙堣繘琛岃繃鎺掑簭鍥犳鍙互浣跨敤浜屽垎鏌ユ壘綆楁硶,鎵浠ュ瀹冭繘琛岀殑綆$悊鎿嶄綔榪樻槸杈冧負(fù)楂樻晥鐨?
]]>
鍏堟潵鐪嬭繖涓繃紼嬬殑嫻佺▼鍥撅紝鍏跺疄寰堢畝鍗曪紝鍖呮嫭浠ヤ笅鍑犱釜鎸夐儴灝辯彮鐨勬楠わ細(xì)
a) 棣栧厛錛屾牴鎹甼ey鏌ユ壘瀵瑰簲鐨勮褰曪紝榪欎釜鍦ㄤ笂涓鑺傚凡緇忓畬鏁寸殑浠嬬粛榪囦簡錛屽綋鏃朵篃鎻愬埌錛屾煡鎵炬搷浣滄槸鍚庣畫榪涜鍒犻櫎鍜屾彃鍏ユ柊鏁版嵁鏃剁殑鍩虹銆?br>濡傛灉娌℃湁鎵懼埌璁板綍錛岃鏄庡師鏉ュ氨娌℃湁錛岄偅涔堝氨涓嶅繀緇х畫涓嬪幓浜嗐?br>鍋囪鐜板湪鎵懼埌浜嗘墍瑕佸垹闄ょ殑鏁版嵁錛屾帴鐫浠ヤ笅鍑犳錛?br>b) 灝嗚璁板綍鐨刴agic number緗負(fù)0xb0錛岀涓鑺傝瑙ash鏁版嵁搴撴榪扮殑鏃跺欐彁鍒拌繃錛屾瘡鏉¤褰曠殑澶撮儴淇℃伅涓湁涓ょ涓嶅悓magic number錛屾牴鎹繖涓垽鏂竴鏉¤褰曟槸鍚﹁鍒犻櫎浜嗭紝鐜板湪灝嗚繖涓猰agic number緗負(fù)0xb0灝辨槸琛ㄧず榪欐潯璁板綍宸茬粡琚垹闄や簡銆?br>c) 灝嗚繖鏉¤鍒犻櫎鐨勮褰曟彃鍏ュ埌free pool鏁扮粍涓殑鍚堥備綅緗紝榪欐槸涓嬩竴鑺傜殑閲嶇偣錛岃繖閲屽厛鐭ラ亾榪欎釜鎿嶄綔灝卞ソ銆?br>d) 涓婁竴鑺傛彁鍒拌繃錛屽悓涓涓猙ucket index鏄互浜屽弶鏍?wèi)迮炲紡缁劸l囧湪涓璧風(fēng)殑錛岃櫧鐒朵笉鏄鉤琛$殑浜屽弶鏍?wèi)锛屼絾鏄垹闄や簡涓涓暟鎹箣鍚庝細(xì)鐮村潖浜屽弶鏍?wèi)鐨勬ц川錛屾墍浠ラ渶瑕佸湪浜屽弶鏍?wèi)涓墤謭板悎閫傜殑璁板綍鏉ユ浛鎹㈠垹闄よ繖鏉¤褰曚箣鍚庡墿涓嬬殑浣嶇疆銆?br>鐔熸?zhèn)夋暟鎹l撴瀯涓庣畻娉曠殑閮界煡閬擄紝涓涓帓搴忎簩鍙夋爲(wèi)濡傛灉鎸夌収涓簭閬嶅巻鐨勮瘽錛岄偅涔堟槸鏈夊簭鐨勩傛墍浠ヨ鍦ㄥ垹闄や竴涓褰曚箣鍚庝粛鐒朵繚鎸佹帓搴忎簩鍙夋爲(wèi)鐨勬湁搴忔э紝鏄垹闄ゆ搷浣滅殑閲嶇偣錛屼笅闈㈠氨鏄疶C涓垹闄や竴涓褰曟椂鐨勮皟鏁寸畻娉曪細(xì)
child = rec.left
else if rec.left is null and rec.right is not null
child = rec.right
else if rec.left is null and rec.right is null
child = null
else
child = rec.left
right = rec.right
rec.right = child
while (rec.right is not null)
rec = rec.right
rec.right = right
replace rec's original place with child
涔熷彲浠ヤ粠涓嬪浘涓潵鐞嗚В褰撳垹闄や竴涓褰曟椂錛屽畠鐨勫乏鍙沖瓙鑺傜偣閮戒笉涓虹┖鏃剁殑澶勭悊錛?br>
浠庡浘涓彲浠ョ湅鍑猴紝褰撴墍瑕佸垹闄ょ殑鑺傜偣宸﹀彸瀛愯妭鐐歸兘涓嶄負(fù)絀烘椂錛屼細(xì)鍘誨鎵懼乏瀛愭爲(wèi)涓殑鏈鍙寵竟鐨勫瓙鑺傜偣錛岀劧鍚庡皢寰呭垹闄よ褰曠殑鍙沖瓙鏍?wèi)鍙樻垚杩欎釜鏈鍙沖瓙鑺傜偣鐨勫彸瀛愭爲(wèi)銆?br>
闇瑕佹敞鎰忓埌鐨勬槸錛岀粡鍏哥殑鏁版嵁緇撴瀯綆楁硶涓紝褰撳湪鎺掑簭浜屽弶鏍?wèi)涓垹闄や竴涓妭鐐逛箣鍚庯紝鎵鍋氱殑璋冩暣涓庝笂闈㈢殑嫻佺▼鏈夋墍涓嶅悓錛岃櫧鐒朵篃鏄壘鍒扮殑鍘熻褰曠殑宸﹀瓙鏍?wèi)鐨勬渶鍙寵妭鐐癸紝浣嗘槸鏄皢榪欎釜鏈鍙寵妭鐐圭洿鎺ユ浛鎹㈡帀鍘熸潵璁板綍鐨勪綅緗紝涔熷氨鏄涓嬪浘錛?br>
鎵浠ワ紝榪欓噷鍑虹幇浜嗕竴涓柊鐨勯棶棰橈紝TC涓殑璋冩暣綆楁硶鏄湁鍙兘瀵艱嚧鍒犻櫎璁板綍涔嬪悗浜屽弶鏍?wèi)涓嶒q寵 鐨勶紝閭d箞涓轟粈涔堜笉閫夌敤絎簩縐嶆柟娉曞憿錛?br>鎴戠殑鐞嗚В鏄細(xì)
1錛?濡傚墠涓鑺傛墍榪幫紝TC涓殑浜屽弶鏍?wèi)鏈潵灏变笉鏄繀鐒厄q寵 鐨勶紝鎵浠C涓殑榪欑璋冩暣綆楁硶鏈夊彲鑳戒細(xì)鏈?#8220;璐熻礋寰楁”鐨勭粨鏋溿?br>2錛夌浜岀緇忓吀鐨勫仛娉曚腑錛岄渶瑕佺殑璋冩暣鍖呮嫭錛歛錛夊皢鏈鍙沖瓙鑺傜偣浠庡師鏉ョ殑鐖惰妭鐐逛笂鍒犻櫎 b錛夋渶鍙沖瓙鑺傜偣瑕佹浛鎹㈠師璁板綍鐨勪綅緗紝閭d箞瑕佸皢鍘熻褰曠殑宸﹀彸瀛愭爲(wèi)鍒嗗埆璧嬪煎彉涓烘渶鍙沖瓙鑺傜偣鐨勫乏鍙沖瓙鏍?wèi)銆備笂闈㈢殑榪欎釜璋冩暣錛屾瘡嬈¤皟鏁撮兘鏄渶瑕佷慨鏀硅妭鐐圭殑錛岃屾瘡嬈′慨鏀歸兘浼?xì)鏈夊纾佺洏鐨処/O鎿嶄綔銆?br>鑰岀涓縐嶅仛娉曞憿錛屼粎闇瑕佷竴嬈′慨鏀規(guī)搷浣?----灝嗗師璁板綍鐨勫彸瀛愭爲(wèi)鍙樻垚鏈鍙沖瓙鑺傜偣鐨勫彸瀛愭爲(wèi)鍗沖彲銆?br>
緇煎悎榪欏嚑涓洜绱狅紝TC閫夋嫨浜咺/O杈冨皯鐨勫仛娉曘?br>鎴戜笉娓呮鎴戠殑鐞嗚В鏄惁鍚堢悊錛屾榪庤ˉ鍏呫?br>
e錛夊垹闄や簡璁板綍錛屼篃璺蟲暣浜嗘爲(wèi)鐨勭粨鏋勪箣鍚庯紝鏈鍚庣殑宸ヤ綔灝辨槸鏇存柊鏁版嵁搴撴枃浠秇eader鐨勪俊鎭?--鍥犱負(fù)褰撳墠璁板綍灝戜簡涓鏉°?br>
鏈鍚庡垎鏋愪竴涓嬫暣涓垹闄ゆ搷浣滅殑鏈鍧忓鏉傚害錛岃繕鏄互1G鐨刡ucket瀵?6G鐨勬暟鎹簱鏂囦歡璁板綍涓轟緥錛?br>1錛夐鍏堟煡鎵懼厓绱狅紝鍓嶉潰涓鑺傝浜嗭紝闇瑕丱(4)嬈$鐩業(yè)/O+O(1)璇誨彇鍐呭瓨
2錛夋帴鐫緗墍鍒犻櫎璁板綍鐨刴agic number錛屼竴嬈$鐩業(yè)/O
3錛夊皢鍒犻櫎鎻掑叆鍒板悎閫傜殑free pool浣嶇疆錛岃繖涓笅涓鑺備細(xì)鎻愬埌錛屾槸鍦ㄥ唴瀛樹腑榪涜鐨勩?br>4錛夎皟鏁存爲(wèi)緇撴瀯錛屽湪鎵鍒犻櫎璁板綍宸﹀彸瀛愭爲(wèi)閮藉瓨鍦ㄧ殑鎯呭喌涓嬶紝棣栧厛瑕佹壘鍒版渶鍙沖瓙鑺傜偣錛岃繖鍙堟槸涓涓狾(4)鐨勭鐩業(yè)/O鎿嶄綔錛屾渶鍚庡皢鍘熻褰曠殑鍙沖瓙鏍?wèi)璧嬪肩粰鏈鍙沖瓙鑺傜偣錛屽張鏄竴嬈$鐩業(yè)/O銆備笉榪囷紝涓婇潰榪欎釜鎺ㄦ柇涓庡墠闈㈡槸鏈夌煕鐩劇殑錛屽亣濡傚湪絎竴姝ユ煡鎵句腑宸茬粡闇瑕丱(4)鐨勪唬浠鋒墠鑳藉畾浣嶅埌鎵鍒犻櫎鍏冪礌浜嗭紝閭d箞鏈鍚庣殑榪欎釜璋冩暣鏍規(guī)湰娌℃湁蹇呰浜嗐?br>
]]>
浠庝笂涓鑺傜殑姒傝堪涓?鍙互鐪嬪埌record緇撴瀯浣撲腑鏈変袱涓垚鍛榣eft,right:
uint64_t off; // offset of the record
uint32_t rsiz; // size of the whole record
uint8_t magic; // magic number
uint8_t hash; // second hash value
uint64_t left; // offset of the left child record
uint64_t right; // offset of the right child record
uint32_t ksiz; // size of the key
uint32_t vsiz; // size of the value
uint16_t psiz; // size of the padding
const char *kbuf; // pointer to the key
const char *vbuf; // pointer to the value
uint64_t boff; // offset of the body
char *bbuf; // buffer of the body
} TCHREC;
瀹為檯涓?TC浼?xì)棣栧厛鏍规嵁涓涓猺ecord鐨刱ey鍘葷畻鍑鴻key鎵鍦ㄧ殑bucket index浠ュ強(qiáng)hash index,浠g爜濡備笅:
`hdb' specifies the hash database object.
`kbuf' specifies the pointer to the region of the key.
`ksiz' specifies the size of the region of the key.
`hp' specifies the pointer to the variable into which the second hash value is assigned.
The return value is the bucket index. */
static uint64_t tchdbbidx(TCHDB *hdb, const char *kbuf, int ksiz, uint8_t *hp){
assert(hdb && kbuf && ksiz >= 0 && hp);
uint64_t idx = 19780211;
uint32_t hash = 751;
const char *rp = kbuf + ksiz;
while(ksiz--){
idx = idx * 37 + *(uint8_t *)kbuf++;
hash = (hash * 31) ^ *(uint8_t *)--rp;
}
*hp = hash;
return idx % hdb->bnum;
}
鍥犳,鎵鏈夋牴鎹褰曠殑key綆楀嚭bucket index鐩稿悓鐨勮褰曞叏閮戒互浜屽弶鏍?wèi)鐨勫舰寮従l勭粐璧鋒潵,鑰屾瘡涓猙ucket array鍏冪礌瀛樻斁鐨勬暣鍨嬪煎氨鏄bucket鏍?wèi)鏍规墍鍦ㄨ褰曠殑offset.
鍒版,鐩稿叧鐨勭粨鏋勪綋鑱旂郴閮芥竻妤氫簡,涓嬮潰鐨勬祦紼嬪浘緇欏嚭浜嗘煡鎵句竴涓猭ey鐨勮褰曟槸鍚﹀瓨鍦ㄧ殑嫻佺▼:
綆鍗曠殑瑙i噴涓涓?榪欎釜鏌ユ壘鐨勬祦紼嬪氨鏄鍏堟牴鎹煡鎵劇殑key綆楀嚭鎵鍦ㄧ殑bucket,鐒跺悗鍦ㄨ繖涓猙ucket鐨勪簩鍙夋爲(wèi)涓寜鐓ф潯浠墮亶鍘嗙殑榪囩▼.
鍓嶉潰鎻愬埌榪?bucket array鏄暣涓mmap鏄犲皠鍒板叡浜唴瀛樹腑鍘葷殑.鎴戜滑鏉ュ仛涓涓及璁?鍋囪瀛樻斁bucket array鐨勫唴瀛樹嬌鐢ㄤ簡1G,鑰岀湡姝e瓨鏀緍ecord鐨勬枃浠墮暱搴︽湁16G,涔熷氨鏄?bucket array鐨勫厓绱犱笌璁板綍澶ф鏄?:16鐨勫叧緋?鍋囪鎵閫夌殑hash綆楁硶瓚沖鐨勫ソ,浠ヨ嚦浜庢瘡涓褰曠殑key鍙互杈冧負(fù)騫沖潎鐨勫垎甯冨湪涓嶅悓鐨刡ucket index涓?涔熷氨鏄瘡涓猙ucket array鐨勫厓绱犵粍鎴愮殑浜屽弶鏍?wèi)涓婒q沖潎鏈?6涓厓绱?閭d箞涔熷氨鏈澶氶渶瑕丱(4)嬈¤鍙栨枃浠禝/O(姣忔鍘昏鍙栬褰曠殑鏁版嵁閮芥槸涓嬈¤紓佺洏鎿嶄綔) + O(1)嬈″唴瀛樿鎿嶄綔(鍥犱負(fù)闇瑕佸湪bucket array涓緱鍒版爲(wèi)鏍瑰厓绱犵殑offset).
浣嗘槸絳夌瓑,涓婇潰榪樻湁涓浜涚粏鑺傛病鏈変氦寰呮竻妤?
棣栧厛,涓婇潰鐨勪簩鍙夋爲(wèi)涓嶆槸綾諱技AVL,綰㈤粦鏍?wèi)杩欐狅L(fēng)殑騫寵 浜屽弶鏌ユ壘鏍?涔熷氨鏄,寰堝彲鑳藉湪鏋佺鐨勬儏鍐典笅婕斿彉鎴愪竴涓摼琛?--鏍?wèi)鐨勪竴杈規(guī)病鏈夊厓绱?鍙︿竴杈規(guī)湁鍏ㄩ儴鐨勫厓绱?
鍏舵,涓婇潰鐨勬祦紼嬪浘涓繕鏈変竴鐐瑰氨鏄瘡嬈℃瘮杈冮鍏堟瘮杈冪殑鏄痟ash鍊?榪欎釜鍊肩殑濂ョ灝卞湪浜庤В鍐充笂闈㈡彁鍒扮殑閭d釜闂.鏃㈢劧鍙槸涓涓櫘閫氱殑浜屽弶鏍?鏃犳硶淇濊瘉騫寵 ,閭d箞灝遍氳繃綆楀嚭榪欎釜浜岀駭鐨刪ash鍊兼潵淇濊瘉騫寵 ---褰撶劧,鍓嶆彁渚濈劧鏄墍閫夋嫨鐨刪ash綆楁硶瓚沖鐨勫ソ,鍙互淇濊瘉key騫沖潎鐨勫垎甯?
鍓嶉潰鎻愬埌榪?闈炲鉤琛$殑浜屽弶鏍?wèi)鍙細(xì)鍦ㄦ瀬绔殑鎯呭喌涓嬫墠浼?xì)婕斿彉涓轟竴涓瀬绔笉騫寵 鐨勪簩鍙夋爲(wèi)--閾捐〃,鑰岃濡侫VL,綰㈤粦鏍?wèi)涔嬀c葷殑騫寵 浜屽弶鏍?綆楁硶緙栫爜閮界浉瀵瑰鏉?璋冭瘯璧鋒潵涔熼夯鐑?鍑洪敊浜嗚璺熻繘鏇撮夯鐑?鍙﹀榪樺埆蹇樹簡,榪欎簺騫寵 浜屽弶鏍?wèi)涔嬫墍浠ヨ兘淇濇寔騫寵 ,鍦ㄥ垹闄?澧炲姞鍏冪礌鏃跺仛鐨勮鏍?wèi)閲嶆柊邈^琛$殑鎿嶄綔,姣斿鏃嬭漿絳?閮芥槸瑕佹秹鍙?qiáng)鍒拌d啓鏍?wèi)缁撶偣鐨?鑰岃繖浜?鐩墠閮芥槸瀛樻斁鍦ㄧ鐩樹笂鐨?--涔熷氨鏄繖鏄浉瀵硅緝璐規(guī)椂鐨勬搷浣?鎵浠ラ棶棰樺湪浜?鏄笉鏄煎緱涓鴻繖涓涓瀬绔殑鎯呭喌鍘諱紭鍖?鍙﹀,寮曞叆浜岀駭hash灝辨槸涓轟簡閮ㄥ垎瑙e喅榪欎釜鏋佺涓嶅鉤琛¢棶棰?瀹冪殑鎬濊礬綆鍗曚篃瀹規(guī)槗瀹炵幇,浣嗘槸寮曞叆鐨勫彟澶栦竴涓棶棰樺氨鏄瘡嬈℃煡鎵炬椂鏍規(guī)嵁key鍘葷畻bucket index鐨勬椂鍊?榪樿鑰楄垂鏃墮棿鍘葷畻hash index浜?
騫寵 鐐?榪樻槸騫寵 鐐?鏃墮棿榪樻槸絀洪棿,榪欐槸涓涓棶棰?
鎵浠?緇忚繃瀵筎C鐨刪ash鏁版嵁搴撴煡鎵緆ey嫻佺▼鐨勫垎鏋?鏈澶х殑鎰熷彈鏄?瀹冩病鏈変嬌鐢ㄥ鏉傜殑綆楁硶涓庢暟鎹粨鏋?鑰屾槸閫氳繃涓浜涘閥濡欑殑浼樺寲濡備簩綰ash鐨勫紩鍏?杈懼埌浜嗙郴緇熸晥鐜囧拰緙栫爜璋冭瘯澶嶆潅搴︿箣闂翠竴涓緝濂界殑騫寵 .瀛︿細(xì)"騫寵 "鍚勭鍥犵礌,鏄仛欏圭洰鍋氫簨鎯?閮借鎺屾彙鐨勪竴涓妧鑳?鑰岃繖涓?鍙湁澶氱粡鍘嗗鎯蟲墠鑳芥參鎱㈢Н绱簡.
濂戒簡,綆鍗曠殑鍥為【鏁翠釜鏌ユ壘key鐨勫叧閿偣:
1) 鎵鏈夌殑record鏄互浜屽弶鏍?wèi)鐨勫舰寮従l勭粐鍦ㄥ悓涓涓猙ucket涓婇潰鐨?
2) 榪欎釜浜屽弶鏍?wèi)涓嶆槸邈^琛$殑浜屽弶鏍?br>3) 涓轟簡瑙e喅闂浜岄犳垚鐨勬瀬绔笉騫寵 闂,TC寮曞叆浜嗕簩綰ash,浠ヤ繚璇佽繖涓簩鍙夋爲(wèi)灝藉彲鑳界殑騫寵 .
浠ヤ笂,灝辨槸TC瀵硅褰?bucket鐨勭粍緇囨儏鍐?浠ュ強(qiáng)鏁翠釜鏌ユ壘綆楁硶鐨勬祦紼?鍙互鐪嬪埌,綆楁硶,緇撴瀯浣撳畾涔夌瓑絳夐兘涓嶅鏉?浣嗘槸鐢變簬宸у鐨勬瀯鎬?鏃㈠彲浠ヤ嬌鐢ㄥ敖鍙兘綆鍗曠殑綆楁硶/鏁版嵁緇撴瀯,鍙堣兘瑙勯伩鍙兘鍑虹幇鐨勪竴浜涢殣鎮(zhèn)?鍚屾椂榪樿兘淇濊瘉鏌ユ壘鐨勯珮鏁堢巼.
鏌ユ壘鏄痥ey-value褰㈠紡瀛樺偍鐨勬牳蹇冩祦紼?鑳藉灝嗚繖涓祦紼嬩紭鍖?瀵規(guī)暣涓郴緇熺殑鎬ц兘涔熸湁寰堝ぇ鐨勫獎(jiǎng)鍝?
]]>
]]>