创建同步表

最近更新时间:2025-11-18 10:10:22

我的收藏
同步表是一种特殊的表,在数据写入时,它的修改需要强同步到多个 Follower 副本上,同时多个 Follower 副本能提供强一致性读服务。它适合写入频率较低,读操作较多、读操作延迟要求高的负载。
目前同步表以广播表的形式对外提供服务,用户的所有同步表的 Region 共用一个特殊的广播同步日志流。该日志流在用户创建第一个同步表时创建,后续用户的其他同步表 Region 也会调度到该同步日志流。广播同步日志流在系统内每个节点上均包含一个副本,每个 Follower 定期向 Leader 申请租约,在 Leader 上发生写入时,需要等待直到修改强同步到每个持有有效租约的 Follower 上后才能返回。在有读取请求时,同步表会先尝试本地读取,本地读取失败再读取 Leader 。

使用限制

目前同步表以广播表的形式对外提供服务,用户必须创建广播同步表来使用同步表。
任意一个 Follower 副本挂掉,可能导致写请求卡顿一个租约的时间。
读请求路由策略本地优先,本地访问失败则访问 Leader 。
目前暂不支持同步表的属性变换,即不支持从同步表变为非同步表,也不支持从非同步表变为同步表。
同步表不能是分区表。
广播同步日志流一旦被创建出来后就不会再被销毁,即使用户删除所有的同步表。
副本个数过多会导致写请求性能下降。

语法

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

示例

tdsql [demo]> create table test_sync_table(c1 int primary key, c2 int, c3 int, index idx(c2)) sync_level = node(all) distribution = node(all);
Query OK, 0 rows affected (2.90 sec)