searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

B树和LSM树对比

2023-10-26 02:43:07
2
0

B树和LSM树比较

  • 读写速度

    • 写:LSM树快,读慢是必须检查几种不同的数据结构和不同压缩(Compaction)层级的 SSTables

    • 读:B树快

  • 特点对比

      • B树

        • 每块数据都必须至少写入两次:一次写入预先写入日志(WAL),一次写入树页面本身(如果有分页还需要再写入一次)

        • 即使在该页面中只有几个字节发生了变化,也需要接受写入整个页面的开销。

        • 写放大代价:存储引擎写入硬盘的次数越多,可用硬盘带宽内它能处理的每秒写入次数就越少

      • LSM树

        • 通常能够比 B 树支持更高的写入吞吐量,部分原因是它们有时具有较低的写放大(尽管这取决于存储引擎的配置和工作负载),部分是因为它们顺序地写入紧凑的 SSTable 文件而不是必须覆写树中的几个页面

    • 空间占用

      • LSM树

        • LSM 树可以被压缩得更好

        • LSM 树不是面向页面的,并且会通过定期重写 SSTables 以去除碎片,所以它们具有较低的存储开销,特别是当使用分层压缩(leveled compaction)

      • B树

        • 碎片化(fragmentation)留下一些未使用的硬盘空间:当页面被拆分或某行不能放入现有页面时,页面中的某些空间仍未被使用

    • 读写等业务操作

      • LSM树

        • 压缩过程有时会干扰正在进行的读写操作

        • 对吞吐量和平均响应时间的影响通常很小,但是日志结构化存储引擎在更高百分位的响应时间有时会相当长

      • B树

        • 更具备可预测性,影响更小

    • 高写入吞吐量场景

      • LSM树

        • 数据库越大,压缩所需的硬盘带宽就越多

        • 写入吞吐量很高,并且压缩没有仔细配置好,有可能导致压缩跟不上写入速率

        • 在这种情况下,硬盘上未合并段的数量不断增加,直到硬盘空间用完,读取速度也会减慢,因为它们需要检查更多的段文件。通常情况下,即使压缩无法跟上,基于 SSTable 的存储引擎也不会限制传入写入的速率

      • B树

        • 每个键只存在于索引中的一个位置,而日志结构化的存储引擎可能在不同的段中有相同键的多个副本。这个方面使得 B 树在想要提供强大的事务语义的数据库中很有吸引力:在许多关系数据库中,事务隔离是通过在键范围上使用锁来实现的,在 B 树索引中,这些锁可以直接附加到树上

0条评论
0 / 1000
xinjiefeng
8文章数
0粉丝数
xinjiefeng
8 文章 | 0 粉丝
原创

B树和LSM树对比

2023-10-26 02:43:07
2
0

B树和LSM树比较

  • 读写速度

    • 写:LSM树快,读慢是必须检查几种不同的数据结构和不同压缩(Compaction)层级的 SSTables

    • 读:B树快

  • 特点对比

      • B树

        • 每块数据都必须至少写入两次:一次写入预先写入日志(WAL),一次写入树页面本身(如果有分页还需要再写入一次)

        • 即使在该页面中只有几个字节发生了变化,也需要接受写入整个页面的开销。

        • 写放大代价:存储引擎写入硬盘的次数越多,可用硬盘带宽内它能处理的每秒写入次数就越少

      • LSM树

        • 通常能够比 B 树支持更高的写入吞吐量,部分原因是它们有时具有较低的写放大(尽管这取决于存储引擎的配置和工作负载),部分是因为它们顺序地写入紧凑的 SSTable 文件而不是必须覆写树中的几个页面

    • 空间占用

      • LSM树

        • LSM 树可以被压缩得更好

        • LSM 树不是面向页面的,并且会通过定期重写 SSTables 以去除碎片,所以它们具有较低的存储开销,特别是当使用分层压缩(leveled compaction)

      • B树

        • 碎片化(fragmentation)留下一些未使用的硬盘空间:当页面被拆分或某行不能放入现有页面时,页面中的某些空间仍未被使用

    • 读写等业务操作

      • LSM树

        • 压缩过程有时会干扰正在进行的读写操作

        • 对吞吐量和平均响应时间的影响通常很小,但是日志结构化存储引擎在更高百分位的响应时间有时会相当长

      • B树

        • 更具备可预测性,影响更小

    • 高写入吞吐量场景

      • LSM树

        • 数据库越大,压缩所需的硬盘带宽就越多

        • 写入吞吐量很高,并且压缩没有仔细配置好,有可能导致压缩跟不上写入速率

        • 在这种情况下,硬盘上未合并段的数量不断增加,直到硬盘空间用完,读取速度也会减慢,因为它们需要检查更多的段文件。通常情况下,即使压缩无法跟上,基于 SSTable 的存储引擎也不会限制传入写入的速率

      • B树

        • 每个键只存在于索引中的一个位置,而日志结构化的存储引擎可能在不同的段中有相同键的多个副本。这个方面使得 B 树在想要提供强大的事务语义的数据库中很有吸引力:在许多关系数据库中,事务隔离是通过在键范围上使用锁来实现的,在 B 树索引中,这些锁可以直接附加到树上

文章来自个人专栏
性能分析
6 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0