青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

那誰(shuí)的技術(shù)博客

感興趣領(lǐng)域:高性能服務(wù)器編程,存儲(chǔ),算法,Linux內(nèi)核
隨筆 - 210, 文章 - 0, 評(píng)論 - 1183, 引用 - 0
數(shù)據(jù)加載中……

tokyocabinet1.4.19閱讀筆記(一)hash數(shù)據(jù)庫(kù)概述

開始正式的研究key-value形式的持久化存儲(chǔ)方案了,第一個(gè)閱讀的項(xiàng)目是tokyo cabinet,版本號(hào)是1.4.19.

tokyo cabinet支持幾種數(shù)據(jù)庫(kù)形式,包括hash數(shù)據(jù)庫(kù),B+樹數(shù)據(jù)庫(kù),fix-length數(shù)據(jù)庫(kù),table數(shù)據(jù)庫(kù)。目前我僅看了第一種hash數(shù)據(jù)庫(kù)的實(shí)現(xiàn)。之所以選擇這個(gè),是因?yàn)榈谝贿@種類型的數(shù)據(jù)庫(kù)似乎是TC中使用的最多的一種,其次它的算法比之B+樹又更簡(jiǎn)單一些而效率上的表現(xiàn)也絲毫不差。

看看TC中代碼的組織。關(guān)于上面幾個(gè)分類的數(shù)據(jù)庫(kù)實(shí)現(xiàn),實(shí)際上在TC項(xiàng)目的代碼組織中各自以單個(gè)文件的形式出現(xiàn),比如hash數(shù)據(jù)庫(kù)的代碼全都集中在 tchdb.c/h中,也只不過(guò)4000多行罷了。除去這幾種數(shù)據(jù)庫(kù)的實(shí)現(xiàn)文件,其余的代碼文件功能可以大體上分為兩類,一類是輔助性質(zhì)的代碼,給項(xiàng)目中各個(gè)部分使用上的,另一部分就是單獨(dú)的管理數(shù)據(jù)庫(kù)的CLI程序的代碼,比如tchmgr.c/h就是用于管理HASH數(shù)據(jù)庫(kù)的CLI程序的代碼。之所以要交代一下項(xiàng)目中代碼的組織,無(wú)非是為了說(shuō)明,其實(shí)如果將問(wèn)題集中在HASH數(shù)據(jù)庫(kù)或者其他形式的數(shù)據(jù)庫(kù)實(shí)現(xiàn)上,起碼在TC中,所要關(guān)注的代碼是不多的。

首先來(lái)看數(shù)據(jù)庫(kù)文件是如何組織的。

從圖中可以看到,hash數(shù)據(jù)庫(kù)文件大致分為四個(gè)部分:數(shù)據(jù)庫(kù)文件頭,bucket 數(shù)組,free pool數(shù)組,最后的是真正存放record的部分。下面對(duì)這幾部分做一個(gè)說(shuō)明。

1)數(shù)據(jù)庫(kù)文件頭
數(shù)據(jù)庫(kù)文件頭部分存放的是關(guān)于該數(shù)據(jù)庫(kù)的一些總體信息,包括這些內(nèi)容:
name offset length feature
magic number 0 32 identification of the database. Begins with "ToKyO CaBiNeT"
database type 32 1 hash (0x01) / B+ tree (0x02) / fixed-length (0x03) / table (0x04)
additional flags 33 1 logical union of open (1<<0) and fatal (1<<1)
alignment power 34 1 the alignment size, by power of 2
free block pool power 35 1 the number of elements in the free block pool, by power of 2
options 36 1 logical union of large (1<<0), Deflate (1<<1), BZIP2 (1<<2), TCBS (1<<3), extra codec (1<<4)
bucket number 40 8 the number of elements of the bucket array
record number 48 8 the number of records in the database
file size 56 8 the file size of the database
first record 64 8 the offset of the first record
opaque region 128 128 users can use this region arbitrarily

