硬件选型:SSD vs HDD在时序场景下的成本与性能权衡

做时序索引存储,第一个要面对的问题就是:数据往哪放?

很多人觉得,现在SSD这么便宜了,无脑上SSD不就完了?嗯,我刚开始也是这么想的。直到我负责的那个物联网时序平台,每天写入量超过5TB,连续跑了三个月后,运维同学拿着账单来找我——光存储成本就占了整个集群预算的60%。

说白了,时序数据的特点是:写入量大、查询范围广、冷热分层明显。选错存储介质,要么性能崩,要么成本崩。今天我就把我在这个坑里爬出来的经验,一条条说清楚。

一、时序场景下,SSD和HDD的本质差异

先看一张对比表,把核心差异列清楚:

维度 SSD (NVMe/SATA) HDD (SATA/SAS)
随机读延迟 0.1-0.3ms 5-15ms
顺序写吞吐 500-3500 MB/s 150-250 MB/s
随机写IOPS 50k-1M 100-200
每TB成本 ¥800-2000 ¥150-300
功耗/盘 3-8W 6-12W
寿命(写入量) 有限(按DWPD计算) 几乎无限(机械磨损)

注意看随机写IOPS那一行。时序索引的写入模式,恰恰是典型的小批量随机写——每个时间点的数据要更新到对应的索引块里。HDD在这种场景下,IOPS直接被打到两位数,而SSD可以轻松扛住几十万。

核心结论:时序索引的写入路径,必须跑在SSD上。否则索引构建速度会成为整个系统的瓶颈。

二、我踩过的第一个坑:全盘SSD方案

2019年,我负责一个金融时序项目。当时拍脑袋决定:全部用NVMe SSD,省心。结果呢?

  • 成本失控:单节点12块3.84TB NVMe,光硬盘成本就超过15万。集群30个节点,光存储硬件花了450万。
  • 容量浪费:90%的数据是超过30天的冷数据,查询频率每周不到一次。这些数据躺在昂贵的NVMe上,纯属浪费。
  • 寿命焦虑:时序写入量巨大,NVMe的DWPD(每天全盘写入次数)只有1-3。我们算了一下,3年后就得换盘。

后来我学乖了。时序存储,一定要做冷热分层。

三、正确的分层策略:热SSD + 冷HDD

这是我目前在多个生产环境中验证过的方案:

  1. 热数据层(0-7天):NVMe SSD,承载写入和近期查询。容量占比10-15%。
  2. 温数据层(7-30天):SATA SSD或大容量QLC SSD,承载常规查询。容量占比20-25%。
  3. 冷数据层(30天以上):HDD(16TB+),只做归档和低频回溯查询。容量占比60-70%。

你想想看,这样一拆分,存储成本直接降了40%以上。而且热数据层的SSD寿命压力也小了很多——因为写入量大部分集中在热层,温冷层基本只读。

我的习惯:热层SSD选TLC颗粒,性价比最高。温层可以上QLC,虽然寿命短一点,但读取多写入少,完全够用。冷层HDD选CMR(传统磁记录),别碰SMR(叠瓦式),否则随机读性能会让你怀疑人生。

四、避坑指南:我曾经踩过的三个具体坑

坑1:HDD做索引写入

有一次,我把时序索引的WAL(预写日志)放在了HDD上。结果写入延迟从2ms飙升到200ms,整个写入管道直接堵死。后来排查才发现,WAL是典型的同步随机写,HDD根本扛不住。

教训:所有写路径(WAL、索引更新、元数据变更)必须用SSD。读路径可以视情况放在HDD上。

坑2:忽略SSD的写放大

时序索引经常做小数据块合并(compaction)。每次合并都会产生大量的写放大。我遇到过一块号称5PBW寿命的SSD,在时序场景下只用了2年就挂了。原因就是写放大系数达到了8-10倍。

教训:选SSD时,不要只看标称寿命,要按实际写放大系数折算。我一般按3倍写放大预留寿命余量。

坑3:HDD做跨盘查询

冷数据层用HDD没问题,但查询时如果跨多个HDD做随机读,性能会急剧下降。有一次用户查一个月的时序数据,结果查询跑了40分钟——因为数据分散在20块HDD上,每块盘都要做随机寻道。

教训:冷数据层要按时间范围做连续存储,尽量让一次查询落在尽量少的HDD上。我通常按天或按周做数据分片,保证单次查询最多跨2-3块盘。

特别注意:不要为了省钱把热数据也放HDD。时序索引的写入性能一旦掉下去,整个系统的数据新鲜度就没了。用户查不到最近几秒的数据,这个系统就废了。

五、成本与性能的量化权衡模型

我习惯用一个简单的公式来做选型决策:

总拥有成本(TCO) = 硬件成本 + 功耗成本 + 运维成本 + 性能损失成本

性能损失成本 = (查询延迟 - 目标延迟) × 查询次数 × 单次损失金额

举个例子:

  • 全SSD方案:硬件成本100万,功耗5万/年,运维2万/年,性能损失0。
  • 分层方案:硬件成本60万,功耗8万/年(HDD多),运维3万/年,性能损失(冷查询慢)折算5万/年。

算下来,分层方案第一年省32万,之后每年省4万。而且随着数据量增长,分层方案的优势会越来越大。

六、一张图看懂选型逻辑

下面这张流程图,是我做选型时的决策框架:

时序索引存储介质选型决策流程 数据写入路径? 是 → 必须用SSD (NVMe优先) 查询频率 > 1次/天? 是 → SATA SSD / QLC SSD (温数据层) 否 → HDD (CMR, 16TB+) 冷数据层 最终方案:热SSD(10-15%) + 温SSD(20-25%) + 冷HDD(60-70%) 写入路径全走SSD,冷查询做连续存储优化 写入路径必须SSD

七、总结一下我的选型原则

  • 写入为王:所有写入路径(WAL、索引更新、compaction)必须用SSD,这是底线。
  • 冷热分离:按时间窗口做分层,热数据用NVMe,温数据用SATA SSD,冷数据用HDD。
  • 寿命预算:SSD按3倍写放大预留寿命,HDD选CMR不选SMR。
  • 查询优化:冷数据层按时间连续存储,减少跨盘随机读。

嗯,硬件选型这块,说白了就是把钢用在刀刃上。时序场景下,写入性能是命门,必须用SSD保底。但冷数据没必要浪费钱,HDD完全够用。这个平衡做好了,成本能降一半,性能还不打折。

我记得有一次跟一个同行交流,他说他们全用HDD,结果写入延迟高到离谱,每天都要丢数据。我问他为什么不加SSD,他说怕成本太高。后来我帮他算了一笔账:加两块NVMe做写入缓存,成本只增加5%,但写入性能提升了50倍。他当场就改了方案。

所以,别怕花钱,但要花对地方。