暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

转储管理概述

原创 huayumicheng 2023-08-26
193

本节主要介绍分层转储的实现原理。

OceanBase 数据库的存储引擎采用 LSM-Tree 架构,数据大体上被分为 MemTable 和 SSTable 两部分,当 MemTable 的内存使用达到一定阈值时,就需要将 MemTable 中的数据存储到磁盘上以释放内存空间,这个过程称为转储。在转储之前首先需要保证被转储的 MemTable 不再进行新的数据写入,这个过程称为冻结(Minor Freeze),冻结会阻止当前活跃的 MemTable 再有新的写入,同时会生成新的活跃 MemTable。

分层转储

不使用分层转储时,OceanBase 数据库在同一时刻只会维护一个转储 SSTable,当 MemTable 需要进行转储时,会将 MemTable 中的数据与转储 SSTable 中的数据进行归并。随着转储次数不断增多,转储 SSTable 的大小也越来越大,而一次转储需要操作的数据量也越来越多,导致转储速度越来越慢,进而可能导致 MemTable 内存不足。

因此 OceanBase 数据库引入了分层转储的结构,在原有的基础上增加了 L0 层。

  • L0 层(Mini SSTable)

    被冻结的 MemTable 会直接 Flush 为 Mini SSTable。OceanBase 数据库内部可以同时存在多个 Mini SSTable。

    L0 层内部支持下压,但必须选择 Version 值域连续的 SSTable。

  • L1 层(Minor SSTable)

    大多数情况下仅有一个 Minor SSTable。

    每次下压都会在 L1 层生成新的 Minor SSTable,代替原有的 Minor SSTable。

  • L2 层(Major SSTable)

    基线数据,在合并时产生。一般情况下仅有一个。

分层转储内部实现原理如下图所示。

转储

转储触发方式

转储支持自动触发和手动触发两种方式。


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论