Appearance
数据库技术概览
数据库专题面向后端服务、数据平台和运维场景,重点解决三类问题:业务数据如何建模和持久化,读写压力如何拆解,数据链路出现慢查询、丢失、延迟或不一致时如何定位。阅读时可以先从选型和数据生命周期建立边界,再进入具体数据库或大数据组件。
阅读路径
如果目标是支撑订单、账户、权限、支付等核心业务,先阅读 MySQL 或 PostgreSQL,再补充索引、事务、备份恢复和高可用内容。关系型数据库仍然是大多数业务系统的主存储,优先承担强一致、结构化建模和事务提交。
如果目标是降低接口延迟、承接热点数据或做临时状态存储,阅读 Redis。Redis 适合缓存、计数器、排行榜、分布式锁、会话和轻量消息场景,但不应替代主数据库保存不可丢失的核心交易数据。
如果数据结构经常变化,或者业务对象天然是聚合文档,阅读 MongoDB。文档数据库适合内容、配置、画像、事件载荷等半结构化数据,但跨文档事务、强约束关系和复杂关联查询仍要谨慎。
如果主要诉求是搜索、日志检索和聚合分析,阅读 Elasticsearch。它适合倒排索引、全文检索、日志分析和搜索推荐,不适合作为强一致的交易主库。
如果数据以时间为主轴增长,查询经常围绕时间窗口、指标聚合和降采样展开,阅读 InfluxDB。时序数据库适合监控、物联网、设备指标、行情和链路观测。
如果问题核心是关系路径、层级追踪、相似关系或关联推理,阅读 图数据库。图数据库适合社交关系、风控网络、知识图谱、权限继承和供应链影响分析。
如果数据规模已经超出单库分析能力,或者需要批处理、流处理、离线仓库和湖仓体系,阅读 大数据技术。这部分关注从采集、存储、计算、调度到治理的完整链路。
选型边界
选型不应从产品名称开始,而应从数据形态、读写模式、一致性目标和运维能力开始。数据库选型最常见的误区,是把缓存当主库、把搜索引擎当事务库、把文档数据库当任意关系查询工具,或者在数据量尚未形成瓶颈时过早引入复杂分布式架构。
| 问题 | 优先选择 | 判断标准 |
|---|---|---|
| 核心交易、订单、账户、库存 | MySQL、PostgreSQL | 需要事务、约束、审计、备份恢复和稳定 SQL 能力 |
| 热点读取、临时状态、排行榜 | Redis | 数据可重建,访问延迟要求高,能接受内存成本 |
| 内容、配置、画像、事件载荷 | MongoDB | 字段变化快,读写多围绕单个文档聚合 |
| 搜索、日志、文本检索 | Elasticsearch | 需要分词、相关性排序、复杂过滤和聚合 |
| 监控指标、设备数据、行情 | InfluxDB、TimescaleDB | 数据按时间追加,查询围绕时间窗口和聚合函数 |
| 关系网络、路径分析、知识图谱 | Neo4j、JanusGraph 等图数据库 | 查询重点是多跳关系、路径和关系权重 |
| 离线分析、报表、数据湖 | Spark、Flink、Kafka、HDFS、湖仓组件 | 数据来自多个系统,需要批流处理、分层建模和调度 |
典型组合
大多数生产系统不是只使用一种数据库,而是围绕主存储建立配套组件。组合时要明确每个组件的数据权责,避免同一份业务事实在多个系统里同时被写入。
业务系统
text
应用服务 -> MySQL/PostgreSQL -> binlog/WAL -> Kafka -> 搜索、缓存、数仓
|
+-> Redis 缓存热点查询结果关系型数据库保存权威数据,Redis 缓存可重建数据,Kafka 承接变更事件,Elasticsearch 或数据仓库用于检索和分析。应用写入链路应以主库提交为准,其他系统通过事件或同步任务异步更新。
搜索系统
商品、文章、工单、日志等场景通常使用关系型数据库保存原始记录,再将可搜索字段同步到 Elasticsearch。搜索结果只返回标识和排序信息,详情页仍回查主库或读取经过校验的缓存,避免搜索索引过期导致业务状态错误。
指标与观测
监控和设备采集链路通常由采集器写入消息队列,再进入时序数据库或日志系统。高频指标要设计保留策略、降采样规则和标签基数限制,否则存储成本和查询延迟会快速失控。
数据平台
业务库不直接承担大规模报表查询。常见做法是通过 CDC、日志或批量同步进入数据湖、数据仓库或湖仓表,再由 Spark、Flink、Trino、ClickHouse 等组件处理分析查询。调度系统负责依赖编排、补数和失败重试。
排查入口
数据库问题通常先区分是写入失败、读取变慢、数据不一致还是容量告警。不要直接从调参开始,先确认影响面和证据链。
| 现象 | 优先检查 | 常用入口 |
|---|---|---|
| 接口变慢 | 慢 SQL、索引命中、锁等待、连接池耗尽 | EXPLAIN、慢查询日志、数据库连接数、应用线程栈 |
| 写入失败 | 唯一键冲突、事务超时、磁盘空间、主从状态 | 错误码、事务日志、磁盘监控、复制延迟 |
| 数据不一致 | 缓存更新顺序、异步消息丢失、重复消费、读写分离延迟 | 主库记录、缓存 TTL、消息位点、从库延迟 |
| 查询结果缺失 | 同步任务失败、搜索索引延迟、分区裁剪错误 | CDC 状态、任务日志、索引刷新、分区范围 |
| 成本异常 | 大 Key、高基数标签、历史数据未归档、索引膨胀 | Redis 内存分析、时序标签统计、表大小、索引大小 |
能力验证清单
- 能根据业务事实表、缓存、搜索索引和分析表的不同职责拆分读写链路。
- 能解释事务隔离级别、索引选择、锁等待和慢查询之间的关系。
- 能为核心业务库设计备份策略,并说明 RTO、RPO、恢复演练和权限控制。
- 能判断 Redis、Elasticsearch、MongoDB、InfluxDB、图数据库分别适合和不适合承接哪些数据。
- 能把业务库数据进入大数据链路的方式讲清楚,包括 CDC、消息队列、离线同步、分层建模和任务调度。
