全部笔记All notes

数据库技术图谱与选型指南

阅读 6m 29s6m 29s read

概述

本文档提供了数据库技术的全景视图,帮助开发者和架构师快速了解各类数据库的特点、使用场景,以及如何根据业务需求选择合适的数据库技术。

数据库技术全景图

按数据模型分类

数据库技术
├── 关系型数据库(RDBMS)
│   ├── 传统 RDBMS
│   │   ├── MySQL
│   │   ├── PostgreSQL
│   │   ├── Oracle
│   │   └── SQL Server
│   └── NewSQL
│       ├── TiDB
│       ├── CockroachDB
│       └── VoltDB(内存计算型)
│
├── NoSQL 数据库
│   ├── 键值存储
│   │   ├── Redis
│   │   ├── Memcached
│   │   └── Etcd
│   ├── 文档数据库
│   │   ├── MongoDB
│   │   ├── CouchDB
│   │   └── RavenDB
│   ├── 列存储数据库(宽列存储)
│   │   ├── Cassandra
│   │   ├── HBase
│   │   └── ScyllaDB
│   └── 图数据库
│       ├── Neo4j
│       ├── ArangoDB
│       └── Dgraph
│
├── 时序数据库
│   ├── InfluxDB
│   ├── TimescaleDB
│   ├── Prometheus(监控系统,内置时序存储)
│   └── OpenTSDB
│
├── 搜索引擎
│   ├── Elasticsearch
│   ├── Solr
│   └── MeiliSearch(轻量级)
│
└── 分析型数据库(OLAP)
    ├── ClickHouse
    ├── Apache Druid
    ├── Greenplum
    └── Presto(查询引擎)

特殊类型数据库
├── 向量数据库
│   ├── Milvus
│   ├── Pinecone
│   ├── Weaviate
│   └── Qdrant
├── 云原生数据库
│   ├── Amazon Aurora
│   ├── Google Spanner
│   ├── TiDB Cloud
│   └── PolarDB
└── 多模型数据库
    ├── ArangoDB
    ├── OrientDB
    └── CosmosDB

数据库分类体系

1. 关系型数据库(RDBMS)

特点

  • ACID 事务支持:原子性、一致性、隔离性、持久性
  • SQL 标准支持:结构化查询语言
  • 强一致性:数据一致性保证
  • 成熟稳定:生态系统完善

适用场景

  • 金融交易系统
  • 企业 ERP/CRM 系统
  • 订单管理系统
  • 用户账户系统

代表产品对比

数据库优势劣势最佳场景
MySQL开源免费、社区活跃、简单易用复杂查询性能一般、功能相对简单Web应用、中小型系统
PostgreSQL功能强大、扩展性好、支持JSON运维复杂度较高复杂业务系统、GIS应用
Oracle企业级功能、稳定性极高成本高昂、资源消耗大大型企业核心系统

2. NoSQL 数据库

2.1 键值存储

特点:

  • 简单的 key-value 数据模型
  • 极高的读写性能
  • 水平扩展能力强

适用场景:

  • 缓存系统
  • 会话存储
  • 实时推荐
  • 计数器系统

2.2 文档数据库

特点:

  • 灵活的文档模型(JSON/BSON)
  • 无需预定义模式
  • 支持嵌套和数组

适用场景:

  • 内容管理系统
  • 产品目录
  • 用户画像
  • 日志存储

2.3 列存储数据库(宽列存储)

特点:

  • 列式存储
  • 高写入吞吐量
  • 适合稀疏数据

适用场景:

  • 时间序列数据
  • 推荐系统
  • 日志分析
  • IoT 数据存储

2.4 图数据库

特点:

  • 图结构存储
  • 高效的关系查询
  • 灵活的数据模型

适用场景:

  • 社交网络
  • 知识图谱
  • 推荐引擎
  • 欺诈检测

3. 时序数据库

特点:

  • 时间戳索引优化
  • 数据压缩率高
  • 降采样和聚合功能

适用场景:

  • 监控指标存储
  • IoT 设备数据
  • 金融行情数据
  • 日志分析

4. 搜索引擎

特点:

  • 全文搜索能力
  • 近实时索引
  • 复杂查询支持

适用场景:

  • 站内搜索
  • 日志分析(ELK)
  • 商品搜索
  • 内容推荐

5. 分析型数据库(OLAP)

特点:

  • 列式存储
  • 批量导入优化
  • 复杂查询性能高

适用场景:

  • 数据仓库
  • BI 分析
  • 实时报表
  • 用户行为分析

6. 向量数据库

特点:

  • 高维向量存储和检索
  • 相似性搜索优化
  • 支持近似最近邻(ANN)算法

