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里面是一样的。