锘??xml version="1.0" encoding="utf-8" standalone="yes"?>久久天天躁夜夜躁狠狠,亚洲AV无码久久,亚洲一区二区三区日本久久九http://www.shnenglu.com/converse/category/12481.html鎰熷叴瓚i鍩?楂樻ц兘鏈嶅姟鍣ㄧ紪紼?瀛樺偍,綆楁硶,Linux鍐呮牳zh-cnTue, 26 Jan 2010 20:20:43 GMTTue, 26 Jan 2010 20:20:43 GMT60tokyocabinet1.4.19闃呰絎旇錛堜簲錛塰ash鏁版嵁搴撴彃鍏ユ暟鎹祦紼?/title><link>http://www.shnenglu.com/converse/archive/2010/01/25/106425.html</link><dc:creator>閭h皝</dc:creator><author>閭h皝</author><pubDate>Mon, 25 Jan 2010 15:21:00 GMT</pubDate><guid>http://www.shnenglu.com/converse/archive/2010/01/25/106425.html</guid><wfw:comment>http://www.shnenglu.com/converse/comments/106425.html</wfw:comment><comments>http://www.shnenglu.com/converse/archive/2010/01/25/106425.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/converse/comments/commentRss/106425.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/converse/services/trackbacks/106425.html</trackback:ping><description><![CDATA[     鎽樿: tokyocabinet1.4.19闃呰絎旇錛堜簲錛塰ash鏁版嵁搴撴彃鍏ユ暟鎹祦紼?nbsp; <a href='http://www.shnenglu.com/converse/archive/2010/01/25/106425.html'>闃呰鍏ㄦ枃</a><img src ="http://www.shnenglu.com/converse/aggbug/106425.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/converse/" target="_blank">閭h皝</a> 2010-01-25 23:21 <a href="http://www.shnenglu.com/converse/archive/2010/01/25/106425.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>tokyocabinet1.4.19闃呰絎旇錛堝洓錛塰ash鏁版嵁搴揻reepool鐨勭粍緇囦笌綆$悊http://www.shnenglu.com/converse/archive/2010/01/22/106249.html閭h皝閭h皝Fri, 22 Jan 2010 14:38:00 GMThttp://www.shnenglu.com/converse/archive/2010/01/22/106249.htmlhttp://www.shnenglu.com/converse/comments/106249.htmlhttp://www.shnenglu.com/converse/archive/2010/01/22/106249.html#Feedback1http://www.shnenglu.com/converse/comments/commentRss/106249.htmlhttp://www.shnenglu.com/converse/services/trackbacks/106249.html鍦ㄧ涓鑺備腑宸茬粡鎻愬埌,榪欎竴涓儴鍒?鍦ㄥ垵濮嬪寲鐨勬椂鍊欎細鍏ㄩ儴璇誨叆閲囩敤malloc浠庡爢涓垎閰嶇殑鍐呭瓨涓?鎵浠ュ瀹冪殑澶ч儴鍒嗘搷浣滈兘鏄洿鎺ュ湪鍐呭瓨涓繘琛岀殑---闄や簡瑕佸悓姝ュ埌鏁版嵁搴撴枃浠朵腑鏃?

鎵鏈夌殑freepool,浠ユ暟緇勫艦寮忕粍緇囧湪涓璧?姣忎釜freepool鍏冪礌緇撴瀯浣撶殑瀹氫箟鏄?
typedef struct {                         // type of structure for a free block
  uint64_t off;                          // offset of the block
  uint32_t rsiz;                         // size of the block
} HDBFB;
鍙,姣忎釜freepool鍏蟲敞鐨勪粎鏈変袱涓洜绱?鎵淇濆瓨block鍦ㄦ暟鎹簱鏂囦歡涓殑offset,浠ュ強榪欏潡block鐨勫昂瀵?

