数据库全景知识图谱

分类、选型、核心原理、分布式架构、调优与趋势 (2025-2026)

一、数据库分类全景
关系型
OLTP / SQL
文档型
JSON / 灵活 Schema
列式/分析
OLAP / 大宽表
KV / 缓存
高速读写
专用型
图/时序/向量/搜索
类型数据模型核心优势典型场景代表产品
关系型 (RDBMS)表 + 行 + 列,强 SchemaACID 事务、SQL 标准、数据一致性交易系统、ERP、金融MySQL、PostgreSQL、Oracle
文档型JSON/BSON 文档,灵活 SchemaSchema 灵活、开发快、水平扩展内容管理、用户画像、配置MongoDB、CouchDB
列族型列族 + 行键,稀疏存储海量数据、高写入吞吐日志、IoT、消息存储HBase、Cassandra、ScyllaDB
键值型 (KV)Key → Value,极简模型极低延迟、高吞吐缓存、会话、计数器Redis、Memcached、DynamoDB
列式分析 (OLAP)列存储,面向分析聚合查询极快、高压缩比BI 报表、实时分析、数仓ClickHouse、Doris、StarRocks
时序型时间戳 + 标签 + 值时间范围查询、降采样、高写入监控、IoT、金融行情InfluxDB、TimescaleDB、TDengine
图数据库节点 + 边 + 属性关系遍历极快、模式匹配社交网络、知识图谱、反欺诈Neo4j、NebulaGraph、TigerGraph
搜索引擎倒排索引 + 文档全文搜索、聚合分析搜索、日志分析、推荐Elasticsearch、Meilisearch
向量数据库高维向量 + 元数据相似度搜索 (ANN)、语义检索RAG、推荐、图像搜索Milvus、Qdrant、Pinecone
NewSQL关系型 + 分布式SQL + 水平扩展 + 强一致大规模 OLTP、缓解分库分表复杂度TiDB、CockroachDB、OceanBase
二、主流数据库详解
2.1 关系型数据库
MySQL
  • 定位: 全球使用最广泛的开源 RDBMS
  • 引擎: InnoDB (默认,ACID)、MyISAM (遗留)
  • 版本: 8.0 (窗口函数/CTE/JSON) → 8.4 → 9.0
  • 生态: 主从复制、Group Replication、InnoDB Cluster
  • 适合: Web 应用、中小规模 OLTP
  • 局限: 复杂查询弱于 PG、单机容量有限
  • 分支: MariaDB、Percona Server、PolarDB
PostgreSQL
  • 定位: 最先进的开源关系型数据库
  • 特色: 丰富数据类型 (JSON/Array/GIS/Range)
  • 扩展: PostGIS (地理)、pgvector (向量)、TimescaleDB (时序)
  • 版本: 17 → 18 (复制、性能与运维能力持续增强)
  • 适合: 复杂查询、GIS、数据分析、全栈
  • 优势: SQL 标准最完整、扩展性极强
  • 趋势: 越来越多新项目优先考虑 PostgreSQL,尤其在复杂查询和扩展能力要求更高的场景中
Oracle
  • 定位: 企业级商业数据库之王
  • 特色: RAC 集群、Data Guard、分区表、物化视图
  • 适合: 金融核心、电信计费、大型 ERP
  • 优势: 极致稳定性、完善的企业特性
  • 劣势: 昂贵 ($47K+/核)、厂商锁定
  • 趋势: 去 O 浪潮 (迁移到 PG/TiDB/OceanBase)
  • 替代: OceanBase (蚂蚁)、GaussDB (华为)
SQL Server
  • 定位: 微软生态企业级数据库
  • 特色: 与 .NET/Azure 深度集成、SSRS/SSIS
  • 版本: 2022 (Ledger/Query Store 增强)
  • 适合: Windows/.NET 技术栈企业
  • 优势: 管理工具好、BI 集成强
  • 趋势: 向 Azure SQL 云化迁移
2.2 NoSQL 数据库
MongoDB
  • 模型: JSON 文档,灵活 Schema
  • 版本: 8.0 (性能、可扩展搜索与向量能力继续增强)
  • 扩展: 分片集群、副本集、Change Streams
  • 适合: 快速迭代、内容管理、IoT
  • 注意: 事务支持有限 (4.0 后多文档事务)
  • 许可: SSPL (非传统开源)
