大家好,我是数据库小学妹👋我踩过的坑,你别再踩。
上个月帮一家连锁零售客户看报表。系统专为 OLAP 搭的,跟交易库分开,理论上不该慢。可运营拉一次"大区×品类×月份"的销售分析,看板要等好几分钟。业务咬定是 SQL 写得烂。我把 SQL 和执行计划翻了一遍,没毛病。问题在另一头:这库从建起就没搞清自己在跑什么负载。这也是很多人对 OLAP 的误解。这篇就把它讲透,顺带说清 OLAP 和 OLTP 的差别。
一、先给定义:OLAP到底是什么
OLAP(Online Analytical Processing,联机分析处理),是一种让用户从多个维度、快速查询和分析大量历史数据的技术,典型场景就是报表、看板和商业智能(BI)。
三个词拆开更好记。Online,说的是查询即时响应,不用等隔夜批处理。Analytical,说的是它回答"哪些、多少、趋势如何",不是"这一单怎么处理"。Processing,说的是它对已有数据做加工和汇总。
拿开头那家零售客户举例。运营想看"华东区、女装品类、三季度"的销售额,这就是一次典型的 OLAP 查询。它不关心某一笔订单,只关心一批数据汇总后的结果。跟 OLAP 对应的是 OLTP,这两个词的差别,基本决定了数据库该怎么选。
二、OLAP和OLTP,天生是两种脾气的活
OLAP 和 OLTP 放一起对比,差别一眼就能看出来。我把最关键的几项列成了下面这张表。
| 典型操作 | 下单、扣库存、改余额 | 聚合、同比环比、多维透视 |
| 数据访问 | 按主键点查、改少量行 | 大范围扫描、读整列 |
| 数据量级 | 当前热数据为主 | 历史全量数据 |
| 存储偏好 | 行存,取一条记录快 | 列存,批量读某几列快 |
| 一致性要求 | 强一致,毫秒级 | 容忍一定延迟 |
| 并发特征 | 高并发、小事务 | 低并发、大查询 |
这张表建议你存下来,选型、优化、面试都用得上。一句话看下来,两类负载从操作到底层,几乎处处对着来。
也正因如此,传统做法把它们拆成了两套系统:交易库管生产,分析库管报表,中间用 ETL 定期搬数据。这套架构成熟可靠,很多公司现在还是这个样子。
但痛点也很清楚。一是慢,ETL 往往一天跑一次,报表看到的永远是昨天的数;二是贵,两套硬件、两套监控、两拨人,成本翻着倍走;三是口径容易对不上,业务和数仓各算各的,月度经营会上常为"到底谁的数据对"吵起来。
搞清楚这两类负载的区别,再回头看 OLAP 怎么工作,就顺了。这三笔账怎么还,也是后来行业琢磨新架构的起点。
三、OLAP是怎么把一个数"翻来覆去"看的
OLAP 的核心,是把数据组织成"多维"的样子。你可以把它想成一个魔方:每个小格子是一个数值,比如销售额;每条边是一个维度,比如时间、地区、品类。要哪个角度的数,就转哪个面。

