开发者社区> 问答> 正文

在OceanBase数据库中,不太理解oceanbase的合并原理,不是说达到内存阀值就会合并吗?

在OceanBase数据库中,不太理解oceanbase的合并原理,不是说达到内存阀值就会合并吗?但major合并又是和时间有关系。

展开
收起
想去床上睡觉 2024-08-07 08:19:13 46 0
来自:OceanBase
3 条回答
写回答
取消 提交回答
  • 这个只是一次把memtable 写入到ssttable的level 0 层,后续可能还要把ssttable level 0 -> level 1 , level 2 -此回答整理自钉群“[社区]技术答疑群OceanBase”

    2024-08-07 16:02:18
    赞同 展开评论 打赏
  • 你说的应该是两个概念,“不是说达到内存阀值就会合并吗”这个应该是转储,是 MemTable的物化过程,但是也只是物化成增量数据,“但major合并又是和时间有关系”这就是把物化后的增量数据与基线数据合并,一天一次,因为这个操作比较重
    image.png
    参考资料
    https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000034097
    回答不易请采纳

    2024-08-07 09:52:17
    赞同 1 展开评论 打赏
  • 合并方式
    合并有很多种不同的方式,具体的描述如下。

    全量合并

    全量合并是 OceanBase 数据库最初的合并算法,和 HBase 与 RocksDB 的 major compaction 过程是类似的。在全量合并过程中,会把当前的静态数据都读取出来,和内存中的动态数据合并后,再写到磁盘上去作为新的静态数据。在这个过程中,会把所有数据都重写一遍。全量合并会极大的耗费磁盘 IO 和空间,除了 DBA 强制指定外,目前 OceanBase 数据库一般不会主动做全量合并。

    增量合并

    在 OceanBase 数据库的存储引擎中,宏块是 OceanBase 数据库基本的 IO 写入单位,在很多情况下,并不是所有的宏块都会被修改,当一个宏块没有增量修改时,合并可以直接重用这个数据宏块, OceanBase 数据库中将这种合并方式称之为增量合并。增量合并极大地减少了合并的工作量,是OceanBase 数据库目前默认的合并算法。更进一步地,OceanBase 数据库会在宏块内部将数据拆分为更小的微块,很多情况下,也并不是所有的微块都会被修改,可以重用微块而不是重写微块。微块级增量合并进一步减少了合并的时间。

    渐进合并

    为了支持业务的快速发展,用户不可避免地要做加列、减列、建索引等诸多 DDL 变更。这些 DDL 变更对于数据库来说通常是很昂贵的操作。MySQL 在很长一段时间内都不能支持在线的 DDL 变更(直到 5.6 版本才开始对 Online DDL 有比较好的支持),而即使到今天,对于 DBA 来说,在 MySQL 5.7 中做 Online DDL 仍然是一件比较有风险的操作,因为一个大的 DDL 变更就会导致 MySQL 主备间的 replication lag。

    OceanBase 数据库在设计之初就考虑到了 Online DDL 的需求,目前在 OceanBase 数据库中加列、减列、建索引等 DDL 操作都是不阻塞读写的,也不会影响到多副本间的 paxos 同步。加减列的 DDL 变更是实时生效的,将对存储数据的变更延后到每日合并的时候来做。然而对于某些 DDL 操作如加减列等,是需要将所有数据重写一遍的,如果在一次每日合并过程中完成对所有数据的重写,那么对存储空间和合并时间都会是一个比较大的考验。为了解决这个问题,OceanBase 数据库引入了渐进合并,将 DDL 变更造成的数据重写分散到多次每日合并中去做,假设渐进轮次设置为 60,那么一次合并就只会重写 60 分之一的数据,在 60 轮合并过后,数据就被整体重写了一遍。渐进合并减轻了 DBA 做 DDL 操作的负担,同时也使得 DDL 变更更加平滑。

    并行合并

    在 OceanBase 数据库 V1.0 中增加了对分区表的支持。对于不同的数据分区,合并是会并行来做的。但是由于数据倾斜,某些分区的数据量可能非常大。尽管增量合并极大减少了合并的数据量,对于一些更新频繁的业务,合并的数据量仍然非常大,为此 OceanBase 数据库引入了分区内并行合并。合并会将数据划分到不同线程中并行做合并,极大地提升了合并速度。

    合并触发
    合并触发有三种触发方式:自动触发、定时触发与手动触发。

    image.png
    参考文档https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001050879

    2024-08-07 09:25:32
    赞同 1 展开评论 打赏
来源圈子
更多
收录在圈子:
+ 订阅
蚂蚁OceanBase数据库团队,用于OceanBase技术原理、运维经验和案例分享、对外交流。
问答排行榜
最热
最新

相关电子书

更多
DTCC 2022大会集锦《云原生一站式数据库技术与实践》 立即下载
阿里云瑶池数据库精要2022版 立即下载
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载