Redis
  • 模型: 内存 KV + 丰富数据结构
  • 结构: String/Hash/List/Set/ZSet/Stream/JSON
  • 特色: 亚毫秒延迟、Lua 脚本、Pub/Sub
  • 集群: Redis Cluster (分片) / Sentinel (HA)
  • 适合: 缓存、分布式锁、排行榜、限流
  • 许可: 采用 source-available 路线;Redis 8 为 tri-license,社区分叉为 Valkey
  • 替代: Valkey (Linux Foundation fork)
Elasticsearch
  • 模型: 倒排索引 + JSON 文档
  • 特色: 全文搜索、聚合分析、近实时
  • 生态: ELK Stack (+ Logstash + Kibana)
  • 适合: 搜索引擎、日志分析、APM
  • 注意: 不适合做主数据库、写入有延迟
  • 许可: 自 2024 年 9 月起,AGPLv3 成为源码可选许可证之一
  • 替代: OpenSearch (AWS fork)
Cassandra
  • 模型: 宽列存储,无主架构
  • 特色: 线性扩展、多数据中心、高可用
  • 适合: 海量写入、跨地域部署、IoT
  • 用户: Apple (400PB)、Netflix、Discord
  • 注意: 查询模式受限、运维复杂
  • 替代: ScyllaDB (C++ 重写,强调更高吞吐和更低延迟)
三、OLAP 与新兴数据库
3.1 实时分析 (OLAP)
数据库架构查询性能写入性能适用场景生态
ClickHouse列存、MergeTree 引擎极快 (亿级秒回)高 (批量写入)日志分析、实时报表、用户行为俄罗斯 Yandex 出品,社区活跃
Apache DorisMPP、列存、向量化极快高 (实时导入)实时数仓、多维分析百度开源,国内生态强
StarRocksMPP、列存 (Doris fork)极快实时分析、湖仓一体Doris 商业化分支,性能优化
DuckDB嵌入式列存 OLAP快 (单机)中等本地分析、数据科学、ETL"SQLite for Analytics",零依赖
Apache Druid列存 + 预聚合亚秒级高 (流式)实时仪表盘、时序分析适合高并发查询场景
BigQuery / Snowflake云原生、存算分离快 (弹性)批量云数仓、BI、数据湖全托管,按查询量计费
3.2 NewSQL — 分布式关系型
数据库架构兼容性一致性适用场景背景
TiDB计算存储分离 (TiKV)MySQL 协议兼容强一致 (Raft)替代 MySQL 分库分表、HTAPPingCAP,国内最活跃
OceanBaseShared-Nothing、PaxosMySQL/Oracle 兼容强一致金融核心、去 O 替代蚂蚁集团,TPC-C 世界纪录
CockroachDB分布式 KV + SQLPostgreSQL 兼容强一致 (Raft)全球部署、多活前 Google Spanner 团队
YugabyteDBDocDB 存储引擎PostgreSQL 兼容强一致云原生分布式 SQL开源,兼容 PG 生态
PolarDB共享存储、计算节点扩展MySQL/PG 兼容强一致阿里云 RDS 升级版阿里云自研
3.3 向量数据库
数据库架构索引算法特色适用场景部署
Milvus分布式、存算分离HNSW / IVF / DiskANN十亿级向量、混合搜索大规模 RAG、推荐自部署 / Zilliz Cloud
QdrantRust 实现、单机/分布式HNSW过滤性能强、Payload 丰富RAG、语义搜索自部署 / Cloud
Pinecone全托管 SaaS专有零运维、Serverless快速上手、中小规模纯 SaaS
WeaviateGo 实现、模块化HNSW内置向量化、GraphQL API语义搜索、多模态自部署 / Cloud
Chroma嵌入式 (Python)HNSW极简 API、开发友好原型、小规模 RAG嵌入式 / Server
pgvectorPostgreSQL 扩展IVFFlat / HNSW无需新数据库、SQL 查询已有 PG 的团队PG 扩展
3.4 时序数据库
数据库语言写入性能压缩率特色适用
InfluxDBGo/RustFlux 查询语言、生态成熟监控、IoT
TimescaleDBC (PG 扩展)完整 SQL、PG 生态兼容已有 PG 的时序场景
TDengineC极高极高超级表、国产、IoT 优化工业 IoT、车联网
VictoriaMetricsGo极高极高Prometheus 兼容、长期存储监控指标存储
QuestDBJava极高SQL 原生、列存、SIMD金融行情、实时分析
四、数据库核心原理
4.1 存储引擎