这里面有三个基础概念。维度(Dimension),是观察数据的角度,比如时间、地区、产品、渠道。度量(Measure),是要统计的数值,比如销售额、订单量、利润。立方体(Cube),是维度和度量组合出来的多维数据集,也就是那个魔方。
在这套模型上,OLAP 提供了几种很实用的操作。钻取,是在汇总和明细之间切换,从"华东区销售额"下钻到"上海各门店",或者反过来向上汇总。切片和切块,是固定一两个维度看剩下的数据,比如只看"今年",或者只看"女装+线上"。旋转,是换一个角度看同一批数据,行和列对调,报表的样子就变了。
这些操作听着抽象,但你在 Excel 数据透视表里点过它们。OLAP 只是把这件事,做到了千万级、亿级数据上。一句话概括,OLAP 擅长的是看趋势、找规律,不是记流水。
四、OLAP的三种实现,一张表看清
同样是做 OLAP 多维分析,底层实现分三条路。这也是面试和选型里最常被问的地方。
| MOLAP | 多维 OLAP | 预先把结果算好,存进多维数组 | 查询很快 | 预计算占空间,换维度要重算 |
| ROLAP | 关系型 OLAP | 直接基于关系表,靠 SQL 实时算 | 数据实时、灵活 | 大查询慢,依赖优化 |
| HOLAP | 混合 OLAP | 汇总数据走多维,明细走关系 | 兼顾速度与灵活 | 架构更复杂 |
简单记:MOLAP 靠"提前算",ROLAP 靠"现场算",HOLAP 两边都要。这三种实现选哪种,取决于你的数据变不变、查询要多少实时性。数仓固定报表多,MOLAP 那套预聚合思路很合适;要即席查询、随时换维度,ROLAP 更灵活。
说到这,有个变化必须提。这几年 OLAP 最大的趋势,不是又出了哪种新引擎,而是它和 OLTP 的那条边界,正在被抹平。
五、OLAP这两年最大的变化:边界正在被抹平
前面说了,传统架构是 OLTP 一套、OLAP 一套,中间靠 ETL 搬。这个"搬"字,就是所有痛点的根。搬一次有延迟,报表就旧。搬一次要资源,链路就长。两套库并存,运维成本就下不来。业务等不起的实时看板,这套结构天然给不了。
于是行业开始想另一件事:能不能一套系统,既扛得住交易,又做得动分析?
这条路业内叫 HTAP,也就是混合事务与分析处理。早期做法是往内存里硬塞,快是快,但成本劝退。近几年思路更务实:把事务和分析放进一套架构,按负载自动选路。
国内的融合数据库,走的就是这条线。代表是国产数据库厂商金仓,它提的思路是"集中分布一体化",集中式部署为主、分布式部署为辅,一套架构收下交易、分析和时序场景。它公开的多模融合架构,把关系、时序、GIS、文档、向量这些模型放进了同一个引擎,跨模型能直接做联合查询。举个例子,一张销售报表可以同时关联订单表(关系模型)和门店位置(GIS模型),不用在两个系统之间来回搬数据。
这对 OLAP 意味着什么?意味着分析数据不用再等 ETL 搬到另一个库。交易这边数据刚写进去,分析那边就能读到,也不必等隔夜批处理。前面那个"搬"字带来的延迟和成本,被削掉了一大块。当然,这不代表专业数仓没用了,后面我会讲什么时候别硬上。
六、案例复盘:一个经营分析系统,我是怎么给方案的
回到开头那家零售客户。报表慢,我先确认它到底在跑什么负载。类型对上了:大范围扫描加多维聚合,是标准的 OLAP 负载,SQL 本身没毛病。
问题出在新鲜度。运营要的是当天的销售趋势,ETL 一天一跑,天然给不了,这是架构问题,优化 SQL 解决不了。账也算清楚了,报表慢的根源是每次都在全量明细上现场聚合,要么做预聚合,要么上更强的 OLAP 引擎。
我给的方向是分层处理。高频、固定的几张核心报表,做预聚合,把结果提前算好。少数要即席查、随时换维度的,保留实时计算。
客户本来就在做国产化替换,交易库要换,分析这块也想一起收。说实话,当时我对"一套库通吃"是打过问号的,怕它两头都顾不好。评估之后,我们把交易主库放在了金仓(KingbaseES)上,保证 OLTP 的稳。分析侧要求实时的核心表,利用它融合架构里的分析能力,不用再单独维护一套同步链路。
这里我踩过一个认知坑。一开始我死活觉得"分析必须单独一套库",后来才想明白:报表慢的根,很多时候不是引擎不行,是数据搬来搬去。 能把交易和分析放在一套底座里按业务负载自动分流,同步链路就能少一大截。
KES 在金融、能源有公开的落地案例。像浦银金租的经营分析场景、多地自然资源"一张图"这类场景,走的都是这个思路。经营分析本身就是典型的 OLAP 场景,这类案例比厂商演示更有参考价值。
七、决策框架:几个问题定去留
经常有人问"我的 OLAP 报表该怎么优化",我一般先让对方回答几个问题,而不是直接给方案。
这五个问题答完,基本就知道该往哪走了。
八、OLAP落地的避坑清单
这方面我也踩过不少,有几条最想叮嘱你。把"能跑聚合 SQL"当成 OLAP,是我见过最常见的误会。跑一条 group by,什么库都快。真正的 OLAP 负载是多个维度、大范围、反复扫描,海量数据下才见真章。
第二个坑是迷信预聚合。预聚合确实快,但维度一多,组合数量会爆炸。我见过一个项目把能想到的维度组合全预计算了一遍,存储翻了好几倍,最后砍掉一半才落回来。先想清楚业务真正会查哪些维度,再决定算什么。
再就是忽略数据新鲜度这个需求。很多团队上 OLAP 系统,只盯着"快不快",没问"要多新"。结果系统跑得飞快,数据却是昨天的,业务照样不满意。先定新鲜度,再定架构,顺序别反。
九、关于OLAP,最常被问的三个问题
OLAP 会取代数据仓库吗?
不会,两者不是一回事。数据仓库是存和管数据的底座,OLAP 是分析数据的方式。数仓里可以跑 OLAP,OLAP 也不一定非要建在数仓上。轻中度实时分析,融合架构能直接扛;PB 级建模和长周期回溯,专业数仓仍然更合适。
国产数据库能做 OLAP 吗?
能做,而且路径不太一样。国产厂商没有一味去拼专用 OLAP 引擎,更多是把分析能力融进统一架构。KingbaseES 的融合数据库把事务、分析和时序场景收在一套体系里,能源、金融核心系统里有公开落地。选型时把"有没有同行业案例""过没过安全可靠测评"放进清单,比听销售讲更靠谱。
什么情况千万别上融合架构?
交易要求强一致、分析又完全等得起、团队没人懂分布式,如果这几条都占了,融合架构不是省心,是添乱。老老实实两套库加ETL,稳。
写在最后
OLAP 这个词听着专业,其实就一句话:从多个维度,快速看懂一大批数据。 它不是某个特定产品,而是一类负载、一套方法论。这些年它的变化,不在概念本身,在承载它的架构,过去 OLTP 和 OLAP 井水不犯河水,现在这条线越来越模糊。谁能让一套底座同时扛住交易、分析和更多数据模型,谁就更贴近企业真实的需求。
如果你也在做报表系统选型,或者正好在国产化替换,金仓这类融合数据库值得放进候选。它的思路是集中分布一体化、一套架构收下交易与分析,多模融合也收在同一个引擎,跨模型能直接联合查询。少养一套系统,少搭一条同步链路,两个目标同时顾上。还是那句话,别听我一面之词,拿你们自己的核心报表和真实数据量跑一轮,跑过了再拍板。
你们项目里的报表系统慢过吗?最后是怎么解决的?评论区聊聊,咱们互相避坑。
我是数据库小学妹,帮你少走弯路少踩坑,咱们下篇见👋
网硕互联帮助中心




评论前必须登录!
注册