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

先看图:


-----------------------------------------------------------------------------------------------------
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值)连接起来的 如下图 :


转载请注明出处~~ 谢谢~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值