数据库选型与架构权衡

「用什么数据库」是每个系统绕不开的决策。没有最好的数据库,只有最适合当前数据模型、访问模式与团队能力的数据库。本章提供一套可复用的选型框架与架构演进路径。

选型的五个问题

在对比产品前,先回答:

  1. 数据模型:结构化、半结构化还是键值?关系复杂吗?
  2. 访问模式:读写比例?点查还是范围扫描?是否需要复杂连接与聚合?
  3. 一致性:能接受最终一致吗?还是必须强一致(账务、库存)?
  4. 规模与增长:当前数据量、QPS、增长率?是否会超出单机?
  5. 团队与运维:团队熟悉什么?能否承担分布式系统的运维成本?
Tip

选型最常见的错误是为了「先进」而引入分布式数据库。单机 + 主从 + 缓存 + 归档往往能支撑相当可观的规模。分布式带来的复杂度(一致性、运维、调优)是持续成本,只有确有必要才值得。

按数据模型选型

数据库类型代表适合不适合
关系型 OLTPMySQL、PostgreSQL交易、账务、强一致、复杂关联超大规模写入、海量半结构化
文档型MongoDB半结构化、内容、日志、灵活 schema复杂多表事务、强关联分析
键值 / 缓存Redis缓存、会话、排行榜、计数、限流主存储(除非明确接受风险)
列式 / OLAPClickHouse、Doris、StarRocks报表、实时分析、大宽表聚合高频单行更新、事务
搜索引擎Elasticsearch/OpenSearch全文检索、日志分析事务性主存储
时序TimescaleDB、InfluxDB监控指标、IoT 指标通用事务业务
Neo4j社交网络、关系推理普通业务

关系型内部的选择:

维度MySQLPostgreSQL
高并发简单 OLTP✅ 生态与运维成熟✅ 也可,成本略高
复杂查询 / 分析一般✅ 强
地理 / JSON / 向量有限✅ 扩展丰富
团队熟悉度通常更广逐渐普及

OLTP 与 OLAP

维度OLTP(联机事务)OLAP(联机分析)
典型操作点查、短事务、高并发写大范围扫描、聚合、join
数据量当前存量历史全量
延迟要求毫秒秒级可接受
建模规范化、行存星型/宽表、列存
代表MySQL、PostgreSQLClickHouse、Doris

HTAP 试图用一套系统兼顾两者(如 TiDB、OceanBase、StarRocks),适合中小规模,但超大规模下 OLTP 与 OLAP 分离(用 CDC 把数据同步到数仓/OLAP)仍是最稳健的架构。

一致性权衡

级别代价场景
强一致(线性一致)延迟高、可用性受限(CAP)账务、库存、支付
单调读 / 会话一致中等用户侧「写后读」
最终一致简单、可用性高缓存、搜索、日志、报表

工程上并非「一个系统一种一致性」,而是按数据重要性分级:核心交易走强一致,周边数据(缓存、搜索索引、统计)走最终一致。

Warning

不要用「分布式事务」把强弱一致的数据绑在一起。更稳的做法是:核心数据只有一个权威来源(通常是关系型主库),其余数据通过异步同步达成最终一致,并接受短窗口的不一致。

架构演进路径

按需逐步演进,不要一步到位:

1. 单机            → 开发、小流量,简单
2. 主从 + 读写分离  → 提升读能力与容灾
3. 加缓存(Redis)  → 扛热点读,降低库压力
4. 索引/归档/分区   → 单库内优化,延缓拆分
5. 分库分表         → 突破单机容量/写入
6. 分布式数据库     → 自动驾驶的弹性扩展(TiDB 等)

每一层都应先测量再升级:加索引解决 80% 的慢查询,缓存解决热点读,只有确证单机瓶颈才考虑分片。

多语言持久化(Polyglot Persistence)

一个系统用多种数据库各司其职,是常见且合理的做法:

数据选型理由
订单、账户MySQL / PostgreSQL事务与强一致
商品详情缓存Redis低延迟热点读
用户行为日志MongoDB / Elasticsearch半结构化、高写入
报表分析ClickHouse列存聚合
全文搜索Elasticsearch分词与检索

代价是一致性、事务、运维复杂度上升。原则:每种数据只选一个权威来源,跨库用异步同步而非分布式事务。

Tip

多语言持久化不是「每种数据库都用一点」,而是为不同形态的数据选择最合适的存储。若一类数据用关系型就能很好表达,就不要额外引入一个数据库。

决策清单

  • 明确了核心数据的一致性要求(强一致 vs 最终一致)?
  • 估算过数据量与增长,确认 1~3 年内是否需要分片?
  • 选型考虑了团队熟悉度与可运维性
  • 热点读用缓存而非换数据库解决?
  • 分析类需求是否应分离到 OLAP,而非拖累主库?
  • 每种数据都有唯一权威来源,跨库同步可观测?
  • 回滚/迁移预案,避免被某个产品绑定?

小结

  • 选型从数据模型、访问模式、一致性、规模、团队五个问题出发。
  • 关系型仍是多数业务默认;PG 强在复杂查询与扩展,MySQL 强在生态与熟悉度。
  • OLTP 与 OLAP 职责分离;HTAP 适合中小规模。
  • 架构按「单机 → 主从 → 缓存 → 分区 → 分片 → 分布式」逐步演进,先测量再升级。
  • 多语言持久化各司其职,但每类数据只设一个权威来源。