ICP备案

备案站点的分库分表架构与运维实践

作者:备案源头内容团队内容审核:备案源头内容团队更新于 2026年9月18日

加索引救不了的问题,分库分表也未必救得了

单表数据量涨到几千万甚至上亿行时,慢查询定位和索引优化的边际收益会急剧下降——不是索引没建对,是这张表本身已经超出了单机数据库能舒服处理的规模。这时候团队往往会条件反射地想到分库分表,但分片是一次架构级别的重构,代价远高于加一个索引,动手前必须想清楚三件事:真的是数据量问题,还是查询模式问题;分片键怎么选才不会把自己逼进死胡同;以及跨分片之后哪些原本理所当然的能力会直接消失。

关键要点

  • 分片之前先确认瓶颈真的在数据量而不是查询写法,很多所谓的「大表问题」其实是索引没用对,见 慢查询定位与索引优化
  • 分片键一旦选定,几乎所有查询都要带上它才能走到正确的分片,选错等于给自己判了一次高成本的二次迁移。
  • 跨分片的联表查询、排序、分页、聚合,代价都会指数级上升,很多在单库里一条 SQL 能做的事,分片后要在应用层拼接。
  • 分布式事务能不用就不用,优先靠业务设计把强一致性约束收敛在单个分片内。

先确认:真的需要分片吗

现象 更可能的根因 该做的事
查询慢,但表本身不大 缺索引或写法导致索引失效 优化索引与 SQL,见 慢查询定位与索引优化
写入压力大,连接数经常打满 连接池配置或长事务 数据库连接池与连接数治理
单表几千万行以上,索引也已优化到位 数据量确实超出单机承载 才考虑分片
读多写少、大部分是历史数据 冷热数据未分离 先做归档,见 数据生命周期与归档清理

很多团队跳过了归档这一步直接上分片——表里一半数据是三年前的历史订单,根本不会被查询,却依然占用着索引空间和备份时间。把这部分先归档出去,往往能把分片这个决定往后推很久,甚至完全避免。

分片键:一旦选定就很难回头

分片键决定了一行数据被路由到哪个分片,选择标准有三条:

  • 高频查询条件里必须带它:如果大部分查询都是按用户查、按租户查,就该用用户 ID 或租户 ID 做分片键,否则查询会退化成扫描所有分片。
  • 分布要足够均匀:按自增 ID 取模看似简单,但如果业务上某个 ID 段特别活跃(比如老用户远比新用户活跃),数据和流量都会明显倾斜到少数分片上。
  • 尽量不随业务变化而改变:换分片键意味着重新分布几乎所有数据,代价等同于重做一次分片。

一个常见误区是拿「自增主键」当分片键,图的是实现简单,代价是几乎所有业务查询天然带的都是用户维度或租户维度的条件,而不是主键——查询照样要扫全部分片。分片键要服务于查询模式,而不是服务于实现的便利性

路由层:放在哪一层,代价完全不同

实现方式 做法 优点 代价
应用层路由 业务代码里自己算分片、拼库名表名 无额外组件,控制力强 每个数据访问点都要改造,容易遗漏
中间件路由 独立的代理层解析 SQL 自动路由 业务代码基本无感 中间件本身是新的单点和运维对象,SQL 兼容性有边界
ORM/驱动层路由 在数据访问框架里插一层分片逻辑 改造范围可控 依赖框架能力,复杂查询仍需手写

无论选哪种,路由逻辑都要做到幂等且可重放——同一条数据、同一个分片键,任何时候计算出的分片必须一致,否则会出现「同一个用户的数据分散在两个分片里都能找到一部分」的诡异故障。路由配置本身要纳入配置管理并可审计,见 配置与环境变量管理

跨分片查询:原来一条 SQL 的事,现在要在应用层拼

