您的位置:首页 > 数据库

Tokyo Cabinet Hash数据库存储和索引结构

2015-07-31 22:50 369 查看
先看图:



-----------------------------------------------------------------------------------------------------

head:                  数据库头文件.

-----------------------------------------------------------------------------------------------------

bucket Array:      hash索引数组,存放对key进行hash之后得到的hash值所对应的第一个

                           元素在数据库文件中的偏移量.  比如当第一个数据来的时候请求存储,这时计算

                           到该key的hash index值是1,在bucket array数组中找到1对应的位置,发现是NULL,

                           就将这个值存在目前数据存储区的第一个可用位置。并将这个位置记录到bucket array里.

-----------------------------------------------------------------------------------------------------

freepool array:    数据文件中空闲的区域,在新插入数据时先在里面查找是否有合适的位置,当删除一个

                           record时,会把该record的偏移和大小记录到里面.

-----------------------------------------------------------------------------------------------------

record:                存放record的数据区.

-----------------------------------------------------------------------------------------------------

MSIZ:                 最小mmap大小,即: head+bucket array的大小, hash数组的索引区必须使用mmap

                           映射到内存

-----------------------------------------------------------------------------------------------------

XMSIZ:              内存比较充足的情况下, 除了mmap索引区域外还可以mmap一部分rcord区域的内容,

                          加快读写速度

-----------------------------------------------------------------------------------------------------

                           

hash数据库的原理是通过key值用一个hash算法算出一个bidx值,然后在这个表(bucket array)里查这个bidx

对应的key-value值在文件中的偏移,再在文件中查找record记录.

当然hash算法是会冲突的,当不同的key值算到了同样的hash,那我们仅用上面的一个bucket array是不能

区分的, Tokyo Cabinet采用一个二叉树来管理冲突的key,  hash相等的所有记录都是互相用数据单元的left,

right指针(其实就是一个offset值)连接起来的 如下图 :



转载请注明出处~~ 谢谢~~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: