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

第三章:如何使用 OceanBase 社区版 3.8(高级)如何使用 OceanBase 复制表

185

3.8(高级)如何使用 OceanBase 复制表

复制表原理

复制表指的是一种特殊的表。在生产环境中,普通的表默认为三副本,即一个主副本和两个备副本。备副本通过同步主副本的事务日志 clog 保持同步,同步协议是 Paxos 协议。

主副本的事务日志只有在多数成员确认落盘后,事务修改才会生效。默认情况下,读写都是在主副本上,备副本不提供读写服务。应用开启会话或语句级别的弱一致性读时,备副本可能会提供只读服务。但是备副本的读会有些许延迟。

普通表可以变为复制表,然后主副本和所有备副本之间使用全同步协议。主副本的事务日志只有在所有副本成员确认落盘后,事务修改才会生效。所以主副本跟所有备副本的数据理论上都是强一致的。


复制表场景

传统普通的表,主副本可能会成为读写瓶颈,此时业务会使用读写分离技术,将只读查询分离出去,运维将只读查询路由到备副本。该操作的风险在于备副本理论上有一定延时。

如果表是复制表,则备副本没有延迟问题。这是复制表的一种使用场景,前提是开启弱一致性读。

复制表最有用的场景是业务数据库做了水平拆分后,有部分业务表不适合拆分。前者的数据主副本有可能在所有机器上,后者的主副本只会在某台机器上。OceanBase 数据库里一个事务的 SQL 都会跟随到事务开始时那条 SQL 的路由,如果某个 SQL 被路由到的节点不是该 SQL 访问的分区的主副本节点,这个 SQL 就属于远程 SQL。如果这个分区所在的表是复制表,则这条 SQL 就会在本机执行,从而提升性能。

复制表使用的前提是表的修改频率不能太高,每个事务的平均延时比普通表的事务延时要大。


复制表语法

您可以在创建表时就指定复制表属性 DUPLICATE_SCOPE。复制表属性有以下两个值:

  • NONE:这个是默认值,表示是普通的表。

  • CLUSTER:表的备副本分布在租户资源池所在的所有机器上。

示例:

mysql> create table t1(id bigint not null auto_increment , c1 varchar(50), c2 timestamp not null default current_timestamp) duplicate_scope='cluster' ;                                                   Query OK, 0 rows affected (0.12 sec)

当然,您也可以在表创建好后修改复制表属性,具体参考以下示例。

mysql> alter table t1 duplicate_scope = 'NONE';
Query OK, 0 rows affected (0.05 sec)

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

评论