分片之后,这几类操作的复杂度会明显上升:

  • 跨分片排序与分页:单库里 ORDER BYLIMIT 是数据库引擎的活,分片后要先在每个分片里各取一部分再在应用层归并排序,深翻页尤其昂贵。
  • 跨分片聚合统计:总数、求和这类统计需要查询所有分片再汇总,实时性和一致性都会打折扣,通常改为异步预计算,见 消息队列与异步任务运维
  • 跨分片关联查询:原本一条 JOIN 能完成的查询,分片后往往要拆成两次查询在应用层拼接,或者干脆做数据冗余换查询效率。

能不查全部分片就不查全部分片是分片架构下最重要的设计原则。大部分「需要跨分片统计」的报表类需求,更适合走一份异步同步到独立的汇总库或搜索引擎,而不是让在线查询路径承担这个代价。

分布式事务:优先设计成不需要它

严格的分布式事务(保证多个分片上的操作同时成功或同时失败)实现复杂、性能代价高,且在网络分区时行为复杂难以完全测试覆盖。更务实的路线是通过业务设计尽量避免跨分片事务

  • 把强一致性要求的操作聚合到同一个分片键下,例如把同一个用户的账户余额和交易流水都路由到同一个分片。
  • 确实需要跨分片协调时,走最终一致性:先落地本地操作和一条待处理记录,再用异步任务推进后续步骤,失败可重试,做法与幂等补偿一致,见 超时设置与重试策略定时任务运维:幂等、防重与补偿
  • 涉及资金类的跨分片操作,必须配合对账机制兜底,见 第三方服务依赖治理 中对账思路同样适用于内部跨分片场景。

二次分裂:容量规划没做好,代价会加倍

分片数量设置得太少,某天又要扩容分片数(俗称二次分裂),是分片架构里成本最高的运维操作之一——它相当于对已经在线的数据做一次跨库迁移,见 跨库迁移与割接实践 中双写、校验、切换的完整方法论在这里同样适用。

实践上更稳妥的做法是初始分片数留出明显余量(比如按预期业务量的数倍开分片),配合「虚拟分片」思路:先把数据映射到远多于物理库数量的虚拟分片,物理库数量不够时,只需要把部分虚拟分片迁移到新物理库,而不用重新计算所有数据的路由,大幅降低后续扩容的迁移规模。

运维层面要多盯的东西

分片之后,原本盯一个库就够了,现在要同时盯多个库的健康状态:

常见坑

  • 拿自增主键当分片键:查询天然带的是业务维度条件,分片键却是主键,查询照样要扫全部分片。
  • 分片数量设得刚刚好:容量涨上来就要二次分裂,代价等同于重新迁移一次。
  • 业务代码到处手写路由逻辑:路由算法散落在各处,某天改分片规则时改不干净。
  • 对跨分片统计需求心存侥幸:报表类需求一直查全部分片,随数据量增长越来越慢。
  • 忘了归档历史数据就直接上分片:把根本不该留在热库里的冷数据也一起分片了。

常见问题

表多大才需要考虑分片?

没有绝对数字,但通常在索引已经优化到位、单表数据量达到几千万到上亿行、且备份和 DDL 变更耗时已经明显影响运维效率时,才值得认真评估分片。多数中小站点终其生命周期都不需要走到这一步,先把索引和归档做到位往往就够用。

分片键选错了还能补救吗?

能,但代价接近重新做一次分片:需要按新分片键重新计算所有数据的路由、双写迁移、校验、切换,流程和数据迁移割接一致。所以分片键的选择值得在动手前反复推演典型查询模式,而不是上线后再改。

分片之后还能用外键约束吗?

跨分片的外键约束在大多数分片方案下都无法生效,一致性需要靠应用层校验和定期对账来保证。这是分片带来的实质性能力削弱,设计时要明确接受这个取舍。

中间件路由和应用层路由该怎么选?

团队规模小、查询模式相对固定时,应用层路由更可控、排障也更直接;查询模式复杂多变、且有专职团队维护中间件时,中间件路由能减少业务代码的改造量,但要接受多一个需要单独运维的组件。

