TDSQL Boundless 创建同步表

同步表(sync table)是 TDSQL Boundless 利用多副本提升性能的手段之一。与普通表不同,同步表会在集群的每一个节点上创建一个副本,且每一个副本都能提供强一致性读服务。这使得多个副本的能力都能被有效利用,大大增加了同步表的读取吞吐能力。

相关产品
TDSQL Boundless 产品页,含版本规格、价格与购买入口。

一、适用场景

同步表的修改会通过 Leader 强同步给所有副本,并在所有副本都修改完成后才返回给客户端,而普通表的写请求只需要成员副本达到多数派后即可返回。相对普通表,同步表的写入能力会受到一定限制。因此,同步表适合于读多写少的业务场景。

二、使用限制

·目前同步表以广播表的形式对外提供服务,用户必须创建广播同步表来使用同步表。

·任意一个 Follower 副本故障,可能导致写请求卡顿一个租约的时间。

·读请求路由策略本地优先,本地访问失败则访问 Leader 。

·目前暂不支持同步表的属性变换,即不支持从同步表变为非同步表,也不支持从非同步表变为同步表。

·同步表不能是分区表。

·广播同步日志流一旦被创建出来后就不会再被销毁,即使用户删除所有的同步表。

·副本个数过多会导致写请求性能下降。

三、语法

CREATE TABLE table_name ( column_definitions) sync_level = node(all) distribution = node(all);

同步表的读写访问语法和普通表保持一致。但读取时,具体访问的节点和连接有关。具体来说,TDSQL Boundless 会优先访问连接所在的本地节点的同步表副本,只有当本地节点不可读时(例如 lease 过期),才会退化为访问 Leader 节点。

四、示例

以创建一个用户表为例

CREATE TABLE `user_center`.`user_profiles` ( `user_uuid` varchar(36) NOT NULL, `nick_name` varchar(50), `register_time` datetime, PRIMARY KEY (`user_uuid`)) SYNC_LEVEL = NODE(ALL) DISTRIBUTION = NODE(ALL);

五、Q: 建表语法中的“SYNC_LEVEL = NODE(ALL) DISTRIBUTION = NODE(ALL)”分别代表什么?

A: SYNC_LEVEL = NODE(ALL)表示同步级别,修改需要同步到所有 node;DISTRIBUTION = NODE(ALL) 表示分布规则,每个节点上都要分布一个副本。

六、Q: 可以不指定 ALL,指定部分吗?

A: 目前不支持指定副本,只支持 ALL。

七、Q: 建同步表可以不指定DISTRIBUTION = NODE(ALL)吗?

A:目前不支持,同步表目前只支持在所有节点上都创建一个副本。

赞 (0)
上一篇 4天前
下一篇 4天前