数据库选型决策框架

kp-030 · 工程实践与历史脉络核心约 25 分钟已校对

前置知识点

前置:

相关知识点

相关:

学习进度:

一句话定义

数据库选型是把「负载形状、一致性要求、规模预算、团队运维能力」四个变量代入一张决策矩阵,为每个数据域匹配引擎——而不是为整个系统挑一个「最好的数据库」。

为什么重要

前置知识

kp-027(NoSQL 与 NewSQL 图谱);建议完成 kp-019、kp-024。

核心概念

原理与机制

决策树的第一层是「有没有多行事务与复杂一致性」:有 → 关系库或 NewSQL;没有 → 进入负载形状分支。第二层按访问模式分流:纳秒级点查与热点缓存 → KV(Redis);文档级整体读、模式异构 → 文档库;海量写 + 范围扫描 → 宽列/时序;多跳关系遍历 → 图库;全文检索 → 倒排引擎;大规模聚合分析 → 列存分析库。第三层做规模与运维修正:数据量 < 单机上限(TB 级)时不要为「未来的分布式」提前付费——分库分表(kp-024)的复杂度只有在真需要时才引入。矩阵打分的陷阱是「维度等权」:一致性要求是淘汰项(gate)而非加分项,资金域不满足强一致的候选直接出局,而不是扣两分继续比。最后以「退化测试」收尾:模拟峰值 3 倍流量与主库宕机,各候选的降级行为差异往往是决策的最后一块砝码。

实例或案例

社交 App 选型实录:用户与关系链(强一致、事务)→ PostgreSQL;动态 feed 投递(海量写 + 时间线范围读)→ 宽列/Redis Timeline;全文搜索 → 倒排引擎;计数与排行榜 → Redis ZSet;审计与风控分析 → 列存数仓。评审记录里每个数据域写清「四问」答案与淘汰理由——半年后新增「附近的人」需求时,按同一框架补一个地理索引引擎,而不是把 PostgreSQL 硬改成 GIS 库。

常见误区

自测题

  1. 为什么一致性要求是「淘汰项」而不是加权项? 答:一致性违背(如资金错账)是正确性问题,无法用其他维度优势补偿;先淘汰不及格候选,再对幸存者比性能与成本。
  2. 单机容量足够时为什么要警惕「分布式税」? 答:分区、共识、跨节点事务带来延迟、运维与心智成本(kp-018/kp-024/kp-026),规模未到时支付这笔税是纯损失。

公式或模型

决策评分:Score = Σ w_i × s_i,但一致性/合规维度作为 gate(0/1),不进加权和。容量预估:磁盘 ≈ 数据量 × (1 + 索引膨胀率 0.3~1) × 副本数 × 安全余量 1.5;QPS 预算 = 单机基准 × 节点数 × 利用率上限 0.6。

图示

需要多行事务/强一致? 关系库 / NewSQL 按访问模式分流:KV / 文档 / 宽列 / 图 / 列存 资金域、订单域默认落点 一致性档位降级为会话/最终
选型第一刀:一致性门槛淘汰后,再按访问模式在家族图谱内分流

直观类比

选型像组建球队:先定「规则等级」(一致性门槛,像联赛准入),再看「打法」(访问模式)挑位置球员,最后才比较球员身价(成本);第一轮就把不合格者请出场,而不是让守门员去跟前锋比进球数。

与其他知识点的关系

kp-027 提供候选池;kp-025/kp-024/kp-026 解释「分布式税」的构成;kp-031/kp-032 是矩阵中「运维成熟度」维度的展开;kp-029 的反模式清理是压测可比的前提。

延伸阅读