资料来源

主流数据库分片与中间件路由方案的公开架构文档,以及分布式数据库设计中关于分片键选择与跨分片事务的通用实践资料。本文为通用运维说明,仅供参考,具体方案请结合业务查询模式与数据规模设计。

相关阅读

备案站点的数据库运维与高可用要点

数据库在备案站点里的位置 备案网站的用户、内容、线索几乎都存在数据库里,是最核心的资产。数据库一旦宕机,站点直接不可用;数据一旦损坏或丢失,损失往往不可逆。所以数据库运维是稳定运营的地基。 高可用:主从与故障切换 主从复制:主库写、从库读,读写分离分担压力。 故障切换:主库异常时能自动或快速切到从库,减少不可用时间。…

网站访问日志留存与安全合规运维要点

为什么要留日志:这是法定要求 《网络安全法》第二十一条明确要求网络运营者"采取监测、记录网络运行状态、网络安全事件的技术措施,并按照规定留存相关的网络日志不少于六个月"。已完成备案、对外提供服务的网站属于网络运营者范畴,日志留存不是可选项,而是基础合规义务。 应留存哪些日志 | 日志类型 | 记录内容 | 主要用途 …

网站新增域名如何补充接入备案

企业在原有网站基础上新增域名,比如启用新的品牌域名或拼音域名指向同一网站时,不能直接绑定使用,而是需要在原备案基础上补充办理新增域名的接入手续。 新增域名前的准备工作 新增域名前,建议先确认该域名已经完成实名认证,可以通过 Whois查询 核对域名的注册信息和实名状态,避免因域名信息未实名导致接入申请被退回。同时确认…

备案信息年度核查该如何配合应对

部分省份的通信管理部门会对辖区内已备案网站开展年度或不定期核查,核查方式包括系统比对、电话回访、短信确认等,目的是确认备案信息与网站实际运营情况是否一致。 核查通常关注哪些内容 年度核查一般围绕主体信息、网站信息、接入信息三个维度展开,具体可以对照下表自查: | 核查维度 | 常见核查点 | | --- | --- …

备案号在网站上的规范展示与使用要求

网站完成备案只是第一步,备案号在页面上的展示方式同样需要长期维护,很多主体正是因为展示细节不规范,在日常巡查或年度核查中被要求整改。 展示位置与基本要求 通常做法是将备案号放置在网站首页底部,文字需清晰可辨、不被图片或广告遮挡,且格式应与下发的备案号文本保持一致,不能随意增减字符或调整顺序。是否需要加超链接指向查询入…

备案注销之后重新申请要注意什么

有些主体在此前因业务调整、接入商变更等原因注销了原有备案,之后又因新的业务需要重新申请备案。这种“二次备案”与首次备案在流程上大体相似,但有几个环节容易被忽略。 重新申请前的自查 重新申请前,建议先用 ICP备案查询 确认原备案是否确实已经完成注销,避免出现原备案未彻底清空、新申请与旧记录冲突的情况。同时检查计划使用…

备案信息变更有没有时效要求

备案不是办理完成后就一劳永逸的事项,主体信息、网站信息或联系方式一旦发生变化,通常需要在信息变化后的一定时间内完成变更提交,具体时限以属地管局要求为准。 哪些变化需要及时申报 常见需要变更的情形包括:主办单位名称或证件信息变化、网站负责人更换、联系电话或邮箱失效、网站域名调整、网站内容服务类型发生实质变化等。这类变更…

公司迁址之后备案地址信息如何更新

企业办公地址或注册地址发生变化后,备案信息中登记的地址项也需要相应更新,尤其是当迁址涉及跨区、跨市甚至跨省时,办理流程会比同城内迁址更复杂一些。 迁址后需要关注的信息 迁址后首先要确认工商登记信息是否已经完成同步变更,备案地址一般以工商登记的最新地址为准。可以先用 ICP备案查询 查看当前登记的主办单位地址,与最新的…

系统学习