0Pricing
SQL Academy · 课时

何时不应分片

只读副本、分区和更强大的服务器可以解决大多数扩展问题——了解什么时候分片并不是正确答案

何时不应分片 是 CoddyKit 上的免费 SQL Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 SQL Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 SQL Academy 课程共包含 4 节课。

分片是最后手段

分片会使运维复杂度成倍增加。大多数应用永远不需要它。请先用尽更简单的方案。

第 1 步:垂直扩展

升级服务器。现代云实例可以轻松处理:

  • 128 个核心
  • 1 TB RAM
  • 50,000 IOPS NVMe

单个 PostgreSQL 节点就能达到 100k-500k QPS。大多数应用都可以轻松应对。

第 2 步:读副本

如果读取请求占主导地位,请添加副本。一个 primary 加上 3 个副本,可以承载多达 10 倍的读取请求。

第 3 步:缓存

在热点查询前面加入 Redis/memcached。通常这是成本最低且效果最好的优化。

第 4 步:分区

原生 PG 声明式分区可以在单台服务器内解决“表太大”的问题。通常比​​分片容易 100 倍。

第 5 步:拆分服务

将不同的业务领域迁移到不同的数据库中——订单数据库、用户数据库、分析数据库。每个数据库都可以独立扩展。

第 6 步:迁移分析负载

OLTP 查询 → PostgreSQL。分析查询 → ClickHouse / BigQuery / Snowflake。许多“我们需要分片”的案例,实际上是“分析负载正在吞噬我们的 OLTP”。

然后,也许再考虑分片

如果在仅包含 OLTP 数据的规模达到 50TB 后仍然耗尽资源,并且工作负载要求的写入能力已超出单台服务器的承受范围——就可以开始规划分片。

分片的运维成本

  • 需要监控和修补更多服务器
  • 必须协调跨分片备份
  • 跨分片查询会触及应用程序代码
  • 重新分片很困难
  • 热点分片需要主动重新平衡

“延后分片”策略

采用具备分片意识的模式进行构建(始终包含 tenant_id,绝不使用全局递增计数器),这样您之后 CAN 进行分片。但除非不得不分片,否则不要分片。

适合分片的架构

即使您继续使用单节点,也要按照未来可能分片的方式进行设计:

  • 每一行都包含 Tenant_id
  • 使用 UUID 或分布式 ID(而不是自动递增)
  • 不使用全局唯一序列
  • 外键限制在租户范围内

承认这种权衡

分片以功能为代价换取容量。连接、事务和查询都会变得更加困难。请确认获得的收益值得付出这些代价。

总结

分片解决的是一个真实问题,但代价很高。

  • 先进行垂直扩展
  • 使用读副本和缓存
  • 先分区,再分片
  • 将分析负载迁移出 OLTP
  • 为可分片性进行设计,推迟实际分片

快速检查

您正在考虑分片,因为 OLTP 查询速度很慢。在进行分片之前,最有可能有帮助的步骤是什么?

常见问题解答

「何时不应分片」课时是免费的吗?

是的 — 「何时不应分片」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 SQL Academy 课程的其余内容,请升级到 CoddyKit PRO。 SQL Academy 课程共包含 4 节课。

「何时不应分片」这节课中我会学到什么?

只读副本、分区和更强大的服务器可以解决大多数扩展问题——了解什么时候分片并不是正确答案 你通过在浏览器中直接运行的动手代码来练习 SQL Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 SQL Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 SQL Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「何时不应分片」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 SQL Academy 课中编写并运行代码吗?

能。每节 SQL Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 分片策略:范围、哈希与目录
  2. 跨分片查询:棘手的问题
  3. Citus 与分布式 Postgres
  4. 何时不应分片
← 返回 SQL Academy