褰撻渶瑕佹彃鍏ユ柊鐨勮褰曟椂,闇瑕佸湪褰撳墠鐨刦reepool涓繘琛屾煡璇?鐪嬫湁娌℃湁閫傚悎鐨刦reepool鍙互鍥炴敹鍒╃敤,鍥犳闇瑕佹牴鎹昂瀵歌繘琛屾煡璇?鎵浠ヤ負浜嗘彁楂樻煡璇㈤熺巼,freepool鏁扮粍涓殑鍏冪礌鏄牴鎹瘡涓猣reepool鐨勫昂瀵歌繘琛屾帓搴忕殑,榪欐牱鏍規(guī)嵁灝哄榪涜鏌ユ壘鏃跺氨鍙互閲囩敤浜屽垎鏌ユ壘鎻愰珮鏁堢巼浜?浣嗘槸瑕佹敞鎰忓埌鍙兘鍑虹幇鐨勬壘鍒扮殑灝哄涓嶇鍚堣姹?榪囧ぇ浜?澶т簬鎵闇灝哄鐨勪竴鍊嶄互涓?,榪欎釜鏃跺欎細灝嗚繖鍧梖reepool榪涜鎷嗗垎,涓閮ㄥ垎緇欎簣浣跨敤,鍓╀綑鐨勫洖鏀跺埌freepool涓?鍙﹀,濡傛灉鍦╢reepool涓煡鎵炬墍闇灝哄鍑虹幇浜嗗緢澶氭澶辮觸鐨勬儏鍐?涓鏃﹀け璐ヨ〃紺烘病鏈夌鍚堣姹傜殑freepool鍙互鍥炴敹鍒╃敤,榪欐椂灝遍渶瑕佸鍔犳暟鎹簱鏂囦歡澶у皬浠ュ姞鍏ユ柊鐨勮褰曚簡),灝遍渶瑕佸freepool榪涜涓嬈″悎騫舵搷浣?灝嗙浉閭葷殑freepool鍚堝茍璧鋒潵褰㈡垚灝藉彲鑳藉ぇ鐨刦reepool,鑰屽垽鏂槸鍚︾浉閭葷殑渚濇嵁灝辨槸鏍規(guī)嵁鍦ㄦ暟鎹簱鏂囦歡涓殑offset,姝ゆ椂鍙堜細灝嗘墍鏈夌殑freepool鏍規(guī)嵁offset榪涜涓嬈℃帓搴?鐒跺悗鍐嶈繘琛屽墠闈㈢殑鍚堝茍鎿嶄綔.

浠ヤ笂灝辨槸freepool鏁扮粍鐨勫ぇ浣撶粍緇囨儏鍐?鍥犱負瀹冧繚瀛樺湪鍐呭瓨閲岄潰鐨?鑰屼笖浼氱粡甯告湁鏇存柊,閭d箞灝變細鍑虹幇褰撳墠鐨刦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榪涜鍚堝茍,鍐呴儴瀹炵幇涓鍏堜細璋冪敤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鏄繚瀛樺湪鍐呭瓨涓殑,鑰屼笖鍙堣繘琛岃繃鎺掑簭鍥犳鍙互浣跨敤浜屽垎鏌ユ壘綆楁硶,鎵浠ュ瀹冭繘琛岀殑綆$悊鎿嶄綔榪樻槸杈冧負楂樻晥鐨?






