Tokyo Cabinet TCHDB源码阅读——delayed record pool和tchdbputasyncimpl相关函数代码注释

     在TCHDB结构中跟异步写操作相关的成员有以下几个:

 

 

    从上面的注释可知,DRP2个缓冲池,其中drpool是我们传统意义上的缓冲池,而drpdef又是针对drpool做了一次缓冲,仅仅看这里的英文注释我感觉有点难理解,后面看了源码我再尝试说说自己对这两个缓冲区的理解。  

    在tchdbputasyncimpl函数中下面这个语句片段初始化DRPdelayed record pool)区:

      hdb->drpoff = hdb->fsiz这个语句可知,每次DRP区(由drpool指针指向)中的记录都是从文件末尾开始添加的,再由同步写操作tchdbput函数源代码可知,该函数会在写入记录前检查前面的写入操作是否为异步操作,如果是,则它会刷新异步写缓冲区并删除该异步写缓冲区,从而保证同步写操作执行时,所有的异步写操作都完成,因此,TC中的异步写操作和同步写操作不会交错混杂在一起,这也在一定程度上简化了异步写操作的实现。

下面是tchdbputasyncimpl源码及注释:

    通过阅读源代码,我大概说下自己对drpool缓冲区和drpdef缓冲区的功能的个人理解:在异步写入模式下,drpool缓冲区中的记录具有以下3个特点:

1)在记录所在的冲突树中,它们的二级hash值和树中任何记录的二级hash都不相同。

2)它们会按put的顺序被添加到数据文件尾部。

3drpool中存放的记录格式和它们在文件中的格式完全一致,因此在下次写入数据文件的时候不需要额外处理了。

    至于在drpdef缓冲区中的记录,都能在它们对应的冲突树中找到二级hash值相等的记录,并且它们添加到数据文件的方式暂时也没有决定,只有等到刷新缓冲区时调用tchdbputimpl才决定如何写入数据文件。另外,drpdef中存放的是recordkey大小、value大小、key值和value值,在写入数据文件时还需要构造才合适的文件记录格式。

 

    下面是tchdbdrpappend函数代码及注释:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值