需要說(shuō)明的是,上面這個(gè)表格來(lái)自tokyocabinet的官方文檔說(shuō)明,在這里。同時(shí),數(shù)據(jù)庫(kù)文件中需要存放數(shù)據(jù)的地方,使用的都是小端方式存放的,以下就不再就這點(diǎn)做說(shuō)明了。從上面的表格可以看出,數(shù)據(jù)庫(kù)文件頭的尺寸為256 bytes。
在操作hash數(shù)據(jù)庫(kù)的所有API中,都會(huì)用到一個(gè)對(duì)象類型為TCHDB的指針,該結(jié)構(gòu)體中存放的信息就包括了所有數(shù)據(jù)庫(kù)文件頭的內(nèi)容,所以每次在打開或者創(chuàng)建一個(gè)hash數(shù)據(jù)庫(kù)的時(shí)候,都會(huì)將數(shù)據(jù)庫(kù)文件頭信息讀入到這個(gè)指針中(函數(shù)tchdbloadmeta)。

2)bucket 數(shù)組
bucket array中的每個(gè)元素都是一個(gè)整數(shù),按照使用的是32位還是64位系統(tǒng),存放的也就是32位或者64位的整數(shù)。這個(gè)數(shù)組存放的這個(gè)整數(shù)值,就是每次對(duì) key 進(jìn)行hash之后得到的hash值所對(duì)應(yīng)的第一個(gè)元素在數(shù)據(jù)庫(kù)文件中的偏移量。

3)free pool數(shù)組
free pool數(shù)組中的每個(gè)元素定義結(jié)構(gòu)體如下:
typedef struct {                         // type of structure for a free block
  uint64_t off;                          // offset of the block
  uint32_t rsiz;                         // size of the block
} HDBFB; 

很明顯,僅有兩個(gè)成員,一個(gè)存放的是在數(shù)據(jù)庫(kù)文件中的偏移量,一個(gè)則是該free block的尺寸。free pool數(shù)組用于保存那些被刪除的記錄信息,以便于回收利用這些數(shù)據(jù)區(qū),后續(xù)會(huì)針對(duì)free pool相關(guān)的操作,API做一個(gè)詳細(xì)的分析。

4)record數(shù)據(jù)區(qū)
每個(gè)record數(shù)據(jù)區(qū)的結(jié)構(gòu)如下表:
name offset length feature
magic number 0 1 identification of record block. always 0xC8
hash value 1 1 the hash value to decide the path of the hash chain
left chain 2 4 the alignment quotient of the destination of the left chain
right chain 6 4 the alignment quotient of the destination of the right chain
padding size 10 2 the size of the padding
key size 12 vary the size of the key
value size vary vary the size of the value
key vary vary the data of the key
value vary vary the data of the value
padding vary vary useless data

當(dāng)然,上面這個(gè)結(jié)構(gòu)只是該record被使用時(shí)的結(jié)構(gòu)圖,當(dāng)某一項(xiàng)record被刪除時(shí),它的結(jié)構(gòu)就變?yōu)椋?br>
name offset length feature
magic number 0 1 identification of record block. always 0xB0
block size 1 4 size of the block
   
對(duì)比兩種情況,首先是最開始的magic number是不同的,當(dāng)magic number是0XB0也就是該record是已經(jīng)被刪除的free record時(shí),那么緊跟著的4個(gè)字節(jié)存放的就是這個(gè)free record的尺寸,而record后面的部分可以忽略不計(jì)了。

分析完了hash數(shù)據(jù)庫(kù)文件的幾個(gè)組成部分,從最開始的數(shù)據(jù)庫(kù)文件示意圖中還看到,從文件頭到bucket array這一部分將通過(guò)mmap映射到系統(tǒng)的共享內(nèi)存中,當(dāng)然,可以映射的內(nèi)容可能不止到這里,但是,數(shù)據(jù)庫(kù)文件頭+bucket array這兩部分是一定要映射到共享內(nèi)存中的,也就是說(shuō),hash數(shù)據(jù)庫(kù)中映射到共享內(nèi)存中的內(nèi)容上限沒(méi)有限制,但是下限是文件頭+bucket array部分。

同時(shí),free pool也會(huì)通過(guò)malloc分配一個(gè)堆上的內(nèi)存,存放到TCHDB的fbpool指針中。

這幾部分(除了record zone),通過(guò)不同的方式都分別的讀取到內(nèi)存中,目的就是為了加快查找的速度,后面會(huì)詳細(xì)的進(jìn)行說(shuō)明。


 