閭h皝 2010-01-22 22:38 鍙戣〃璇勮
]]>
tokyocabinet1.4.19闃呰絎旇錛堜笁錛塰ash鏁版嵁搴撳垹闄ゆ暟鎹祦紼?/title><link>http://www.shnenglu.com/converse/archive/2010/01/19/105898.html</link><dc:creator>閭h皝</dc:creator><author>閭h皝</author><pubDate>Tue, 19 Jan 2010 13:18:00 GMT</pubDate><guid>http://www.shnenglu.com/converse/archive/2010/01/19/105898.html</guid><wfw:comment>http://www.shnenglu.com/converse/comments/105898.html</wfw:comment><comments>http://www.shnenglu.com/converse/archive/2010/01/19/105898.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.shnenglu.com/converse/comments/commentRss/105898.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/converse/services/trackbacks/105898.html</trackback:ping><description><![CDATA[榪欎竴鑺傚叧娉ㄦ牴鎹甼ey瀹氫綅鍒版暟鎹繘琛屽垹闄ょ殑鏁翠釜嫻佺▼銆?br><br>鍏堟潵鐪嬭繖涓繃紼嬬殑嫻佺▼鍥撅紝鍏跺疄寰堢畝鍗曪紝鍖呮嫭浠ヤ笅鍑犱釜鎸夐儴灝辯彮鐨勬楠わ細<br><img alt="" src="http://www.shnenglu.com/images/cppblog_com/converse/12791/r_tokyo%20cabinet%20remove%20key.png"><br><br>a) 棣栧厛錛屾牴鎹甼ey鏌ユ壘瀵瑰簲鐨勮褰曪紝榪欎釜鍦ㄤ笂涓鑺傚凡緇忓畬鏁寸殑浠嬬粛榪囦簡錛屽綋鏃朵篃鎻愬埌錛屾煡鎵炬搷浣滄槸鍚庣畫榪涜鍒犻櫎鍜屾彃鍏ユ柊鏁版嵁鏃剁殑鍩虹銆?br>濡傛灉娌℃湁鎵懼埌璁板綍錛岃鏄庡師鏉ュ氨娌℃湁錛岄偅涔堝氨涓嶅繀緇х畫涓嬪幓浜嗐?br>鍋囪鐜板湪鎵懼埌浜嗘墍瑕佸垹闄ょ殑鏁版嵁錛屾帴鐫浠ヤ笅鍑犳錛?br>b) 灝嗚璁板綍鐨刴agic number緗負0xb0錛岀涓鑺傝瑙ash鏁版嵁搴撴榪扮殑鏃跺欐彁鍒拌繃錛屾瘡鏉¤褰曠殑澶撮儴淇℃伅涓湁涓ょ涓嶅悓magic number錛屾牴鎹繖涓垽鏂竴鏉¤褰曟槸鍚﹁鍒犻櫎浜嗭紝鐜板湪灝嗚繖涓猰agic number緗負0xb0灝辨槸琛ㄧず榪欐潯璁板綍宸茬粡琚垹闄や簡銆?br>c) 灝嗚繖鏉¤鍒犻櫎鐨勮褰曟彃鍏ュ埌free pool鏁扮粍涓殑鍚堥備綅緗紝榪欐槸涓嬩竴鑺傜殑閲嶇偣錛岃繖閲屽厛鐭ラ亾榪欎釜鎿嶄綔灝卞ソ銆?br>d) 涓婁竴鑺傛彁鍒拌繃錛屽悓涓涓猙ucket index鏄互浜屽弶鏍戝艦寮忕粍緇囧湪涓璧風殑錛岃櫧鐒朵笉鏄鉤琛$殑浜屽弶鏍戯紝浣嗘槸鍒犻櫎浜嗕竴涓暟鎹箣鍚庝細鐮村潖浜屽弶鏍戠殑鎬ц川錛屾墍浠ラ渶瑕佸湪浜屽弶鏍戜腑鎵懼埌鍚堥傜殑璁板綍鏉ユ浛鎹㈠垹闄よ繖鏉¤褰曚箣鍚庡墿涓嬬殑浣嶇疆銆?br>鐔熸?zhèn)夋暟鎹l撴瀯涓庣畻娉曠殑閮界煡閬擄紝涓涓帓搴忎簩鍙夋爲濡傛灉鎸夌収涓簭閬嶅巻鐨勮瘽錛岄偅涔堟槸鏈夊簭鐨勩傛墍浠ヨ鍦ㄥ垹闄や竴涓褰曚箣鍚庝粛鐒朵繚鎸佹帓搴忎簩鍙夋爲鐨勬湁搴忔э紝鏄垹闄ゆ搷浣滅殑閲嶇偣錛屼笅闈㈠氨鏄疶C涓垹闄や竴涓褰曟椂鐨勮皟鏁寸畻娉曪細<br> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">if rec.left is not null and rec.right is null<br>    child = rec.left<br>else if rec.left is null and rec.right is not null<br>    child = rec.right<br>else if rec.left is null and rec.right is null<br>    child = null<br>else<br>    child = rec.left<br>    right = rec.right<br>    rec.right = child<br>    while (rec.right is not null)<br>        rec = rec.right<br><br>    rec.right = right<br><br>replace rec's original place with child </span><span style="color: #000000;"><br><br></span></div> <br>涔熷彲浠ヤ粠涓嬪浘涓潵鐞嗚В褰撳垹闄や竴涓褰曟椂錛屽畠鐨勫乏鍙沖瓙鑺傜偣閮戒笉涓虹┖鏃剁殑澶勭悊錛?br><img alt="" src="http://www.shnenglu.com/images/cppblog_com/converse/12791/r_fix%20binary%20tree.png"><br><br>浠庡浘涓彲浠ョ湅鍑猴紝褰撴墍瑕佸垹闄ょ殑鑺傜偣宸﹀彸瀛愯妭鐐歸兘涓嶄負絀烘椂錛屼細鍘誨鎵懼乏瀛愭爲涓殑鏈鍙寵竟鐨勫瓙鑺傜偣錛岀劧鍚庡皢寰呭垹闄よ褰曠殑鍙沖瓙鏍戝彉鎴愯繖涓渶鍙沖瓙鑺傜偣鐨勫彸瀛愭爲銆?br><br>闇瑕佹敞鎰忓埌鐨勬槸錛岀粡鍏哥殑鏁版嵁緇撴瀯綆楁硶涓紝褰撳湪鎺掑簭浜屽弶鏍戜腑鍒犻櫎涓涓妭鐐逛箣鍚庯紝鎵鍋氱殑璋冩暣涓庝笂闈㈢殑嫻佺▼鏈夋墍涓嶅悓錛岃櫧鐒朵篃鏄壘鍒扮殑鍘熻褰曠殑宸﹀瓙鏍戠殑鏈鍙寵妭鐐癸紝浣嗘槸鏄皢榪欎釜鏈鍙寵妭鐐圭洿鎺ユ浛鎹㈡帀鍘熸潵璁板綍鐨勪綅緗紝涔熷氨鏄涓嬪浘錛?br><img alt="" src="http://www.shnenglu.com/images/cppblog_com/converse/12791/r_fix%20binary%20tree2.png"><br><br>鎵浠ワ紝榪欓噷鍑虹幇浜嗕竴涓柊鐨勯棶棰橈紝TC涓殑璋冩暣綆楁硶鏄湁鍙兘瀵艱嚧鍒犻櫎璁板綍涔嬪悗浜屽弶鏍戜笉騫寵 鐨勶紝閭d箞涓轟粈涔堜笉閫夌敤絎簩縐嶆柟娉曞憿錛?br>鎴戠殑鐞嗚В鏄細<br>1錛?濡傚墠涓鑺傛墍榪幫紝TC涓殑浜屽弶鏍戞湰鏉ュ氨涓嶆槸蹇呯劧騫寵 鐨勶紝鎵浠C涓殑榪欑璋冩暣綆楁硶鏈夊彲鑳戒細鏈?#8220;璐熻礋寰楁”鐨勭粨鏋溿?br>2錛夌浜岀緇忓吀鐨勫仛娉曚腑錛岄渶瑕佺殑璋冩暣鍖呮嫭錛歛錛夊皢鏈鍙沖瓙鑺傜偣浠庡師鏉ョ殑鐖惰妭鐐逛笂鍒犻櫎 b錛夋渶鍙沖瓙鑺傜偣瑕佹浛鎹㈠師璁板綍鐨勪綅緗紝閭d箞瑕佸皢鍘熻褰曠殑宸﹀彸瀛愭爲鍒嗗埆璧嬪煎彉涓烘渶鍙沖瓙鑺傜偣鐨勫乏鍙沖瓙鏍戙備笂闈㈢殑榪欎釜璋冩暣錛屾瘡嬈¤皟鏁撮兘鏄渶瑕佷慨鏀硅妭鐐圭殑錛岃屾瘡嬈′慨鏀歸兘浼氭湁瀵圭鐩樼殑I/O鎿嶄綔銆?br>鑰岀涓縐嶅仛娉曞憿錛屼粎闇瑕佷竴嬈′慨鏀規(guī)搷浣?----灝嗗師璁板綍鐨勫彸瀛愭爲鍙樻垚鏈鍙沖瓙鑺傜偣鐨勫彸瀛愭爲鍗沖彲銆?br><br>緇煎悎榪欏嚑涓洜绱狅紝TC閫夋嫨浜咺/O杈冨皯鐨勫仛娉曘?br>鎴戜笉娓呮鎴戠殑鐞嗚В鏄惁鍚堢悊錛屾榪庤ˉ鍏呫?br><br>e錛夊垹闄や簡璁板綍錛屼篃璺蟲暣浜嗘爲鐨勭粨鏋勪箣鍚庯紝鏈鍚庣殑宸ヤ綔灝辨槸鏇存柊鏁版嵁搴撴枃浠秇eader鐨勪俊鎭?--鍥犱負褰撳墠璁板綍灝戜簡涓鏉°?br><br>鏈鍚庡垎鏋愪竴涓嬫暣涓垹闄ゆ搷浣滅殑鏈鍧忓鏉傚害錛岃繕鏄互1G鐨刡ucket瀵?6G鐨勬暟鎹簱鏂囦歡璁板綍涓轟緥錛?br>1錛夐鍏堟煡鎵懼厓绱狅紝鍓嶉潰涓鑺傝浜嗭紝闇瑕丱(4)嬈$鐩業(yè)/O+O(1)璇誨彇鍐呭瓨<br>2錛夋帴鐫緗墍鍒犻櫎璁板綍鐨刴agic number錛屼竴嬈$鐩業(yè)/O<br>3錛夊皢鍒犻櫎鎻掑叆鍒板悎閫傜殑free pool浣嶇疆錛岃繖涓笅涓鑺備細鎻愬埌錛屾槸鍦ㄥ唴瀛樹腑榪涜鐨勩?br>4錛夎皟鏁存爲緇撴瀯錛屽湪鎵鍒犻櫎璁板綍宸﹀彸瀛愭爲閮藉瓨鍦ㄧ殑鎯呭喌涓嬶紝棣栧厛瑕佹壘鍒版渶鍙沖瓙鑺傜偣錛岃繖鍙堟槸涓涓狾(4)鐨勭鐩業(yè)/O鎿嶄綔錛屾渶鍚庡皢鍘熻褰曠殑鍙沖瓙鏍戣祴鍊肩粰鏈鍙沖瓙鑺傜偣錛屽張鏄竴嬈$鐩業(yè)/O銆備笉榪囷紝涓婇潰榪欎釜鎺ㄦ柇涓庡墠闈㈡槸鏈夌煕鐩劇殑錛屽亣濡傚湪絎竴姝ユ煡鎵句腑宸茬粡闇瑕丱(4)鐨勪唬浠鋒墠鑳藉畾浣嶅埌鎵鍒犻櫎鍏冪礌浜嗭紝閭d箞鏈鍚庣殑榪欎釜璋冩暣鏍規(guī)湰娌℃湁蹇呰浜嗐?br><br><br> <img src ="http://www.shnenglu.com/converse/aggbug/105898.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/converse/" target="_blank">閭h皝</a> 2010-01-19 21:18 <a href="http://www.shnenglu.com/converse/archive/2010/01/19/105898.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>tokyocabinet1.4.19闃呰絎旇錛堜簩錛塰ash鏁版嵁搴撴煡鎵緆ey嫻佺▼http://www.shnenglu.com/converse/archive/2010/01/12/105500.html閭h皝閭h皝Tue, 12 Jan 2010 11:25:00 GMThttp://www.shnenglu.com/converse/archive/2010/01/12/105500.htmlhttp://www.shnenglu.com/converse/comments/105500.htmlhttp://www.shnenglu.com/converse/archive/2010/01/12/105500.html#Feedback2http://www.shnenglu.com/converse/comments/commentRss/105500.htmlhttp://www.shnenglu.com/converse/services/trackbacks/105500.html
浠庝笂涓鑺傜殑姒傝堪涓?鍙互鐪嬪埌record緇撴瀯浣撲腑鏈変袱涓垚鍛榣eft,right:
typedef struct {                         // type of structure for a record
  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;
璇存槑,姣忎釜record鏄瓨鏀懼湪涓涓被浜屽弶鏍戠殑緇撴瀯涓殑.

瀹為檯涓?TC浼氶鍏堟牴鎹竴涓猺ecord鐨刱ey鍘葷畻鍑鴻key鎵鍦ㄧ殑bucket index浠ュ強hash index,浠g爜濡備笅:
/* Get the bucket index of a record.
   `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;
}
闇瑕佺壒鍒彁閱掔殑涓鐐規(guī)槸,涓婇潰鐨勭畻娉曚腑,鏍規(guī)嵁key綆楀嚭鎵鍦ㄧ殑bucket index,鏄粡榪囨āTCHDB->bnum涔嬪悗鐨勭粨鏋?涔熷氨鏄,榪欎釜鍊兼槸鏈夐檺鍒剁殑---鏈澶т笉鑳借秴榪嘥CHDB鍒濆鍖栨椂寰楀埌鐨刡ucket鏈澶ф暟閲?鑰岀畻鍑虹殑浜岀駭hash鍊?鎴戞槸娌℃湁鐪嬪嚭鏉ユ湁鏁板間笂鐨勯檺鍒剁殑,涓轟粈涔?鐪嬩簡鍚庨潰鐨勫唴瀹瑰氨鏄庣櫧浜?

鍥犳,鎵鏈夋牴鎹褰曠殑key綆楀嚭bucket index鐩稿悓鐨勮褰曞叏閮戒互浜屽弶鏍戠殑褰㈠紡緇勭粐璧鋒潵,鑰屾瘡涓猙ucket array鍏冪礌瀛樻斁鐨勬暣鍨嬪煎氨鏄bucket鏍戞牴鎵鍦ㄨ褰曠殑offset.

鍒版,鐩稿叧鐨勭粨鏋勪綋鑱旂郴閮芥竻妤氫簡,涓嬮潰鐨勬祦紼嬪浘緇欏嚭浜嗘煡鎵句竴涓猭ey鐨勮褰曟槸鍚﹀瓨鍦ㄧ殑嫻佺▼:


綆鍗曠殑瑙i噴涓涓?榪欎釜鏌ユ壘鐨勬祦紼嬪氨鏄鍏堟牴鎹煡鎵劇殑key綆楀嚭鎵鍦ㄧ殑bucket,鐒跺悗鍦ㄨ繖涓猙ucket鐨勪簩鍙夋爲涓寜鐓ф潯浠墮亶鍘嗙殑榪囩▼.

鍓嶉潰鎻愬埌榪?bucket array鏄暣涓mmap鏄犲皠鍒板叡浜唴瀛樹腑鍘葷殑.鎴戜滑鏉ュ仛涓涓及璁?鍋囪瀛樻斁bucket array鐨勫唴瀛樹嬌鐢ㄤ簡1G,鑰岀湡姝e瓨鏀緍ecord鐨勬枃浠墮暱搴︽湁16G,涔熷氨鏄?bucket array鐨勫厓绱犱笌璁板綍澶ф鏄?:16鐨勫叧緋?鍋囪鎵閫夌殑hash綆楁硶瓚沖鐨勫ソ,浠ヨ嚦浜庢瘡涓褰曠殑key鍙互杈冧負騫沖潎鐨勫垎甯冨湪涓嶅悓鐨刡ucket index涓?涔熷氨鏄瘡涓猙ucket array鐨勫厓绱犵粍鎴愮殑浜屽弶鏍戜笂騫沖潎鏈?6涓厓绱?閭d箞涔熷氨鏈澶氶渶瑕丱(4)嬈¤鍙栨枃浠禝/O(姣忔鍘昏鍙栬褰曠殑鏁版嵁閮芥槸涓嬈¤紓佺洏鎿嶄綔) + O(1)嬈″唴瀛樿鎿嶄綔(鍥犱負闇瑕佸湪bucket array涓緱鍒版爲鏍瑰厓绱犵殑offset).

浣嗘槸絳夌瓑,涓婇潰榪樻湁涓浜涚粏鑺傛病鏈変氦寰呮竻妤?

棣栧厛,涓婇潰鐨勪簩鍙夋爲涓嶆槸綾諱技AVL,綰㈤粦鏍戣繖鏍風殑騫寵 浜屽弶鏌ユ壘鏍?涔熷氨鏄,寰堝彲鑳藉湪鏋佺鐨勬儏鍐典笅婕斿彉鎴愪竴涓摼琛?--鏍戠殑涓杈規(guī)病鏈夊厓绱?鍙︿竴杈規(guī)湁鍏ㄩ儴鐨勫厓绱?
鍏舵,涓婇潰鐨勬祦紼嬪浘涓繕鏈変竴鐐瑰氨鏄瘡嬈℃瘮杈冮鍏堟瘮杈冪殑鏄痟ash鍊?榪欎釜鍊肩殑濂ョ灝卞湪浜庤В鍐充笂闈㈡彁鍒扮殑閭d釜闂.鏃㈢劧鍙槸涓涓櫘閫氱殑浜屽弶鏍?鏃犳硶淇濊瘉騫寵 ,閭d箞灝遍氳繃綆楀嚭榪欎釜浜岀駭鐨刪ash鍊兼潵淇濊瘉騫寵 ---褰撶劧,鍓嶆彁渚濈劧鏄墍閫夋嫨鐨刪ash綆楁硶瓚沖鐨勫ソ,鍙互淇濊瘉key騫沖潎鐨勫垎甯?

鍓嶉潰鎻愬埌榪?闈炲鉤琛$殑浜屽弶鏍戝彧浼氬湪鏋佺鐨勬儏鍐典笅鎵嶄細婕斿彉涓轟竴涓瀬绔笉騫寵 鐨勪簩鍙夋爲--閾捐〃,鑰岃濡侫VL,綰㈤粦鏍戜箣綾葷殑騫寵 浜屽弶鏍?綆楁硶緙栫爜閮界浉瀵瑰鏉?璋冭瘯璧鋒潵涔熼夯鐑?鍑洪敊浜嗚璺熻繘鏇撮夯鐑?鍙﹀榪樺埆蹇樹簡,榪欎簺騫寵 浜屽弶鏍戜箣鎵浠ヨ兘淇濇寔騫寵 ,鍦ㄥ垹闄?澧炲姞鍏冪礌鏃跺仛鐨勮鏍戦噸鏂板鉤琛$殑鎿嶄綔,姣斿鏃嬭漿絳?閮芥槸瑕佹秹鍙婂埌璇誨啓鏍戠粨鐐圭殑,鑰岃繖浜?鐩墠閮芥槸瀛樻斁鍦ㄧ鐩樹笂鐨?--涔熷氨鏄繖鏄浉瀵硅緝璐規(guī)椂鐨勬搷浣?鎵浠ラ棶棰樺湪浜?鏄笉鏄煎緱涓鴻繖涓涓瀬绔殑鎯呭喌鍘諱紭鍖?鍙﹀,寮曞叆浜岀駭hash灝辨槸涓轟簡閮ㄥ垎瑙e喅榪欎釜鏋佺涓嶅鉤琛¢棶棰?瀹冪殑鎬濊礬綆鍗曚篃瀹規(guī)槗瀹炵幇,浣嗘槸寮曞叆鐨勫彟澶栦竴涓棶棰樺氨鏄瘡嬈℃煡鎵炬椂鏍規(guī)嵁key鍘葷畻bucket index鐨勬椂鍊?榪樿鑰楄垂鏃墮棿鍘葷畻hash index浜?

騫寵 鐐?榪樻槸騫寵 鐐?鏃墮棿榪樻槸絀洪棿,榪欐槸涓涓棶棰?

鎵浠?緇忚繃瀵筎C鐨刪ash鏁版嵁搴撴煡鎵緆ey嫻佺▼鐨勫垎鏋?鏈澶х殑鎰熷彈鏄?瀹冩病鏈変嬌鐢ㄥ鏉傜殑綆楁硶涓庢暟鎹粨鏋?鑰屾槸閫氳繃涓浜涘閥濡欑殑浼樺寲濡備簩綰ash鐨勫紩鍏?杈懼埌浜嗙郴緇熸晥鐜囧拰緙栫爜璋冭瘯澶嶆潅搴︿箣闂翠竴涓緝濂界殑騫寵 .瀛︿細"騫寵 "鍚勭鍥犵礌,鏄仛欏圭洰鍋氫簨鎯?閮借鎺屾彙鐨勪竴涓妧鑳?鑰岃繖涓?鍙湁澶氱粡鍘嗗鎯蟲墠鑳芥參鎱㈢Н绱簡.

濂戒簡,綆鍗曠殑鍥為【鏁翠釜鏌ユ壘key鐨勫叧閿偣:
1) 鎵鏈夌殑record鏄互浜屽弶鏍戠殑褰㈠紡緇勭粐鍦ㄥ悓涓涓猙ucket涓婇潰鐨?
2) 榪欎釜浜屽弶鏍戜笉鏄鉤琛$殑浜屽弶鏍?br>3) 涓轟簡瑙e喅闂浜岄犳垚鐨勬瀬绔笉騫寵 闂,TC寮曞叆浜嗕簩綰ash,浠ヤ繚璇佽繖涓簩鍙夋爲灝藉彲鑳界殑騫寵 .

浠ヤ笂,灝辨槸TC瀵硅褰?bucket鐨勭粍緇囨儏鍐?浠ュ強鏁翠釜鏌ユ壘綆楁硶鐨勬祦紼?鍙互鐪嬪埌,綆楁硶,緇撴瀯浣撳畾涔夌瓑絳夐兘涓嶅鏉?浣嗘槸鐢變簬宸у鐨勬瀯鎬?鏃㈠彲浠ヤ嬌鐢ㄥ敖鍙兘綆鍗曠殑綆楁硶/鏁版嵁緇撴瀯,鍙堣兘瑙勯伩鍙兘鍑虹幇鐨勪竴浜涢殣鎮(zhèn)?鍚屾椂榪樿兘淇濊瘉鏌ユ壘鐨勯珮鏁堢巼.

鏌ユ壘鏄痥ey-value褰㈠紡瀛樺偍鐨勬牳蹇冩祦紼?鑳藉灝嗚繖涓祦紼嬩紭鍖?瀵規(guī)暣涓郴緇熺殑鎬ц兘涔熸湁寰堝ぇ鐨勫獎鍝?





閭h皝 2010-01-12 19:25 鍙戣〃璇勮
]]>
榪欐槸tokyo cabinet鐨勪竴涓狟UG涔?/title><link>http://www.shnenglu.com/converse/archive/2009/12/03/102493.html</link><dc:creator>閭h皝</dc:creator><author>閭h皝</author><pubDate>Thu, 03 Dec 2009 14:09:00 GMT</pubDate><guid>http://www.shnenglu.com/converse/archive/2009/12/03/102493.html</guid><wfw:comment>http://www.shnenglu.com/converse/comments/102493.html</wfw:comment><comments>http://www.shnenglu.com/converse/archive/2009/12/03/102493.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/converse/comments/commentRss/102493.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/converse/services/trackbacks/102493.html</trackback:ping><description><![CDATA[     鎽樿:   <a href='http://www.shnenglu.com/converse/archive/2009/12/03/102493.html'>闃呰鍏ㄦ枃</a><img src ="http://www.shnenglu.com/converse/aggbug/102493.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/converse/" target="_blank">閭h皝</a> 2009-12-03 22:09 <a href="http://www.shnenglu.com/converse/archive/2009/12/03/102493.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>感谢您访问我们的网站,您可能还对以下资源感兴趣:</p> <a href="http://www.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.3-gold.cn" target="_blank">久久夜色精品国产噜噜亚洲AV</a>| <a href="http://www.zfrnhbv.com.cn" target="_blank">久久AV高清无码</a>| <a href="http://www.rcipbrdgydr.cn" target="_blank">久久精品国产一区二区三区 </a>| <a href="http://www.yzx777.cn" target="_blank">亚洲人成无码www久久久</a>| <a href="http://www.donki.net.cn" target="_blank">久久精品青青草原伊人</a>| <a href="http://www.iteethle.cn" target="_blank">国产精品久久久久久久</a>| <a href="http://www.17779.com.cn" target="_blank">久久久亚洲精品蜜桃臀</a>| <a href="http://www.pic789.cn" target="_blank">狼狼综合久久久久综合网</a>| <a href="http://www.jkzyzj.cn" target="_blank">久久99精品国产99久久6</a>| <a href="http://www.ohos33.cn" target="_blank">欧美黑人激情性久久</a>| <a href="http://www.designelite.com.cn" target="_blank">www.久久99</a>| <a href="http://www.pf925.cn" target="_blank">午夜精品久久久久久毛片</a>| <a href="http://www.94byq.cn" target="_blank">久久精品一区二区三区中文字幕</a>| <a href="http://www.newdalu.cn" target="_blank">亚洲色大成网站WWW久久九九</a>| <a href="http://www.yb121.com.cn" target="_blank">久久综合综合久久97色</a>| <a href="http://www.caoguowan.cn" target="_blank">久久午夜夜伦鲁鲁片免费无码影视 </a>| <a href="http://www.sgcam.com.cn" target="_blank">久久99热只有频精品8</a>| <a href="http://www.voxj.cn" target="_blank">思思久久好好热精品国产</a>| <a href="http://www.by1506.cn" target="_blank">草草久久久无码国产专区</a>| <a href="http://www.bodymaker.com.cn" target="_blank">久久青青草原精品国产</a>| <a href="http://www.huakuyaow.cn" target="_blank">一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 </a>| <a href="http://www.pxep.cn" target="_blank">久久人与动人物a级毛片</a>| <a href="http://www.zzbxgsx.cn" target="_blank">久久93精品国产91久久综合</a>| <a href="http://www.zysun.com.cn" target="_blank">99久久99久久久精品齐齐</a>| <a href="http://www.z1359.cn" target="_blank">色婷婷综合久久久中文字幕</a>| <a href="http://www.5qzone.cn" target="_blank">伊人伊成久久人综合网777</a>| <a href="http://www.you-yong.com.cn" target="_blank">狠狠综合久久综合中文88</a>| <a href="http://www.kou365.cn" target="_blank">亚洲国产精品久久久久网站</a>| <a href="http://www.hskx.org.cn" target="_blank">狠狠色婷婷久久一区二区三区</a>| <a href="http://www.zurpd.cn" target="_blank">99久久免费国产精品特黄</a>| <a href="http://www.gongcheng100.cn" target="_blank">亚洲国产精品狼友中文久久久</a>| <a href="http://www.llqu.cn" target="_blank">国产精品成人无码久久久久久</a>| <a href="http://www.52zx45.cn" target="_blank">色综合久久综精品</a>| <a href="http://www.17kav.cn" target="_blank">国产精品成人久久久久久久</a>| <a href="http://www.hbksinukse.cn" target="_blank">91精品国产91热久久久久福利</a>| <a href="http://www.baby-photo.com.cn" target="_blank">精品久久无码中文字幕</a>| <a href="http://www.jipiaocq.cn" target="_blank">久久久噜噜噜www成人网</a>| <a href="http://www.tom530.cn" target="_blank">国产日产久久高清欧美一区</a>| <a href="http://www.digital-agri.org.cn" target="_blank">国产精品对白刺激久久久</a>| <a href="http://www.fragrancebeads.cn" target="_blank">99久久国产综合精品麻豆</a>| <a href="http://www.oy14.cn" target="_blank">国产高潮国产高潮久久久91</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>