B+ Tree (MySQL InnoDB / PostgreSQL)

结构: 多路平衡搜索树,叶子节点有序链表连接

优势: 范围查询高效、随机读写均衡、磁盘友好

适合: OLTP 场景,读写混合负载

LSM Tree (RocksDB / LevelDB / Cassandra)

结构: 内存 MemTable → 磁盘 SSTable,分层合并 (Compaction)

优势: 写入极快 (顺序写)、空间放大可控

劣势: 读放大 (需查多层)、写放大 (Compaction)

适合: 写多读少、日志型、KV 存储

列式存储 (ClickHouse / Parquet)

结构: 同一列数据连续存储,而非同一行

优势: 聚合查询只读需要的列、压缩率极高 (同类型数据)

适合: OLAP 分析、数仓、宽表查询

4.2 事务与隔离级别

ACID 特性

Atomicity (原子性): 事务要么全部成功,要么全部回滚

Consistency (一致性): 事务前后数据满足所有约束

Isolation (隔离性): 并发事务互不干扰

Durability (持久性): 提交后数据不丢失 (WAL)

隔离级别

Read Uncommitted: 脏读 — 几乎不用

Read Committed: 不可重复读 — PostgreSQL 默认、Oracle 默认

Repeatable Read: 幻读 (InnoDB 通过 Gap Lock 解决) — MySQL 默认

Serializable: 完全串行化 — 性能最差,极少使用

MVCC (多版本并发控制)

每行数据保留多个版本,读操作看到一致性快照,不阻塞写操作。

MySQL: Undo Log 存储旧版本,ReadView 判断可见性

PostgreSQL: 堆表中直接存多版本,VACUUM 清理旧版本

4.3 索引原理

索引类型

B+ Tree 索引: 最通用,支持等值/范围/排序/前缀匹配

Hash 索引: 只支持等值查询,O(1) 查找

GIN (倒排索引): 全文搜索、数组包含、JSON 查询 (PostgreSQL)

GiST (通用搜索树): 地理数据、范围类型 (PostgreSQL)

BRIN (块范围索引): 有序数据的极小索引,时序数据友好

索引设计原则

1. 最左前缀: 联合索引 (a, b, c) 可用于 a / a,b / a,b,c 查询

2. 覆盖索引: 索引包含查询所需所有列,避免回表

3. 选择性: 高选择性列 (唯一值多) 适合建索引

4. 避免过多索引: 每个索引都有写入开销和存储成本

五、分布式数据库核心原理
5.1 CAP 定理与 BASE

CAP 定理

分布式系统最多同时满足三者中的两个:

C (Consistency): 所有节点看到相同数据

A (Availability): 每个请求都能得到响应

P (Partition Tolerance): 网络分区时系统仍能运行

现实: P 不可避免,所以实际选择是 CP (强一致) 或 AP (高可用)

典型选择

CP 系统: TiDB、CockroachDB、ZooKeeper — 宁可不可用也要一致

AP 系统: Cassandra、DynamoDB、Redis Cluster — 宁可不一致也要可用

BASE 理论

Basically Available: 基本可用 (允许降级)

Soft State: 软状态 (允许中间状态)

Eventually Consistent: 最终一致性 (不要求实时一致)

5.2 共识算法
算法原理使用者特点
RaftLeader 选举 + 日志复制TiDB、CockroachDB、etcd易理解、工程实现多、强一致
Paxos提案-承诺-接受三阶段OceanBase、Google Spanner理论完备但实现复杂
Gossip节点间随机传播信息Cassandra、Redis Cluster最终一致、去中心化、容错强
ZAB类 Paxos,原子广播ZooKeeper保证全序、Leader 驱动
5.3 分片与复制

