创建同步表

最近更新时间:2026-02-05 11:01:13

我的收藏

概述

同步表(sync table)是 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);

常见问题 (FAQ)

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:目前不支持,同步表目前只支持在所有节点上都创建一个副本。