An Introduction to Be-trees and Write Optimization 学习笔记

本文介绍了Bε-Tree的数据结构,重点讲述了插入、删除和查询操作的优化,强调了缓冲区在性能提升中的作用。Bε-Tree通过批量刷数据和延迟应用消息来减少IO成本,适用于写密集型场景。
摘要由CSDN通过智能技术生成

An Introduction to Be-trees and Write Optimization 学习笔记

paper链接An Introduction to Be-trees and Write Optimization

1 背景

Be-Tree结构如下:

Be-Tree结构

  1. 在B-Tree和Bε-Tree中,内部节点存储枢轴键和子指针,叶节点存储键值对(按key排序)。

    问:叶子节点多大?键值对怎么在叶子节点中存储?一个叶子多个键值对?

  2. 大小为B的叶子包含B个键值对,下面称之为items

  3. Bε-Tree的区别在于,内部节点还为缓冲区分配了一些空间,每个内部节点中的缓冲区用于存储messages(消息)messages就是编码后的更新操作(插入、删除),这个更新最终将应用于该节点下面的叶子节点中的items(键值对)

    问:本文的B-Tree是不是B+Tree,因为感觉所有k-v都保存在叶子,中间节点只做索引


2 插入和删除操作

2.1 插入过程
  1. 插入操作被编码为插入消息insert messages

  2. 寻址到特定key,然后把insert messages添加到根节点的buffer中

  3. 当一个节点的buffer填满后,将一批message(符合该孩子的message)刷新到该节点的一个孩子

  4. 通常选取具有最多未决消息pending messages的孩子

    **快速响应:**这样可以尽快把pending message刷到节点里面去

    **分摊IO成本:**这样也可以下刷的时候保证每次写数据量不会太少,数据太少就变成随机小写了

  5. 每条message最终都会传递到适当的叶子节点,并将新的k-v添加到叶子

  6. 叶节点变得太满时分裂(同B树)

  7. 内部节点有太多孩子时分裂(同B树),buffer中的message会在两个新节点间分配

2.2 性能关键
  1. 批量从根节点向下刷数据,新消息存储在根节点附近,避免全盘查找

  2. 仅当buffer满时(积累足够message)才向下刷,分摊IO成本

  3. 小的随机的插入有很好的优化效果

2.3 删除过程
  1. 删除操作被编码为墓碑消息tombstone message
  2. 当墓碑消息刷新到叶子节点时,删除对应的item和这个tombstone message
  3. 在墓碑消息刷到叶子之前,被删除的item甚至整个叶子节点都持续存在
  4. 删除过程和插入类似,也是消息传递过程
2.4 优化
  1. 避免大量消息全部流入一个叶子节点

  2. 直接将所有消息以及该叶子的所有其他未决消息刷新到叶子

  3. 启发式的方法(TokuDBBetrFS


3 查询操作

3.1 查询过
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值