数据分片 (Sharding)

  • Hash 分片: 数据均匀分布,范围查询需扫全部分片
  • Range 分片: 范围查询高效,可能热点倾斜
  • 一致性哈希: 节点增减时最小化数据迁移
  • 分片键选择: 高基数 + 查询频繁 + 避免热点
  • 跨分片查询: 性能差,设计时尽量避免

数据复制 (Replication)

  • 主从复制: 一主多从,读写分离,异步/半同步
  • 多主复制: 多点写入,冲突解决复杂
  • 无主复制: Quorum 读写 (W+R>N),Cassandra 模式
  • 同步 vs 异步: 同步保一致性,异步保性能
  • 复制延迟: 异步复制的读可能读到旧数据
六、数据库选型决策
6.1 按场景选型
场景首选备选关键考量
Web 应用 (中小规模)PostgreSQLMySQL功能丰富 vs 生态成熟
高并发交易 (金融)OceanBase / TiDBOracle / PG + Citus强一致 + 水平扩展
缓存层RedisMemcached / Dragonfly数据结构丰富 vs 纯缓存
全文搜索ElasticsearchMeilisearch / Typesense功能全 vs 轻量易用
实时分析 (OLAP)ClickHouseDoris / StarRocks单表极快 vs 多表 Join
日志存储Elasticsearch + ClickHouseLoki (Grafana)搜索能力 vs 成本
IoT 时序数据TDengine / TimescaleDBInfluxDB / QuestDB国产生态 vs 国际生态
社交关系/知识图谱Neo4j / NebulaGraphTigerGraph / JanusGraph易用性 vs 性能
AI 向量检索 (RAG)Milvus / Qdrantpgvector / Pinecone规模 vs 简单性
内容管理 (CMS)MongoDBPostgreSQL (JSONB)灵活 Schema vs SQL 能力
消息/事件存储Kafka (日志型)Cassandra / ScyllaDB流处理 vs 随机查询
缓解分库分表复杂度TiDBCockroachDB / VitessMySQL 兼容 vs PG 兼容
6.2 选型决策树

第一步: 确定数据模型

结构化 + 关系 → 关系型 | 半结构化 → 文档型 | 键值对 → KV | 图关系 → 图数据库

第二步: 确定负载类型

OLTP (事务) → MySQL/PG/TiDB | OLAP (分析) → ClickHouse/Doris | 混合 (HTAP) → TiDB

第三步: 确定规模

单机够用 (< 1TB) → 单实例 PG/MySQL | 需要扩展 → 分布式 (TiDB/CockroachDB)

第四步: 确定一致性要求

强一致 (金融) → CP 系统 | 最终一致 (社交/日志) → AP 系统

第五步: 确定运维能力

运维能力强 → 自建 | 运维能力弱 → 云托管 (RDS/Cloud SQL)

七、数据库性能调优
7.1 MySQL 调优要点
SQL 优化
  • EXPLAIN: 分析执行计划,关注 type/rows/Extra
  • 避免: SELECT *、隐式类型转换、函数索引失效
  • 索引: 覆盖索引、联合索引最左前缀、避免回表
  • 分页: 深分页用游标 (WHERE id > ?) 替代 OFFSET
  • JOIN: 小表驱动大表、确保 JOIN 列有索引
参数调优
  • innodb_buffer_pool_size: 物理内存的 70-80%
  • innodb_log_file_size: 1-2GB (减少 checkpoint)
  • innodb_flush_log_at_trx_commit: 1=安全 2=性能
  • max_connections: 根据实际并发设置,配合连接池
  • sort_buffer_size: 适当增大减少磁盘排序
架构优化
  • 读写分离: 主库写、从库读,注意复制延迟
  • 分库分表: ShardingSphere / Vitess
  • 缓存层: Redis 缓存热数据,减少 DB 压力
  • 连接池: HikariCP (Java) / pgBouncer (PG)
  • 归档: 冷数据定期归档到廉价存储
7.2 慢查询排查流程

排查步骤

1. 开启慢查询日志: slow_query_log = ON,设置阈值 (如 1s)

