SYMPTOM问题解了,但只是"加了一档马力"
升配是有效的止血,不是答案。库还在长——它会在某个点再次顶到天花板,而那时再加一档的边际收益会越来越小。
OLTP、OLAP、Lakehouse 到底在分什么?Snowflake 和 Databricks 跟我们的数据库、跟「企业大脑」是什么关系——以及最实际的那个问题:我们现在该不该上。
// 先把三个名词讲清楚,再用生产库的真实体量做判断 · 数据实测 2026-08-06
这不是一篇从名词讲起的科普。它起于生产环境的一次真实告警——而告警修完之后,真正值得回答的问题才浮出来。
数据库控制台弹出 exhausting multiple resources:CPU 82%、内存 76%,当天有 4 份资料写库超时失败。把 compute 从 Micro 升到 Small(2GB / 独占 CPU)之后,CPU 掉回 13%,橙条消失,之前反复失败的写入当日首次通过。
升配是有效的止血,不是答案。库还在长——它会在某个点再次顶到天花板,而那时再加一档的边际收益会越来越小。
市面上最常被提到的两个名字是 Snowflake 和 Databricks。要回答该不该上,得先分清三个总被混着说的名词。
先用三节把 OLTP / OLAP / Lakehouse 讲清楚(这部分与具体项目无关,可当通用概念读),再用生产库的真实体量做一次有数字的选型判断,最后落到五个「不用买也能抄」的做法。
联机事务处理。支撑线上业务的每一次读写——下单、改状态、锁一条记录。特点是并发高、每次只碰几行、对正确性零容忍。我们的 Postgres 就是纯粹的 OLTP。
一行数据在磁盘上连续存放。取一整行只要一次 IO——这正是"给我这个用户的全部信息"这类请求最需要的布局。
靠索引直接跳到目标行,毫秒级点查。事务保证「转账不会只扣钱不到账」、「两个人抢同一条线索只能有一个抢到」。
几千 QPS,每条只碰几行。评价标准是并发正确性与尾延迟,而不是吞吐量——这一点和 OLAP 正好相反。
抢线索的 RPC——按「组织 + 抖音用户」锁一条线索 4 小时,两个运营同时拉单不会拉到同一个人;消息队列状态流转——从待审批到已通过到已发送,每次就改一行;行级安全(RLS)——每一次请求都要判断这个账号能看哪些组织的数据。这三件事都要求:快、准、能并发,而且错一次就是业务事故。
联机分析处理。回答的是「过去 90 天每个号源带来的中高意向评论,按周分组的转化率是多少」这种问题——不改数据,只扫和聚合。并发很低(可能就几个人在用),但每条查询要扫过海量的行。
同一列的数据连续存放。只关心两三列的聚合查询,就只读那两三列的数据——其余的一个字节都不碰。
一列里全是同类型、往往还高度重复的值(比如意向等级只有三四种取值),压缩率可以到几十分之一;压得越狠、要读的字节越少。
不是一行一行地过,而是一次处理一批值(SIMD 友好)。加上前两条,同一个聚合查询常常快 10~100 倍。
同一个问题 · 两种存储要读多少数据(量级示意)
// 问题:441,753 条评论里,各意向等级各占多少条?
// 行存必须把每一行整行读进内存——包括几百字节的评论正文;列存只读「意向等级」那一列,且这列高度重复、压缩极狠。
// 上图为量级示意而非基准实测,用来说明差距来自哪里:不是引擎更聪明,是要搬的字节根本不在一个数量级。
想让一套系统同时干这两件事,业内叫 HTAP(混合事务/分析处理)。Postgres 在小体量下天然就是个够用的 HTAP——这正是我们现在还不需要拆的根本原因。矛盾只在体量上来之后才变得不可调和:两类负载对存储布局的要求是相反的。
Lakehouse(湖仓一体)是个演化产物,按顺序讲才说得清。每一代都是在修上一代的致命伤,同时带进新的问题。
// 一句话:Lakehouse = 便宜开放的对象存储(湖的成本)+ 元数据事务层(仓的可靠性)。
Snowflake / Databricks 都不能替代业务库。它们不服务线上流量、不做逐请求的行级安全。就算上了,也是「再加一套」而不是「换一套」——它们和 Postgres 是叠加关系,不是替换关系。
选型讨论最容易跑偏的地方,是不先量自己。以下全部是 2026-08-06 直连生产库跑出来的真实数字。
| 表 | 行数 | 体积 | 性质 |
|---|---|---|---|
| comments | 441,753 | 443 MB | 抓取到的评论原始数据(bronze 层) |
| llm_call_provenance | 192,527 | 442 MB | 模型调用审计日志 · append-only,无保留策略 |
| scrape_jobs | 200,042 | 170 MB | 抓取任务队列 · 已有 7 天滚动窗口 |
| videos | 55,867 | 62 MB | 视频元数据 |
| lead_profiles | 23,443 | 35 MB | 线索画像(silver 层) |
| kb_chunks | 3,856 | 28 MB | 知识库分块 + 512 维向量 · pgvector HNSW |
| messages | 26,165 | 14 MB | 会话消息 |
整个库 1.35 GB——塞得进一台笔记本的内存。Snowflake / Databricks 的性价比拐点在 TB ~ PB 级;我们在 GB 级。差距不是「还差一点」,是三个数量级。在这个体量上,一台笔记本上的 DuckDB 做全表聚合都在一秒以内。
「企业大脑」的知识层也在这张表里:460 个条目 / 3,856 个向量分块。这个量级用 pgvector + HNSW 是正解——要到千万级分块才谈得上需要专用向量基础设施。
两家的计费模型不一样,但共同点是——贵在算力,不在存储。而算力的最小档位,对我们这种体量来说全是浪费。
Standard $2 / credit(Enterprise $3、Business Critical $4)。最小的 XS 虚拟仓 1 credit/小时,按秒计费但启动有 60 秒起步。
存储另计,约 $23–40 / TB / 月。
DBU 从 jobs light 的 $0.22 到 serverless SQL 的 $0.70 不等,另外还要付底层云厂商的机器钱。
这套双重计费让成本估算明显更难,基础设施常在 DBU 之上再加 50–200%。
1.35 GB 按 $23/TB 算是 每月三分钱。也就是说我们付的钱100% 是算力的最小档位费,而那个档位是为 TB 级设计的。
月度成本对照(同一份 1.35 GB 数据)
// Snowflake 一栏= 1 credit/小时 × $2 × 2h × 30 天,且这还只是分析侧的额外开销——线上业务库该付的钱一分不少。
// 换算下来:为一个塞得进内存的数据集,多付 8 倍于整个生产库的钱。
回到第 01 节那次告警。它是 OLTP 的内存与算力不够,不是分析能力不够——上数仓一行也不会缓解,因为线上写入还是走 Postgres。顺着这条线查下去,找到了真正该动的东西。
llm_call_provenance 一张审计表就占了整库的 三分之一(442 MB),其中 101,495 行超过 30 天。它最早的记录只到 2026-06-05——两个月长出 442 MB,年化约 2.6 GB,而且没有任何保留策略。
这是纯 append-only 的观测日志:写完就不再改,没有任何事务需求,线上请求也从不读它。它却和最热的业务表抢同一块内存。
scrape_jobs 有 7 天滚动窗口,196,568 行里超过 30 天的是 0 行;video_stats_history 超 30 天的只有 505 行。唯一在裸奔的就是它。
该做的第一件事不是买平台,是给这张表加保留窗口 + 冷数据外迁。它既是当前最大的单表负担,又是最没有事务需求的纯日志,改动风险最低、见效最直接。
「不该买」不等于「没关系」。这两家真正值钱的是架构思想,而这些思想在 GB 级同样成立,而且几乎不花钱。按 ROI 排序如下。
Databricks 的本质是:热数据在库、冷数据在对象存储、按需拉起算力。这件事我们可以在自有的 R2 桶上做,成本约等于零。
做法:审计表超 30 天的十万行按月导成 Parquet 丢进对象存储,库里只留 30 天;要回溯查成本归因时用 DuckDB 直接查 Parquet,比在 PG 里扫全表还快。预计立刻释放约 300 MB——在 2GB 内存上是实打实的余量。
原始评论与视频是 bronze,线索画像与会话是 silver,日报与统计是 gold。
铁律只有一条:报表只读 gold,永不扫 bronze。这正是「分析查询和线上业务抢 CPU」最典型的入口——值得把所有报表脚本翻一遍,看有没有偷偷直查原始表。
Databricks 的 Unity Catalog 解决的是「哪些数据、谁能碰、能流到哪」。这条正好命中我们知识库的一个已知缺口——
在库的资料里只有一部分可以合规外发给客户,但库里根本没有「能不能发给客户」这个标记字段。不需要买它,加一列加一条策略就够了。这条的价值不在性能,在于它防的是合规事故。
Snowflake 的 Time Travel 用来回答「上周三这份数据长什么样」。我们已经在给部分配置做快照了,值得把知识库、决策规则、人设也纳进来。
配合审计表里已有的调用指纹,就能回答一个很实际的问题:这条消息当时用的是哪一版规则、哪一版人设——出问题时这是唯一能定责的线索。
Databricks Vector Search 与 Snowflake Cortex Search 干的,就是我们 pgvector 那一层的活。3,856 个分块要到千万级才谈得上换专用设施。
更要紧的是:「企业大脑」的瓶颈是策展不是存储——知识条目、对话样本、决策规则的数量才是天花板,换成 Snowflake 一条也不会变多。
五条里没有一条需要新增供应商。它们要的都是把数据放对位置——热的留在事务库、冷的沉到对象存储、算好的只读汇总层、该打标的打上标。
这也是为什么它们在 GB 级就能生效:这些是架构纪律,不是规模红利。
「现在不上」是有条件的结论,所以要把条件写下来——否则半年后没人记得当初为什么否决,只好从头再吵一遍。
升级阶梯 · 从便宜到贵,别跳级
// 阶梯最大的好处是 Parquet 是开放格式——STEP 1 落下去的数据,到 STEP 3、STEP 4 依然直接可读。升级路径不是推倒重来。
它们的性价比拐点在 TB~PB,我们在 GB。而且它们不能替代业务库,上了是加一套不是换一套。
冷热分层 · 分层建模 · 治理打标 · 版本快照,加上一条反向结论:招牌向量检索恰恰是最不用抄的。
最大的单表负担、最没有事务需求的纯日志——风险最低、见效最直接,也顺手把湖仓的第一步落了地。
库内数字为 2026-08-06 直连生产库实测;Snowflake / Databricks 定价为 2026 年 8 月公开资料口径,真要立项前请按官方定价页重新核验——上一次凭印象说某云服务价格,实际与真实数字差了近 4 倍。