适用场景:

  • AI/ML 应用
  • 推荐系统
  • 图像/文本相似搜索
  • 语义搜索

7. 云原生数据库

特点:

  • 弹性伸缩
  • 按需付费
  • 高可用性
  • 托管服务

适用场景:

  • 云原生应用
  • 全球分布式应用
  • 弹性工作负载

8. 多模型数据库

特点:

  • 支持多种数据模型
  • 统一查询接口
  • 灵活的数据建模

适用场景:

  • 复杂数据关系
  • 多样化数据需求
  • 微服务架构

技术选型决策树

开始选型
│
├─ 需要 ACID 事务?
│  ├─ 是 → 关系型数据库
│  │  ├─ 需要分布式?
│  │  │  ├─ 是 → NewSQL (TiDB/CockroachDB)
│  │  │  └─ 否 → 传统 RDBMS
│  │  │     ├─ 开源优先?
│  │  │     │  ├─ 功能优先 → PostgreSQL
│  │  │     │  └─ 简单易用 → MySQL
│  │  │     └─ 企业支持 → Oracle/SQL Server
│  │  
│  └─ 否 → NoSQL/其他
│     ├─ 数据模型?
│     │  ├─ 键值对 → Redis/Memcached
│     │  ├─ 文档 → MongoDB/CouchDB
│     │  ├─ 宽表 → Cassandra/HBase
│     │  └─ 图结构 → Neo4j/ArangoDB
│     │
│     ├─ 时序数据?
│     │  └─ 是 → InfluxDB/TimescaleDB
│     │
│     ├─ 搜索需求?
│     │  └─ 是 → Elasticsearch/Solr
│     │
│     └─ 分析查询?
│        └─ 是 → ClickHouse/Druid

学习路径规划

初级阶段(1-3个月)

  1. SQL 基础

    • 基本查询(SELECT、WHERE、JOIN)
    • 数据操作(INSERT、UPDATE、DELETE)
    • 表设计和约束
    • 索引基础
  2. 选择一个关系型数据库深入

    • MySQL 或 PostgreSQL
    • 安装配置
    • 基本管理操作
    • 性能调优入门
  3. NoSQL 入门

    • Redis 基础操作
    • MongoDB CRUD
    • 基本概念和 CAP 理论

中级阶段(3-6个月)

  1. 高级 SQL

    • 窗口函数
    • CTE(公共表表达式)
    • 存储过程和函数
    • 触发器
  2. 数据库设计

    • 范式理论
    • 反范式化策略
    • 分区表设计
    • 索引优化策略
  3. 分布式概念

    • 主从复制
    • 分片策略
    • 一致性协议
    • 分布式事务

高级阶段(6-12个月)

  1. 性能优化

    • 执行计划分析
    • 查询优化
    • 硬件和系统优化
    • 监控和诊断
  2. 高可用架构

    • 集群搭建
    • 故障转移
    • 备份恢复策略
    • 灾难恢复
  3. 专项技术

    • 时序数据处理
    • 图数据库应用
    • 搜索引擎优化
    • 大数据分析

常见架构模式

1. 读写分离架构

┌─────────────┐
│   应用层    │
└─────┬───────┘
      │
┌─────┴───────┐
│  负载均衡器  │
└─────┬───────┘
      │
┌─────┴───────────────────┐
│                         │
▼                         ▼
┌─────────┐         ┌─────────┐
│  主库   │ ──同步──→│  从库   │
│ (写操作) │         │ (读操作) │
└─────────┘         └─────────┘

适用场景:读多写少的应用

2. 缓存架构

┌─────────────┐
│   应用层    │
└─────┬───────┘
      │
┌─────┴───────┐
│   缓存层    │ (Redis/Memcached)
└─────┬───────┘
      │ Cache Miss
┌─────┴───────┐
│  数据库层   │
└─────────────┘

适用场景:高并发读取场景

3. 分片架构

┌─────────────┐
│   应用层    │
└─────┬───────┘
      │
┌─────┴───────┐
│  分片路由   │
└─────┬───────┘
      │
┌─────┴─────────────────────┐
│                           │
▼           ▼           ▼
┌───────┐ ┌───────┐ ┌───────┐
│ 分片1 │ │ 分片2 │ │ 分片3 │
└───────┘ └───────┘ └───────┘

适用场景:海量数据存储

4. Lambda 架构

                 ┌─────────────┐
                 │  数据源     │
                 └──────┬──────┘
                        │
        ┌───────────────┴───────────────┐
        │                               │
   ┌────┴────┐                    ┌────┴────┐
   │批处理层 │                    │流处理层 │
   │(Hadoop) │                    │(Flink)  │
   └────┬────┘                    └────┬────┘
        │                               │
   ┌────┴────┐                    ┌────┴────┐
   │批量视图 │                    │实时视图 │
   └────┬────┘                    └────┬────┘
        │                               │
        └───────────┬───────────────────┘
                    │
               ┌────┴────┐
               │服务层   │
               └─────────┘