2. 定位慢 SQL: mysqldumpslow 或 pt-query-digest 分析

3. EXPLAIN 分析: 查看执行计划,关注全表扫描 (type=ALL)

4. 索引优化: 添加/调整索引,验证执行计划变化

5. SQL 改写: 拆分复杂查询、避免子查询、用 JOIN 替代 IN

6. 验证效果: 对比优化前后的执行时间和扫描行数

EXPLAIN 关键字段

type: ALL (全表) < index < range < ref < eq_ref < const < system

rows: 预估扫描行数,越少越好

Extra: Using index (覆盖索引好) | Using filesort (需优化) | Using temporary (需优化)

八、高可用与容灾方案
8.1 高可用架构模式
模式架构RTORPO适用场景代表方案
主从复制1 主 N 从,异步复制分钟级秒级丢失读多写少、容忍少量丢失MySQL Replication
半同步复制至少 1 从确认后提交分钟级接近 0需要较强一致性MySQL Semi-Sync
组复制/Paxos多节点共识,自动选主秒级0金融级高可用MySQL Group Replication / PG Patroni
共享存储多计算节点共享一份数据秒级0云数据库Aurora / PolarDB
多活多地域同时读写0 (无切换)取决于冲突解决全球化业务CockroachDB / OceanBase
8.2 备份策略

3-2-1 备份原则

3: 至少 3 份数据副本

2: 存储在 2 种不同介质上

1: 至少 1 份异地备份

备份类型

全量备份: 完整数据快照,恢复最快,存储最大。频率: 每天/每周

增量备份: 只备份上次以来的变化,存储小,恢复需要全量+所有增量

Binlog/WAL 备份: 连续归档事务日志,支持任意时间点恢复 (PITR)

工具

MySQL: mysqldump (逻辑) / XtraBackup (物理) / mysqlbinlog (PITR)

PostgreSQL: pg_dump / pg_basebackup / WAL 归档 + pg_pitr

验证: 定期恢复演练,备份不验证等于没备份

九、数据库发展时间线
1970
Edgar Codd 发表关系模型论文。关系型数据库理论奠基。
1979
Oracle V2 发布 — 第一个商业 SQL 数据库。
1995
MySQL 1.0 发布。开源数据库时代开启。
1996
PostgreSQL 6.0 发布 (前身 Postgres 始于 1986)。
2006
Google BigTable 论文。启发了 HBase、Cassandra 等 NoSQL。
2007
Amazon Dynamo 论文。最终一致性、无主复制的理论基础。
2009
MongoDB 发布。NoSQL 运动高峰。"不是所有数据都需要关系模型"。
2009
Redis 发布。内存数据结构服务器,重新定义缓存层。
2010
Elasticsearch 发布。基于 Lucene 的分布式搜索引擎。
2012
Google Spanner 论文。全球分布式强一致数据库,启发 CockroachDB/TiDB。
2015
TiDB 项目启动 (PingCAP)。NewSQL 在中国兴起。
2016
ClickHouse 开源 (Yandex)。列式 OLAP 新标杆。
2019
OceanBase 打破 TPC-C 世界纪录。国产数据库崛起。
2021
向量数据库兴起 (Milvus 2.0 / Pinecone)。AI 时代的新基础设施。
2023
pgvector 爆发。PostgreSQL 覆盖面继续扩大,DuckDB 流行。
2024
Redis 许可证调整引发 Valkey 分叉;Elastic 重新提供 AGPLv3 作为源码可选许可证。开源许可证之争升温。
2025
AI-Native 数据库概念兴起。向量+关系+全文混合查询成为越来越常见的方向。
十、2025-2026 趋势与展望
确定性趋势:

PostgreSQL 影响力继续扩大: 正在成为越来越多团队的优先评估选项。pgvector (向量) + PostGIS (地理) + TimescaleDB (时序) + Citus (分布式) 让 PG 覆盖面持续扩大。

HTAP 融合: OLTP + OLAP 在同一系统中完成。TiDB、OceanBase、AlloyDB 都在走这条路。减少数据搬运。

