【OceanBase】19.内存数据罗盘策略-合并及LSM-TREE

1.内存数据落盘策略-合并

1).LSM Tree 技术简介
LSM Tree(The Log-Structured Merge-Tree)核心特点是利用顺序写来提高写性能。
数据更新先记录在MemStore中的MemTable里,然后再合并(Merge)到底层的SSTable里
SSTable和MemTable之间可以有多级中间数据,同样以key-value形式保存在磁盘上,逐级向下合并
2)memtable内存结构
OceanBase MemTable采用双索引结构(B+树索引以及哈希索引)
特点:
⚫ B+树索引能够更好地支持范围查找
⚫ 哈希索引是针对单行查找的一种优化
⚫ 每次事务执行时,MemTable会自动维护B+树索引与哈希索引之间的一致性

3)Undo流程:
如果要读取更老的历史快照,只需要顺着内存中的反向指针往前回溯即可,相当于在内存中执行数据库Undo操作

4)基于 LSM Tree 的实践:合并
OceanBase中最简单的LSM Tree只有C0层(MemTable)和C1层(SSTable)。两层数据的合并过程如下:
1. 将所有observer上的MemTable数据做大版本冻结(Major Freeze),其余内存作为新的MemTable继续使用
2. 将冻结后的MemTable数据合并(Merge)到SSTable中,形成新的SSTable,并覆盖旧的SSTable
3. 合并完成后,冻结的MemTable内存才可以被清空并重新使用

5)合并的细化
合并按照合并的宏块的不同,可以细化为全量合并、增量合并,渐进合并三种方式:
◼ 全量合并 :合并时间长,耗费IO和CPU。把所有的静态数据都读取出来,和动态数据归并,再写到磁盘中
◼ 增量合并:只会读取被修改过的宏块数据,和动态数据归并,并写入磁盘,对于未修改过的宏块,则直接重用
◼ 渐进合并:每次全量合并一部分,若干轮次后整体数据被重写一遍


6)对业务侧而言,合并存在哪些问题?
集群性
高消耗
时间长

如何避免?
转储

2.总结

合并的本质就是将内存的数据和磁盘数据合并到一起,按顺序写入罗盘。然后将内存表memtable里面的数据清空,重新接收新的更改,这个和TIDB里面是一样的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值