| 场景 | 延迟 | TPS | 说明 |
|---|---|---|---|
| 主键点查 | 0.076 ms | 211,409 | 最优路径 |
| 房源列表页 | 0.078 ms | 203,941 | 索引优化后 |
| 逾期账单统计 | 1.4 ms | ~16,000 | 需 ANALYZE 及时 |
| 混合读写 9:1 | 0.667 ms | 23,882 | 贴近真实负载 |
| 出租率聚合看板 | 66 ms ⚠️ | 241 | 唯一必须出 PG 的场景 |
| 教训 | 修复前 | 修复后 |
|---|---|---|
| ① 索引列顺序决定生死 | 按房号查缺 tenant_id 前导:72.8 ms |
0.042 ms(1733×) |
| 房源列表页部分索引用不上:43.7 ms | 0.035 ms(1250×) | |
| ② 统计信息滞后 | 同一查询 ANALYZE 前:396 ms |
1.4 ms(280×) |
| ③ 大事务拖死数据库 | 单事务插 500 万行:12 分钟未完成被中断 | 分批 5000~10000 行/批 |
tenant_id 打头的索引。| 阶段 | 房源量 | 架构 | 升级触发条件 |
|---|---|---|---|
| 一期 | < 30 万 | 单主库 + 只读副本 + 分区 | 上线即用 |
| 二期 | 30~100 万 | 1 主 2 从 + 读写分离 | 主库 CPU > 50% |
| 三期 | > 100 万 | 按 tenant_id 分库 | 单库 > 2TB 或写 TPS > 5 万 |
tenant_id ✅ 已满足
② 所有查询带 tenant_id ✅ RLS 强制
③ 避免跨租户 JOIN ✅ 已满足| 组件 | 规格 |
|---|---|
| RDS PostgreSQL | 16C64G,ESSD PL1 1TB,多可用区 |
| RDS 只读实例 | 8C32G × 2 |
| Redis 集群版 | 8G × 3 分片,双副本 |
| ACK 节点 | 8C32G × 3,多可用区 |
| RocketMQ | 专业版 4C8G |
| v1 结论 | v2 修正 |
|---|---|
| 单机 PostgreSQL 即可 | 阿里云 RDS 多可用区 + 只读副本,分阶段分库 |
| PostGIS「待定」 | 必须装(地图选房是硬需求) |
| 未考虑外部集成 | 新增完整分布式一致性设计(支付/OTA/签章/AR) |
| 未考虑不停机 | 新增 Expanding/Contracting + 灰度 + 回滚方案 |
| 主键用 IDENTITY | 分库会冲突 → 新增号段模式(已验证) |
| 未考虑 C 端 | 新增 C/B 端物理隔离设计 |