表分片:当前限制

在使用分片表时,请注意以下限制:

  1. 本地分片表和集群分片表不能共存于同一组节点上: 在参与复制集群的一组节点上,不能混用:

    • 本地分片表(创建时不带集群前缀:create table s ... shards='N' rf='1'
    • 集群分片表(创建时带集群前缀:create table c:r ... shards='N' rf='M'

    示例:考虑一个 2 节点集群,其中:

    • s 是在每个节点上独立创建的本地分片表
    • r 通过集群在两个节点之间复制

    在这种配置下,在同一组节点上尝试创建集群分片表(create table c:r ... shards='N' rf='2')会失败。

  2. 集群名称一致性

    • 分片子系统在首次使用时会绑定到一个集群名称;这些节点上的所有集群分片表都必须使用同一个集群名称。
    • 一旦选定集群名称,它就会应用于后续所有集群分片表的创建。

    示例:如果你创建的第一个集群分片表使用:

    create table c:users ... shards='N' rf='M'

    后续所有集群分片表都必须复用集群 c

    create table c:orders ... shards='N' rf='M'  -- works
    create table d:items  ... shards='N' rf='M'  -- fails
  3. 不支持表结构变更

    • 一旦创建了分片表,就不能使用 ALTER TABLE 修改其结构。
    • 如需更改 schema,你必须:
      1. 创建一个具有所需结构的新分片表
      2. 将数据复制到新表中
      3. 删除旧表
  4. 分片数量限制

    • 每个分片表最多 3,000 个分片。
    • 无论集群配置或表大小如何,这个限制都适用。
    • 请相应规划你的分片策略,以确保不超过此限制。
  5. rfshards 必须是带引号的整数

    • 这两个选项都要求使用带引号的数值(shards='10'rf='2');不带引号、非数字、空值或小数值都会被拒绝。
    • 在独立(非集群)服务器上,rf 必须为 '1'
    • 在复制集群中,rf 必须介于 1 和集群节点数之间。
Last modified: June 12, 2026