Kyoto Cabinet 实现原理

本文详细介绍了Kyoto Cabinet的实现原理,包括hashdb和treedb两种存储结构。hashdb利用哈希表和文件系统实现,采用Murmur算法作为哈希函数,并详细讨论了文件恢复、数据丢失及碎片问题。treedb则使用最小B+树,其持久化通过hashdb,内部实现了LRU缓存策略以减少磁盘IO。文章还提到了事务处理和锁的实现细节。
摘要由CSDN通过智能技术生成

       由于最近在做分布式存储系统,需要一个小、性能好、靠谱的存储引擎,我们瞄准了Kyoto Cabinet,希望通过分析源码能对它进行改造成我们需要的引擎,这一工作落在我身上,于是我花了一星期时间彻底地分析了Kyoto Cabinet源码,下面将分享下由Kyoto Cabinet源码分析出的实现原理。

       下面主要分析hashdb和treedb这两种存储结构,其他的要么简单,要么类似,就不分析了。

一、hashdb

      hashdb,顾名思义就是哈希表,只是哈希表存放在文件系统而不是内存,复杂度比存在内存大多了,冲突采用链表或二叉树解决。

      大家对哈希表应该都比较熟悉,它由三要素组成:哈希函数,哈希表和冲突解决方法。在无冲突情况下,查找、插入和更新复杂度为O(1);有冲突情况下的复杂度就视冲突情况来定复杂度了。增加哈希表的桶数,可以减少冲突,但会牺牲空间,所以具体应用时,需要权衡冲突和空间。

     下面分别对上面介绍的三要素是如何hashdb实现的。

(1)哈希函数

      hashdb的哈希函数是采用MurMur算法。具体可以看维基百科的介绍:http://zh.wikipedia.org/wiki/Murmur%E5%93%88%E5%B8%8C,实现函数是hashmurmur,这里就不贴代码了。

(2)哈希表

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值