适用场景:实时数据分析平台

5. 微服务数据库架构

┌──────────────┐  ┌──────────────┐  ┌──────────────┐
│   服务 A     │  │   服务 B     │  │   服务 C     │
└──────┬───────┘  └──────┬───────┘  └──────┬───────┘
       │                 │                 │
┌──────┴───────┐  ┌──────┴───────┐  ┌──────┴───────┐
│  Database A  │  │  Database B  │  │  Database C  │
│   (MySQL)    │  │  (MongoDB)   │  │   (Redis)    │
└──────────────┘  └──────────────┘  └──────────────┘

适用场景:微服务架构系统

最佳实践检查清单

设计阶段 ✓

  • 明确业务需求和数据特征
  • 评估数据量级和增长趋势
  • 确定一致性要求
  • 分析查询模式
  • 考虑扩展性需求

参考:

开发阶段 ✓

  • 遵循命名规范
  • 合理使用索引
  • 优化查询语句
  • 使用连接池
  • 实现重试机制

参考:

部署阶段 ✓

  • 配置监控告警
  • 设置备份策略
  • 准备回滚方案
  • 性能基准测试
  • 安全加固配置
  • 数据加密设置
  • 访问控制配置

参考:

运维阶段 ✓

  • 定期备份验证
  • 监控关键指标
  • 定期性能分析
  • 及时更新补丁
  • 容量规划评估

参考:

性能对比分析

读写性能对比

🔍 注意:以下评分基于典型场景,实际性能取决于具体配置和使用模式

数据库写入性能查询性能并发能力扩展性
MySQL★★★☆☆★★★★☆★★★☆☆★★★☆☆
PostgreSQL★★★☆☆★★★★★★★★★☆★★★☆☆
MongoDB★★★★☆★★★★☆★★★★☆★★★★★
Redis★★★★★★★★★★★★★★★★★★★☆
Cassandra★★★★★★★★☆☆★★★★★★★★★★
Elasticsearch★★★★☆★★★★★★★★★☆★★★★★
ClickHouse★★★★★★★★★★★★★★☆★★★★☆

功能特性对比

特性MySQLPostgreSQLMongoDBRedisCassandra
ACID事务✓✓✓(4.0+)✗✗
SQL支持✓✓✗✗CQL
分片✓(内置分区)✓(需扩展)✓✓✓
全文搜索✓(5.7+)✓✓✗✗
JSON支持✓✓✓✓✓

迁移方案指南

1. 评估阶段

数据评估:

  • 数据量大小
  • 数据模型复杂度
  • 业务逻辑依赖
  • 性能要求

风险评估:

  • 停机时间要求
  • 数据一致性要求
  • 回滚方案可行性
  • 团队技术储备

2. 迁移策略

2.1 停机迁移

  • 优点:简单直接、数据一致性高
  • 缺点:业务中断
  • 适用:数据量小、允许停机

2.2 双写迁移

应用 → 新数据库
  ↓
  └──→ 旧数据库
  • 优点:平滑迁移、可回滚
  • 缺点:代码复杂、数据同步挑战
  • 适用:不允许停机的关键业务

2.3 CDC(Change Data Capture)迁移

旧数据库 → CDC工具 → 新数据库
         (Debezium/Canal)
  • 优点:实时同步、对应用透明
  • 缺点:需要额外工具
  • 适用:大数据量迁移

3. 迁移工具推荐

⚠️ 注意:部分工具可能需要额外配置或商业授权

源数据库目标数据库推荐工具
MySQLPostgreSQLpgloader
MySQLMongoDBmongo-connector/Tapdata
任意ElasticsearchLogstash
MySQLClickHouseclickhouse-local/MaterializedMySQL
任意SQLCassandraApache Spark

4. 迁移后验证

  • 数据完整性校验
  • 性能基准对比
  • 功能回归测试
  • 监控指标确认
  • 备份恢复演练

相关文章

基础教程

进阶内容

相关技术

总结

选择合适的数据库技术是架构设计中的关键决策。需要综合考虑:

  1. 业务需求:数据模型、一致性要求、查询模式
  2. 技术特性:性能、扩展性、可用性
  3. 团队能力:技术栈熟悉度、运维能力
  4. 成本因素:许可证、硬件、人力成本

记住,没有完美的数据库,只有最适合的数据库。在实际项目中,常常需要组合使用多种数据库技术,发挥各自优势,构建高效可靠的数据架构。