posted on 2010-01-10 10:22 那誰(shuí) 閱讀(7162) 評(píng)論(5)  編輯 收藏 引用 所屬分類: linux kernel

評(píng)論

# re: tokyocabinet1.4.19閱讀筆記(一)hash數(shù)據(jù)庫(kù)概述  回復(fù)  更多評(píng)論   

我最近也在閱讀源碼,希望與你一起學(xué)習(xí)!
2010-01-10 17:54 | 阿福

# re: tokyocabinet1.4.19閱讀筆記(一)hash數(shù)據(jù)庫(kù)概述  回復(fù)  更多評(píng)論   

@阿福
巧了,我也去過(guò)你blog看過(guò),說(shuō)起來(lái),還是國(guó)內(nèi)研究TC的人,或者說(shuō)閱讀TC代碼的人太少了點(diǎn)兒。
2010-01-10 19:16 | 那誰(shuí)

# re: tokyocabinet1.4.19閱讀筆記(一)hash數(shù)據(jù)庫(kù)概述  回復(fù)  更多評(píng)論   

請(qǐng)教一下為什么選擇tc而不是bdb?
2010-01-20 16:24 | guest

# re: tokyocabinet1.4.19閱讀筆記(一)hash數(shù)據(jù)庫(kù)概述[未登錄](méi)  回復(fù)  更多評(píng)論   

@guest
因?yàn)閠c相對(duì)而言較簡(jiǎn)單,對(duì)我入門閱讀數(shù)據(jù)庫(kù)實(shí)現(xiàn)比較方便
2010-01-20 16:26 | 那誰(shuí)

# re: tokyocabinet1.4.19閱讀筆記(一)hash數(shù)據(jù)庫(kù)概述  回復(fù)  更多評(píng)論   

不錯(cuò)!最近正巧也在關(guān)注 Key-Value 數(shù)據(jù)庫(kù)。

目前 NoSQL 方案越來(lái)越被重視,感覺(jué)類似 bdb 的東西將更火~~

