OceanBase 表分组和复制表特性简介

0    132    4

👉 本文共约1625个字,系统预计阅读时间或需7分钟。

OceanBase 表分组简介

https://open.oceanbase.com/docs/tutorials/quickstart/V1.0.0/3-7-advanced-how-to-use-oceanbase-table-grouping

表分组(TABLE GROUP)是 OceanBase 作为分布式数据库的一个特色功能。 表分组是表的属性,会影响多个表的分区在 OceanBase 机器上的分布特征。

不同表的分区有可能分布在不同的节点上,当两个表做表连接查询时,OceanBase 会跨节点请求数据,执行时间就跟节点间请求延时有关。在 SQL 调优时,OceanBase 建议对业务上关系密切的表,设置相同的表分组。OceanBase 对于同一个表分组中的表的同号分区会管理为一个分区组。同一个分区组中的分区,OceanBase 会尽可能的分配到同一个节点内部,这样就可以规避跨节点的请求。

创建表分组

创建表分组时,首先要规划好表分组的用途。如果是用于普通表的属性,表分组就不用分区;如果是用于分区表的属性,表分组就要指定分区策略,并且要跟分区表的分区策略保持一致。

示例:创建表分组和查看表分组。

本人提供Oracle、MySQL、PG等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

查看表分组下的表的语句是:show tablegroups ;

有了表分组后,在建表时就可以指定表分组。

也可以后期将一个表加入到表分组,使用语句:alter tablegroup ... add 。 将表从表分组中移出时,使用语句:alter table ... tablegroup = '';

OceanBase 复制表 简介

https://open.oceanbase.com/docs/tutorials/quickstart/V1.0.0/3-8-advanced-how-to-use-oceanbase-to-copy-tables

复制表原理

复制表指的是一种特殊的表。 普通的表在生产环境,默认有三副本,其中一个主副本和两个备副本。备副本通过同步主副本的事务日志 clog 保持同步,同步协议是 Paxos 协议,主副本的事务日志只有在多数成员里确认落盘后,事务修改才会生效。 通常,默认情况下,读写都是在主副本上,备副本是不提供读写服务。应用如果开启会话或语句级别的弱一致性读后,备副本可能会提供只读服务。风险就是备副本的读会有些许延迟。 普通表可以变为复制表,然后主副本和所有备副本之间使用全同步协议,主副本的事务日志只有在所有副本成员里确认落盘后,事务修改才会生效。所以主副本跟所有备副本的数据理论上都是强一致的。

复制表场景

传统普通的表,主副本可能会成为读写瓶颈,业务可能会使用读写分离技术,将只读查询分离出去。运维将只读查询路由到备副本。这个风险是备副本理论上有一定延时。如果表是复制表,则备副本没有延迟问题。这是一种使用场景,前提是开启弱一致性读。

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

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

复制表语法

可以在创建表的时候就指定复制表属性 DUPLICATE_SCOPE 。这个属性有下面几个值:

  • NONE : 这个是默认值,表示是普通的表。
  • CLUSTER :表的备副本分布在租户资源池所在的所有机器上。

示例:

也可以在表创建好后修改这个属性。

示例:

    头像

    小麦苗

    学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

    您可能还喜欢...

    发表评论

    您的电子邮箱地址不会被公开。

    16 − 8 =

     

    嘿,我是小麦,需要帮助随时找我哦
    • 18509239930
    • 个人微信

    • 麦老师QQ聊天
    • 个人邮箱
    • 点击加入QQ群
    • 个人微店

    • 回到顶部
    返回顶部