本节摘要:层级式、通用式、先进先出,三种压缩策略像三家报价结构完全不同的搬运公司:层级式按次搬运、秩序最好、单价最高;通用式按需拼车、单价温和、但车上常年塞着重叠行李;先进先出式不搬运只淘汰,专做有时效的生意。本节把三家的报价单并排摊开——写放大、读放大、空间放大各收多少,参数抓手在哪,什么负载该签哪家的合同。
上一节说过,策略选择的本质是替负载挑一个最不心疼的亏法。这话要成立,前提是你看得懂各家的报价单。我们把三本放大账当成三种收费:写放大是搬运费,读放大是查询时的开门费,空间放大是仓储费。三家公司给你的套餐完全不同,没有一家能三项全免。
先给一个总判断,再去细看:读多写少、要预算可控,签层级式;写入凶猛、读路径宽容,签通用式;数据自带保质期、过期即无效,签先进先出式。 三个名字对应的配置枚举分别是层级压缩、通用压缩、先进先出压缩,按列族配置,一个实例里可以多列族各签各家。
层级式是默认策略,气质像一位恪守章程的会计:每个文件入账后必须放到严格有序的层级里,层内文件键范围互不重叠,层与层之间容量十倍递增。零层是新账,满四笔就往一层归并;一层超容就挑文件向二层搬,如此类推。
它的报价特点来自「层内无重叠」这条铁律:一次点查在每层至多翻一个文件,布隆过滤器再打折,读放大的上界清晰可算;每层容量有明确上限,磁盘占用可以提前预算——理论空间放大上界约二点一倍,一 TB 有效数据顶多占二点一 TB 盘。这两条让它在读敏感、要容量规划的负载里几乎无可替代。
代价写在搬运费上:一笔数据从零层沉到最深层,每层几乎完整重写一遍,写放大轻松过十。另一个隐患是停顿风险:深层归并一时消化不完,上层积压,三道闸门就开始刹车。默认参数对写密集负载偏保守,靠调参能缓解但翻不了盘——层级式的写放大是结构性的,调参只是讨价还价,不是改商业模式。
通用式换了一套商业逻辑:不搞严格层级,所有文件按大小排序共处一层,归并由「邻居协商」触发——新刷出的文件和大小相近、重叠够多的邻居拼成一车,合并成一个更大的文件,再等下一轮拼车。它的触发条件看两个比值:相邻文件大小比例达到阈值(常见配置二成左右),或者重叠文件的总大小不超过若干倍,就发车。
拼车模式省搬运费:一笔数据不再逐层重写,而是搭着批量归并的便车一次沉底,写放大常能压到层级式的几分之一,写入曲线也平稳——没有「某层超容」这种全局性触发,停顿天然少。代价在仓储:拼车前新旧文件长期共存,同一份数据的有效副本和过期副本同时在库,空间放大明显抬头;读路径也要翻更多重叠文件,靠布隆过滤器兜底。它适合写吞吐是一号矛盾、读延迟要求宽松、磁盘买得起的负载——时序采集、日志汇聚、消息索引这类「写得狠、读得少」的业务。
第三家最极端:根本不搬运。所有新文件堆在第一层,堆到总容量上限就把最老的文件整批扔掉,数据寿终正寝。没有归并就没有写放大(除刷盘外接近于零),没有层级就没有停顿,实现简单到近乎任性。
它只有一种合法生意:数据自带保质期,过期即无效。监控样本、会话流水、时效性缓存落盘,这类数据「新的一定比旧的有价值」,整批淘汰完全不伤业务。签它家合同的前提是承认数据会被物理丢弃——通用负载拿它当默认策略,等于把仓库租给了碎纸机。容量阈值就是它的空间放大上限,账目倒是出奇地好算。

报价单之外,签约前要做的尽调就三件事。第一,量化自己的读写比例与延迟承诺:把点查 P99 的服务目标、写入吞吐峰值、可接受的空间冗余三组数字写下来,任何一组缺失,策略选择就是拍脑袋。第二,做对照基准:引擎自带的基准工具支持指定压缩策略跑同一份负载,把三本放大的实测数字拿出来比,比任何经验文章都可靠。第三,检查配套参数是否跟着策略走:零层触发数、文件目标大小、触发比值这些参数在三种策略下含义不同,换了策略不换参数,等于签了新合同还按旧价目表付钱。
报价单之外,选型讨论里反复出现三个误判,值得逐个纠正。
误判一:「写入快的策略读一定慢」。通用式的读放大高于层级式是对的,但高多少取决于布隆过滤器与缓存的质量——第 6 章的两张折扣券打完折,不少点查型负载在通用式下的读延迟与层级式相差无几。用「理论形状」推「实际账单」会得出过于悲观的结论,基准实测才是准数。
误判二:「层级式是默认所以最安全」。默认值对默认负载成立;写入持续高于消化能力的负载,层级式的停顿风险反而是最大的安全隐患。安全与否看负载形态,不看出身。
误判三:「策略定了就不能换」。列族的压缩策略可以在线调整,新写入按新策略组织,旧数据在后续归并中逐步迁移——换策略是渐进过程而非一刀切。真正要慎重的是换策略后的观察期:两套形状并存期间,读放大的波动是正常现象,别在过渡期里下结论。三个误判合起来是一句话:策略是负载的函数,不是信仰的分支——一切以自己负载的实测数字为准。
再把三家的关键参数并成一表,便于签约时逐项核对:
| 策略 | 核心参数 | 参数动的是什么 |
|---|---|---|
| 层级式 | 零层触发数 · 层容量基线与倍率 · 文件目标尺寸 | 归并频率与层级秩序 |
| 通用式 | 大小比值 · 最小合并数 · 空间放大上限 | 拼车时机与仓储上限 |
| 先进先出 | 容量上限 · 是否允许层内归并 | 淘汰红线与顶层秩序 |
选型讨论先对表再站队:三份报价单、一张参数表、三个误判,够开一场有据的评审会;
策略选择是挑亏法:层级式亏在搬运费,通用式亏在仓储费,先进先出式只适合有时效的数据;
层级式读放大最低、空间可预算、写放大结构性偏高,读敏感与容量规划敏感负载的首选;
通用式写放大低、写入曲线平稳,代价是重叠副本推高读与空间的账,写凶读宽业务的生意;
先进先出式接近零搬运,专伺候过期即无效的数据,通用负载误用等于租了个碎纸机;
多列族可混合签约,按账本分而治之;换策略后必须重做基准,旧参数别带进新合同。