Shard(分片)

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

1. Shard 基本概念与限制

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

2. Shard 容量规划建议

合理的 Shard 容量规划是保障性能与稳定性的关键。

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

3. 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 的预分配内存空间。

4. 总结与建议

评估维度 限制与建议 说明
单表最大 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数。

注意​:以上给出的数值为通用参考,实际部署时可能会因具体配置和业务场景有所不同。

results matching ""

    No results matching ""