TC代碼中命名方式相當(dāng)不喜歡 :( TC 的作者相當(dāng)喜歡搞一個(gè)很長(zhǎng)的 .c 文件。。。
2010-02-01 23:10 | hightman
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产日韩欧美中文在线播放| 蜜桃av一区二区三区| 亚洲综合国产精品| 99精品久久久| 99在线精品视频在线观看| 日韩午夜av在线| 日韩视频不卡| 在线亚洲欧美| 午夜欧美大片免费观看 | 久久久久中文| 免费看精品久久片| 欧美日韩免费| 国模吧视频一区| 亚洲区一区二区三区| 亚洲视频免费看| 久久视频免费观看| 欧美黄色精品| 亚洲欧美日韩精品久久| 欧美中文字幕| 欧美日韩国产成人在线| 国产女人精品视频| 欧美在线免费视屏| 在线中文字幕一区| 国产欧美日韩在线播放| 1024国产精品| 亚洲欧美视频在线| 免费不卡在线观看av| 亚洲国产三级网| 亚洲欧美久久久久一区二区三区| 另类天堂av| 国产精品欧美日韩一区| 亚洲欧洲一区二区三区久久| 欧美中文在线免费| 亚洲三级影片| 久久一区二区三区四区| 国产精品一区视频| 99一区二区| 欧美大片在线观看一区| 欧美一激情一区二区三区| 欧美日韩国产在线观看| 1024国产精品| 美女精品国产| 久久er精品视频| 国产乱码精品一区二区三区忘忧草| 最新成人av网站| 免费观看一区| 久久久精品动漫| 国产一区二区三区av电影 | 亚洲精品国产欧美| 美女日韩在线中文字幕| 韩国av一区二区三区四区| 欧美一区二区成人6969| 一本久久a久久精品亚洲| 欧美电影打屁股sp| 91久久嫩草影院一区二区| 美女久久一区| 久久亚洲不卡| 亚洲国产岛国毛片在线| 裸体歌舞表演一区二区| 久久久精品日韩欧美| 激情成人亚洲| 免费成人网www| 欧美ed2k| 99日韩精品| 一二三区精品| 国产精品美女www爽爽爽| 午夜一级久久| 久久福利资源站| 亚洲国产精品一区二区久| 欧美激情精品久久久久久黑人| 久色成人在线| 日韩一区二区精品葵司在线| 欧美激情亚洲国产| 欧美精品粉嫩高潮一区二区| 亚洲色图在线视频| 亚洲免费在线视频| 伊人精品视频| 亚洲精品影院| 国产精品区一区| 国产亚洲欧美一区| 国产在线播放一区二区三区| 久久久亚洲欧洲日产国码αv| 久久精品视频播放| 伊人激情综合| 亚洲美女黄色| 国产视频一区二区三区在线观看| 久久久噜噜噜| 欧美极品aⅴ影院| 午夜精品网站| 久久久久国产精品一区三寸| 亚洲精品一区二区三区99| 一区二区三区日韩在线观看| 国产亚洲一区在线播放| 亚洲国产综合在线看不卡| 欧美午夜久久久| 免费人成精品欧美精品| 欧美日韩综合另类| 久久在线免费观看| 欧美三级欧美一级| 久久综合中文| 欧美香蕉大胸在线视频观看| 美女黄网久久| 国产精品成人在线观看| 免费黄网站欧美| 国产精品青草久久| 亚洲第一精品久久忘忧草社区| 国产精品美女| 亚洲精品中文字幕有码专区| 一色屋精品视频在线观看网站| 一本色道久久综合亚洲精品不| 黄色成人在线观看| 亚洲一区二区三区精品在线| 亚洲久久成人| 毛片一区二区三区| 久久久999国产| 国产精品久久久免费| 亚洲国产成人av| 在线不卡中文字幕| 久久高清一区| 久久久久国产精品人| 国产精品毛片高清在线完整版| 亚洲精品国产拍免费91在线| 亚洲欧洲一区| 欧美国产综合视频| 欧美承认网站| 在线成人av网站| 久久久综合精品| 久久精品视频在线播放| 国产精品v欧美精品v日韩| 亚洲美女av网站| 一区二区电影免费在线观看| 欧美高清视频一区| 亚洲风情在线资源站| 亚洲黄网站黄| 麻豆精品精华液| 欧美激情国产日韩| 亚洲伦伦在线| 欧美另类69精品久久久久9999| 亚洲国产精品视频| 亚洲乱码国产乱码精品精| 欧美激情精品久久久| 亚洲高清视频的网址| 亚洲精品专区| 欧美日韩一区二区三区在线看| 亚洲精品女人| 99国产精品视频免费观看一公开| 国产自产精品| 欧美暴力喷水在线| 在线观看一区| 看欧美日韩国产| 亚洲国产欧美一区| 一区二区免费在线观看| 欧美色图五月天| 一区二区三区日韩欧美| 欧美一区二区三区另类 | 亚洲欧美日韩人成在线播放| 国产精品久久久久久久久久直播 | 在线播放中文一区| 欧美激情一区二区三区四区| 一级日韩一区在线观看| 欧美呦呦网站| 亚洲精品男同| 国产精品一区久久久久| 久久视频这里只有精品| 亚洲精品日日夜夜| 欧美在线999| 亚洲娇小video精品| 欧美午夜不卡在线观看免费| 久久国产精品久久久久久久久久| 欧美激情精品久久久久久久变态| 亚洲无人区一区| 激情欧美丁香| 欧美性久久久| 久久永久免费| 亚洲一区二区精品在线| 免费亚洲电影| 新67194成人永久网站| 1204国产成人精品视频| 国产精品成人aaaaa网站| 久久久久久久久岛国免费| 一区二区高清在线| 免费在线欧美黄色| 欧美中文在线观看| 99re视频这里只有精品| 好男人免费精品视频| 欧美日韩亚洲网| 欧美成人日韩| 久久青草欧美一区二区三区| 亚洲午夜在线| 日韩一区二区精品| 欧美成人黑人xx视频免费观看| 午夜精品视频网站| 99热这里只有成人精品国产| 国内精品嫩模av私拍在线观看| 国产精品成人一区二区艾草| 欧美激情网友自拍| 久久综合九色九九| 久久国产精品一区二区| 亚洲午夜激情网站| 99re热精品|