OLTP 与 OLAP 的差异是什么
交易型负载(OLTP)以高并发点查点写、事务与低延迟为核心;分析型负载(OLAP)以批量扫描、聚合与吞吐为核心。用一套引擎同时硬扛两类负载通常两边都不理想:分析查询会抢占 IO 与锁,业务高峰期的慢查询往往就是这样来的。常见做法是把分析流量独立到列式库,通过 CDC 或导出任务同步数据,让两边的稳定性与性能可以分别优化。
基本信息
| OLTP 特征 | 按主键读写、小范围更新、高并发短事务 |
|---|---|
| OLAP 特征 | 全量扫描、多维聚合、低并发长查询 |
| 数据组织 | OLTP 多用行存与 B 树索引,OLAP 多用列存与稀疏索引 |
| 隔离方式 | 主库专注交易,分析走派生存储 |
| 所属系统 | 架构选型通用概念 |
负载特征对比
| 维度 | OLTP | OLAP |
|---|---|---|
| 典型查询 | 按主键读写、小范围更新 | 全量扫描、多维聚合 |
| 并发 | 高并发短事务 | 低并发长查询 |
| 数据组织 | 行存加 B 树索引 | 列存加稀疏索引与分区 |
| 优化目标 | 延迟与事务正确性 | 吞吐与压缩率 |
| 扩容方式 | 垂直扩展为主 | 水平扩展为主 |
典型使用场景
- 报表隔离:把报表查询迁到列式库,主库只服务业务
- 数仓搭建:用同步链路把业务明细汇入分析库
- 资源规划:按两类负载分别评估机器规格
- 故障预防:识别历史上由分析查询引发的业务抖动
- 技术选型:新项目先明确以哪类负载为主
分层示例
分层示例
OLTP 实例:MongoDB / PostgreSQL,承载订单与用户状态
分析实例:ClickHouse,承载明细聚合与报表
数据流向:CDC 或导出任务把变更同步到分析侧
分析查询不进主库,避免与交易业务争抢资源报表拖库是常见的故障起点:把分析流量独立到列式库后,主库稳定性与报表性能可以分别优化。
在交易主库上跑大聚合会带来锁竞争与 IO 抢占,慢查询往往正好在业务高峰期爆发。
把数据同步当一次性工程是常见误区,增量同步与重放机制需要长期维护。