本节主要介绍副本相关的基础知识及 OceanBase 数据库支持的副本类型。
副本相关知识
在介绍副本前,需要了解以下信息:
Log:本文中主要指与事务相关的 Clog 日志。
MemTable:表示目前内存中已经被读写更改过的数据,也可称之为内存表。
SSTable:表示存储在磁盘中的基线数据,当数据被事务读取或修改时,会暂存在 MemTable 中。合并发生时 MemTable 中的数据会和 SSTable 中的数据进行合并形成更新版本的 SSTable。
OceanBase 数据库是以表分区(partition)为原子粒度进行管理的,为了数据安全和提供高可用的数据服务,每个分区数据在物理上存储多份,每一份叫做分区的一个副本。每个副本,包括存储在磁盘上的静态数据(SSTable)、存储在内存的增量数据(MemTable)以及记录事务的日志三类主要的数据。根据存储数据种类的不同,副本有几种不同的类型,以支持不同业务在在数据安全,性能伸缩性,可用性,成本等之间的选择。
副本类型
OceanBase 数据库中有多种副本类型。
OceanBase 数据库中副本类型也有以下几种:
全能型副本:目前支持的普通副本,拥有事务日志、MemTable 和 SSTable 等全部完整的数据和功能。它可以随时快速切换为 Leader 以对外提供服务。
日志型副本:只包含日志的副本,没有 MemTable 和 SSTable。它参与日志投票并对外提供日志服务,可以参与其他副本的恢复,但自己不能变为主提供数据库服务。
只读型副本:包含完整的日志、MemTable 和 SSTable 等。但是它的日志比较特殊,它不作为 Paxos 成员参与日志的投票,而是作为一个观察者实时追赶 Paxos 成员的日志,并在本地回放。这种副本可以在业务对读取数据的一致性要求不高的时候提供只读服务。因其不加入 Paxos 成员组,又不会造成投票成员增加导致事务提交延时的增加。
以下表格展示了上述副本的特性差异。
特性 | 全能型 | 日志型 | 只读型 |
---|---|---|---|
LOG | 有,参与投票(STNC_CLOG) | 有,参与投票(STNC_CLOG) | 有,但不属于 Paxos 组,只是 listener(ASYNC_CLOG) |
MemTable | 有(WITH_MEMSTORE) | 无(WITHOUT_MEMSTORE) | 有(WITH_MEMSTORE) |
SSTable | 有(WITH_MEMSTORE) | 无(WITHOUT_MEMSTORE) | 有(WITH_MEMSTORE) |
数据安全 | 高 | 低 | 中 |
恢复为 Leader 的时间 | 快 | 不支持 | 不支持 |
资源成本 | 高 | 低 | 高 |
服务 | Leader 提供读写, Follower 可非一致性读 | 不可读写 | 非一致性读 |
名称(缩写) | FULL(F) | LOGON(L) | READONLY(R) |
副本类型值 | 0 | 5 | 16 |