SuperAPI AI 工具集

db-partitioning-sharding

数据与分析

查看项目

更新于 10-15 22:11

技能介绍

用途:审计数据库水平扩展拓扑,覆盖两个对称的失败方向——该分区却未分区(巨型表),以及不该分片却过早分片(单节点即可承载的小库)。属于性能与规模轴,供关系型 Escala w12 及 NoSQL 配置中的分片键/热分区类别使用。

主要能力:

  1. 分区适配性——识别本可从 Postgres 声明式 range/list 分区受益(廉价分区裁剪、快速保留期删除)却仍是单一堆表的大型追加型/时序表(事件、日志、指标)。
  2. 热分区/倾斜键——低基数或时间倾斜的分区/分片键,例如按 tenant_id 分区而单一租户占 90% 流量,或所有写入都落在“今天”的分区。宽列存储上事件表的无界/热分区在具备实时写入速率证据时为 severity:5,否则仅为方向性判断。
  3. 过早分片——无规模或吞吐依据就引入应用层分片/多分片,徒增跨分片查询与再平衡成本。

使用方式:Tier-0 静态检测分区 DDL(PARTITION BY、分区子表)、分区/分片键及其表观基数、由命名与列推断的大表候选(时间戳+高插入意图)、分片扇出代码;表大小、行数、每分区写入速率属运行时,Tier-0 下为 needs_api,绝不静默通过。Tier-1/2 使用 Postgres 验证查询,方法为 schema_introspect / query_stat: SELECT inhparent::regclass AS parent, inhrelid::regclass AS partition, pg_size_pretty(pg_total_relation_size(inhrelid)) AS sz FROM pg_inherits ORDER BY pg_total_relation_size(inhrelid) DESC; SELECT relname, pg_size_pretty(pg_total_relation_size(oid)) AS sz, reltuples::bigint AS est_rows FROM pg_class WHERE relkind='r' ORDER BY pg_total_relation_size(oid) DESC LIMIT 20; 大型未分区表可确认分区适配发现;每分区倾斜需 Tier-2 写入统计,缺失时热分区仅为方向性且不得封顶。

发现项按 schema/finding.schema.json 输出,例如 M16.events.unpartitioned_large_table(severity:3,warn,performance,Tier-1 established / Tier-0 needs_api,advisory)、M16.metrics.hot_partition_today(severity:3,warn,静态方向性 / Tier-2 established;仅宽列事件表有实时写入速率时 severity:5)、M16.app.premature_sharding(severity:2,warn,方向性,advisory)。每条发现以 evidence.observed 逐字引用 DDL/分片代码/目录行,verification.reproduce 为上述引用 $DATABASE_URL 的查询,expected_impact 带区间与置信度标注,不使用裸百分比。

限制与诚实性:分区有真实开销(规划时间、跨分区约束),仅建议用于确实庞大或有保留/裁剪需求的表,绝不作为默认;不得为支持或反驳分区而编造行数或表大小,规模声明需 Tier-1,否则输出 needs_api;热分区 severity:5 需实时写入速率证据,静态键基数猜测保持方向性且不得封顶;这些属架构变更,一律 advisory(或针对具体声明式分区迁移提出建议),绝不自动执行。