分片(Shard)

最近更新时间:2025-09-03 15:39:41

我的收藏
为帮助您更好地规划表结构并优化性能,本文档详细介绍了 TcaplusDB 的 Shard(分片)分配核心规则与建议。

Shard 基本概念与限制

TcaplusDB 采用分片机制实现数据的分布式存储与访问。其核心机制是将每张表的数据划分为多个 Shard,这些 Shard 分散在不同的存储节点(tcapsvr)上。数据的分布依据是通过对表的 splittablekey(未指定时默认为主键)进行 Hash 计算,然后对10000取模(即 hash(splittablekey) % 10000)来确定其所属的 ShardID。每个表最多可划分为​10000个分片(Shard)。

Shard 容量规划建议

合理的 Shard 容量规划是保障性能与稳定性的关键。
​物理上限​:单个 Shard 的数据量最大支持​256GB。超过会写入失败。
​运营建议​:为避免单 Shard 过大可能带来的性能与运维复杂度问题,建议在日常运营中,​单个 Shard 的数据量维持在30GB以内。更小的 Shard 通常能获得更优的访问性能。同时,业务可以根据访问时延现况(一般地,1KB请求的平均访问时延在10ms内),来判断对应表 Shard 个数是否需要提升。
​预分配内存​:正式环境,每个 Shard 会默认预分配​1GB的内存空间用于缓存热数据。当数据量超过此阈值时,超出部分将存储在磁盘中。

Shard 数量规划原则

  因每组存储资源的 Shard 个数有限, 因此一个表的 Shard 总数需综合数据总量和访问量、成本等因素来计算一个相对合理的值。
单表最小 Shard 数:1个。即每个表至少一个 Shard, 通常加表时默认分配的也是1个 Shard。
​计算公式参考​:您可以根据预期的总数据量和建议的单 Shard 容量(如30GB)来估算所需的 Shard 数量。例如,预计总数据量为3TB的表,理论上需要 (3 * 1024) / 30 ≈ 103个 Shard。
​访问性能考量​:​单个 Shard 能够支撑的 QPS 在万级别​(具体数值会受记录大小、请求类型等因素影响)。对于预期访问量非常大的表,建议设置更多的 Shard,从而提升整体吞吐能力。
​内存关联性​:Shard 数量也与内存规划紧密相关。一个常见的服务器配置基准是:为一台拥有​128GB物理内存的存储节点机器,默认分配约​112个 Shard。这确保了每个 Shard 能有约1GB的预分配内存空间。

总结与建议

评估维度
限制与建议
说明
​单表最大 Shard 数​
10000 个
表分片的上限。
​单 Shard 容量上限​
256GB
物理硬限制。
​单 Shard 运营建议容量​
​≤ 30GB​
为保障性能与易运维,推荐使用此标准; 但对于访问量不大的表,一般超过30GB也没有问题。
​单 Shard 预分配内存​
1GB
超出部分存于磁盘。
​Shard 数量决定因素​
​数据总量​ & ​访问量(QPS)​​
数据量定基础,访问量定分布。​高 QPS 表建议更多 Shard,更小单 Shard 尺寸。​
​单 Shard 处理能力​
约万级 QPS
具体性能因记录大小和请求类型而异。
​内存配置参考​
128GB 内存机器 ≈ 112 个 Shard
确保每个 Shard 有约1GB内存。
说明:
以上给出的数值为通用参考,实际部署时可能会因具体配置和业务场景有所不同。
总而言之,Shard 分配需要在数据量、性能、成本之间取得平衡。​通常建议您优先根据期望的单 Shard 数据量(如30GB)来初步确定 Shard 总数,然后再评估该数量下的 Shard 是否能满足您的访问性能(QPS)要求, 同时满足 Shard 数不超过您购买的总量。​​ 在不超过 Shard 总量的前提下,建议对业务的核心高频访问表分配更多的 Shard 数。