Serverless 数据库: 按使用量计费、自动扩缩容。Neon (PG)、PlanetScale (MySQL)、Turso (SQLite) 代表方向。

向量能力内置: 很多中小规模场景不再必须单独引入向量数据库。PG (pgvector)、MongoDB (Atlas Vector)、Elasticsearch 都在补强内置向量搜索。

正在演进:

AI + 数据库: AI 辅助调优 (索引推荐、查询改写)、自然语言查询 (Text-to-SQL)、智能运维 (异常检测)。

湖仓一体 (Lakehouse): 数据湖 + 数仓融合。Iceberg/Delta Lake + Spark/Flink + OLAP 引擎。

边缘数据库: SQLite (libSQL/Turso)、DuckDB 在边缘/嵌入式场景复兴。

国产数据库持续扩张: 信创和本地化需求推动 OceanBase、TiDB、openGauss、达梦等在更多场景进入评估与落地。

需要警惕:

过度分布式: 很多团队不需要分布式数据库。单机 PG + 好的索引设计能撑到很大规模。分布式带来的复杂度远超想象。

NoSQL 万能论: MongoDB 不是银弹。需要事务一致性、复杂 JOIN 的场景,关系型仍然是最优解。

独立向量数据库重新分层: 越来越多通用场景会先评估 PG/ES/MongoDB 的内置能力是否已经够用;只有在规模、隔离和检索复杂度更高时,才更值得引入专门方案。

十一、面试高频知识点
MySQL 核心
  • InnoDB vs MyISAM 区别
  • B+ Tree 索引原理与最左前缀
  • MVCC 实现 (Undo Log + ReadView)
  • 事务隔离级别与锁机制
  • Binlog / Redo Log / Undo Log 区别
  • 主从复制原理与延迟处理
  • 分库分表方案与中间件
  • 慢 SQL 优化实战流程
Redis 核心
  • 五大数据结构及底层实现
  • 持久化: RDB vs AOF vs 混合
  • 内存淘汰策略 (LRU/LFU/TTL)
  • 分布式锁实现 (SETNX + Redlock)
  • 缓存穿透/击穿/雪崩及解决方案
  • Redis Cluster 分片原理 (16384 槽)
  • 大 Key 问题排查与处理
  • Pipeline / Lua 脚本 / Stream
分布式数据库
  • CAP 定理与实际系统的取舍
  • Raft 共识算法核心流程
  • 分布式事务 (2PC/TCC/Saga)
  • 分布式 ID 生成 (雪花算法)
  • 数据分片策略与热点处理
  • 读写分离与数据一致性
  • TiDB 架构 (TiKV + PD + TiDB Server)
  • 最终一致性 vs 强一致性场景选择
设计题
  • 设计一个短链系统的存储方案
  • 设计一个秒杀系统的库存扣减
  • 设计一个 Feed 流的存储与查询
  • 设计一个排行榜 (实时/历史)
  • 设计一个分布式计数器
  • 如何处理 MySQL 到 ES 的数据同步
  • 如何设计一个多租户数据隔离方案
  • 如何从单库迁移到分布式数据库
选型核心原则:
1. 没有最好的数据库,只有最适合的: 每种数据库都有其设计取舍,选型要基于实际场景而非技术热度
2. 先单机后分布式: 单机 PostgreSQL 能撑到 TB 级数据和数千 QPS。过早引入分布式是最常见的过度设计
3. 数据模型决定数据库: 先想清楚数据长什么样、怎么查询,再选数据库。反过来会很痛苦
4. 运维能力是硬约束: 再好的数据库,团队运维不了也是灾难。云托管是大多数团队的正确选择
5. 多数据库组合是常态: 生产系统通常是 OLTP (MySQL/PG) + 缓存 (Redis) + 搜索 (ES) + 分析 (ClickHouse) 的组合

相对稳妥的起点选择:
- 不知道选什么 → PostgreSQL (功能最全、扩展最强、社区最活跃)
- 需要缓存 → Redis / Valkey
- 需要分析 → ClickHouse
- 需要分布式 SQL → TiDB (MySQL 兼容) / CockroachDB (PG 兼容)
- 需要向量搜索 → 先试 pgvector,不够再上 Milvus/Qdrant