
前几天收到供应商发来的新一轮报价单企业级SSD的价格比三个月前又涨了快两成内存条的行情也在一路往上走连机柜租赁都跟着微调。我盯着那张采购单算了半天发现如果还按老思路继续扩充物理机集群今年预算里光是硬件这一块就得吃掉一大半。也就是从那时起我开始认真研究GBase 8a云数仓这条路把海量数据分析从“买硬件”变成“买算力”。这篇先聊成本侧把GBase 8a云数仓为什么能在硬件涨价周期里帮企业省钱的关键点拆开讲。适合正在为数据平台成本头疼的运维、架构和团队负责人也适合准备把本地数仓迁到云上的朋友当作决策参考。1. 硬件涨价这波行情先掏空的是谁的预算1.1 从采购单说起内存、硬盘、服务器的涨价传导链先说一个很多人可能没太留意的现象数据库和数据分析平台的成本正在被硬件悄悄抬高。不是单纯内存贵了而是整个链条都在涨。企业级SSD因为AI服务器大量吃产能价格一路走高DDR5内存颗粒同样被大模型训练和推理需求挤压高性能网卡、交换机也跟着水涨船高。服务器整机的采购周期从原来的两周拉长到一个月以上报价还经常变动。对普通OLTP业务来说硬件涨价的影响或许还能扛一阵但对海量数据分析场景来说存储和算力需求本身就是线性增长的。数据每天都在进查询复杂度越来越高硬件成本稍微波动一下反映到年度预算上就是几十万、上百万的差距。更麻烦的是很多企业的数据平台是多年前按“峰值容量”一次性采购的当时规划了未来三到五年的空间。现在数据增长比预期快硬件又涨价再想扩容要么接受高价要么忍受排队等待。有些团队为了控制预算开始限缩数据保留周期甚至砍掉一些历史数据。但业务部门不答应——分析需求往往就藏在历史数据里。我见过一个做零售分析的团队为了省存储费用把两年前的历史订单从库里删了结果业务要做同比分析发现数据齐了逻辑对不上最后只能从备份里慢慢捞。这就是“数据吞金兽”困局数据量越大成本越高想省钱就得砍数据砍了数据业务又没法做。1.2 传统数仓的“三座成本大山”三副本、峰值预留与闲置算力用传统MPP数仓或者Hadoop体系跑海量分析成本通常集中在三块我习惯叫它“三座成本大山”。第一块是存储冗余成本。HDFS三副本意味着1TB有效数据要占3TB物理空间虽然可以用EC纠删码把冗余降到1.4倍左右但很多老集群不敢轻易改怕影响性能和数据可靠性。MPP数仓如果做高可用同样需要副本或镜像。存储就这么翻着倍地花钱在硬件涨价的周期里这种冗余带来的成本压力会被放大得很明显。第二块是峰值预留成本。日常查询可能只需要20个节点月底报表一出并发翻几倍为了保证这个峰值你从年初就得把节点备齐。一年当中大部分时间节点处于低负载但电费、机柜、维保一样没少花。我可以负责任地说大部分本地数仓集群的平均CPU使用率常年不到30%但采购成本是按100%负载来付的。第三块是扩容的“跳台阶”成本。数据量涨到一定程度加几块盘不够用得再买一批服务器倒数据、调集群、验证性能一次扩容往往要折腾一两个月期间业务还得照常跑。这三座大山叠在一起硬件涨价又相当于给每座山都加了一层雪。所以我说海量数据场景才是这波涨价潮里受伤最重的。1.3 治本思路把“固定资产游戏”变成“按需付费”要跳出这个困局思路其实不复杂别再把它当成“买固定资产的游戏”而是改成“按需购买算力和存储”。本地数仓里你买了机器不管用不用成本已经在那里。云数仓的逻辑则完全相反——计算资源按需申请存储按实际使用量计费业务高峰期扩一些节点低谷期缩回去费用跟着真实用量走。GBase 8a云数仓就是沿着这个思路把分析型数据库的能力搬到了云环境里。你不需要一次性买断几十台服务器只需要按自己的分析负载和数据规模去申请资源。这笔账才是成本变革的关键。当然也有人会质疑云数仓按量计费长期跑下来是不是反而比买机器贵这个问题确实存在但前提是你把云数仓当成一台“永远开着的虚拟机”来用那就没发挥出它的价值。弹性、压缩、分层这些手段不到位云数仓也会变成新的吞金兽。所以接下来我把成本构成的细节一层层拆开。2. GBase 8a 云数仓的成本结构拆解钱到底花在哪2.1 存算分离存储和计算不再互相绑架很多人第一次接触云数仓会觉得它不就是“把数据库装到云主机上”吗其实远不止于此。传统MPP数仓里数据存储在本地磁盘计算也在同一批节点上存储和计算是绑死的。想提升查询性能只能加节点但加节点往往也带来更多存储空间哪怕你的存储根本用不完。反过来数据量暴增但查询没怎么变你也只能跟着扩容存储连计算资源一起买。GBase 8a云数仓采用的存算分离架构把这两件事解耦了。持久化的数据放在共享存储层计算节点只保留缓存和临时数据。数据量涨了单独扩展存储容量就行查询并发高了单独增加计算节点就行。比如某个月底报表突然多了几个部门的并发查询扩两个计算节点跑完缩回去不用动存储。这个设计最大的价值在于存储成本和计算成本各自独立互不绑架。用一句话类比以前去食堂必须连菜带座位一起买现在可以只买菜座位按需租。座位贵了就少租一会儿菜多了就多买一点账清晰多了。对海量数据场景来说这直接解决了“存储增长逼着计算一起花钱”的痛点。2.2 弹性扩缩容把7×24小时的成本压缩成按需算力除了存算分离GBase 8a云数仓另一个直接降本的能力是弹性扩缩容。分析型负载天然有波峰波谷工作日白天业务部门跑报表月末财务对账大促后运营分析峰值并发可能比平时翻好几倍。本地数仓为了应付这些峰值只能常年把机器开着。云数仓可以在峰值到来前扩容结束后缩容费用按实际使用时长计算。有人会担心缩容会不会把数据搞丢不会。因为数据在共享存储层计算节点随时可以拉起缩容只是释放计算资源。这个机制下你可以把一天的负载曲线当成一张高高低低的图按图索骥买算力而不是直接买一条水平的虚线。当然弹性扩缩容也有讲究。不是所有云数仓都支持秒级扩缩容有些变更需要几分钟甚至更久所以扩缩容的调度要提前设置好最好做成自动化。你可以根据历史负载规律在业务高峰前半小时触发扩容在高峰结束后半小时触发缩容。实测下来这种“计划性弹性”比被动应对省钱得多。注意弹性能力不是免费的。频繁扩缩容如果管理不好会产生大量短时计费实例账反而不好控。最好的做法是设置固定的扩缩容策略并且每周回顾一次实际用量及时调整规则。2.3 一笔典型账单的试算同样的分析负载成本差在哪儿为了更直观说明差异我算一笔典型账。假设某企业有20TB原始业务数据日常分析并发20左右月底报表并发能冲到80。本地方案采购一批高配服务器每台64核CPU、256GB内存、10TB存储考虑到HDFS三副本或MPP节点高可用至少需要6到8台。这里不包括交换机、机柜、电费和专业DBA的运维成本单硬件采购就要几十万起步。数据三年一折旧每年折旧费至少十几万。云数仓方案呢数据压缩后存储占用可能只需要5TB左右按对象存储或云盘标准价格计费每月存储费几千元到一万元计算节点按实际负载扩缩容日常保留4个节点月底扩到12个节点每月计算费用也在一万上下。算下来一年总成本往往只有本地方案的40%到60%。成本项本地物理机方案GBase 8a 云数仓方案存储成本三副本物理占用大按整机采购列存压缩后按实际占用计费计算成本按峰值峰值一次性采购常年闲置按负载扩缩容峰谷分开计费扩容成本重新采购、上架、迁移周期长在线扩容分钟级生效运维成本硬件巡检、故障更换、系统升级云侧托管团队专注业务折旧与电费3到5年折旧7×24小时电费用多少付多少无闲置浪费提醒一句具体数字会因为云厂商、存储类型、压缩比不同而差很多这里只是提供一个计算思路。真正要落地必须拿到自己环境上的压缩比和负载曲线再加权计算。想省钱的团队别直接抄别人的测算结论把自己的数据填进去算一遍。3. 高压缩列存最容易被忽略的存储降本利器3.1 列式存储为什么天然适合压缩接下来聊一个我特别想强调的点压缩。很多团队在用云数仓时只盯着计算节点费用忽略了存储压缩率。但存储费用是按实际占用空间算的压缩率提高一倍存储账单就降一半而GBase 8a作为列式分析型数据库在压缩方面有天然优势。列式存储把同一列的数据放在一起存储而同一列的数据类型相同值域分布相近重复值也多压缩算法可以发挥的空间就很大。比如一张订单表的status字段取值可能就几个枚举值字典编码之后几乎不占空间order_date字段排序后相邻值的差值很小做增量编码再压缩效果非常好。而行式存储要压缩一整行里五花八门的字段很难有这种效果。GBase 8a在列存基础上还提供了多种压缩算法和压缩级别让用户可以按表甚至按分区选择。默认情况下压缩率做到5:1甚至10:1并不罕见重复值高的字段还能更高。这意味着20TB的原始数据在数仓里可能只占2TB到4TB的物理存储云存储的账单自然降下来。更关键的是压缩之后的表在查询时IO扫描量同步变小很多场景下查询反而更快。3.2 压缩级别怎么选不是越高越好不过压缩不是越高越好它本质是CPU和存储空间的置换。压缩级别越高写入时要花更多CPU去做编码查询时也要消耗更多资源去解码。对于批量导入高压缩可能会让加载时间变长对于频繁点查的热数据高压缩对查询延迟也可能有影响。我一般建议分层选压缩级别对于历史明细表、审计日志这类查询频率不高、写入以批量为主的大表用高压缩级别把存储成本压到最低对于每日频繁访问的热表用中等压缩级别在存储和性能之间找平衡对于需要实时写入、频繁更新的表用低压缩级别甚至不压缩保证导入和查询的响应速度。GBase 8a建表时可以在DDL里指定压缩属性类似这样实际关键字和语法以当前版本官方手册为准CREATE TABLE t_order ( order_id BIGINT, user_id BIGINT, order_date DATE, order_amount DECIMAL(18,2), order_status TINYINT ) COMPRESS(HighZip);不同版本支持的压缩关键字可能不一样有叫HighZip的也有用数字级别表示的。拿到环境后先建几张同样的表分别指定不同压缩参数导入同一批数据对比物理占用和查询时间这个实验值得做结果会让你意外。我见过一个团队只是把压缩级别从中间档调到最高档存储账单直接降了30%查询时间只多了不到10%对月度跑批任务来说完全能接受。3.3 排序键、分区和字段设计对压缩比的隐藏影响除了压缩级别压缩率还受数据分布影响。最典型的是排序。数据入库前如果按某个列做了排序那一列相邻的值会非常接近压缩效果会好很多。很多团队把表建成后直接导入不考虑排序键结果压缩率只有3:1排完序再导入同样的数据可能变成8:1。选择排序键也有讲究。优先选重复度高的低基数字段比如日期、渠道、地区、状态。这些字段重复值越多排序后连续重复段越长压缩效果越明显。时间分区表天然就有这个优势每个分区的数据按日期聚集date列压缩率通常很高。另外字段类型和编码也可能影响压缩。能改成整型就不要用字符串能用日期类型就不要用文本。字符串类型的字段最好做字典化处理比如用户等级、支付渠道这类枚举值抽成编码字段后压缩率会好很多。这些都是建表阶段就可以做的优化不需要额外花钱却能直接降低存储成本。我在给客户做方案时通常会让他们先把要迁移的核心表列出来逐列检查类型和基数这步做完存储成本的预估已经比较准了。4. 冷热分层把存储预算花在最容易产生价值的地方4.1 什么数据算“冷”别看时间要看访问频率冷热分层是我在控制存储成本时必用的一招。原理很简单不是所有数据都需要同样快的访问速度。订单表里最近三个月的订单每天被业务查询几百次三年前的订单一年可能只被翻出来做一两次年度分析。把它们放在同一档存储上等于每天为那几次查询支付高额热存储费用。判断冷热不能只看数据年龄。有些表即使很老了仍然是核心业务分析和监管数据的来源查得也频繁有些新落地的日志数据进来之后几乎没人查。我的建议是先用查询日志跑一个统计按表、按分区统计最近30天、90天的访问次数和扫描量再结合业务时间范围要求划定冷热边界。数据说话比拍脑袋靠谱。一个比较实用的判断标准是连续60天没有查询访问的表基本可以划为冷数据连续30天没有访问但每月固定有一次批量任务的表可以划为温数据而每天、每周都有访问的表留在热存储。这个标准不绝对要根据业务场景调整但至少给你一个可量化的起点。4.2 在GBase 8a 云数仓里做分层的实用路径分层之后怎么落地在GBase 8a云数仓里比较常见的做法是时间分区加存储策略的组合。热分区放在高性能存储或计算节点本地缓存上冷分区放到低频存储或归档存储。查询时通过分区裁剪只扫描需要访问的分区冷热数据对上层应用是透明的。具体操作上可以建两张结构一致的表热表存近期数据冷表存历史数据中间用视图合并对外提供统一查询接口或者利用数仓的分区机制把冷分区物理迁移到下层存储。每个季度、每个月做一次数据迁移任务把超过N个月的分区从热存储搬到冷存储顺带跑一遍行数校验和数据汇总校验确保迁移过程中没有丢数据。存储本身也可以按需选择。云环境里对象存储往往有标准层和低频访问层低频层价格更低但读取要额外付费。对于一年都查不了几次的历史数据放低频层非常划算。要是连低频读取都很少还能考虑归档层价格更低取回时间更长。分层策略做得好的话通常可以把总存储成本再压掉20%到40%而且对业务影响很小。4.3 生命周期策略设计中的几个坑冷热分层听起来简单实际落地还是有不少坑。第一个坑是分区键选错。有的表按创建时间分区但业务查询主要按订单时间过滤结果归档时把“创建时间超过一年”的数据搬走了用户查某个订单时因为订单时间跨了分区性能明显下降。分区键必须和查询条件对齐。第二个坑是归档粒度太粗。一次性迁移一个季度的数据如果数据量很大迁移任务可能跑几个小时期间对业务查询有影响。最好把迁移粒度缩小到周甚至天分批跑或者安排在业务低谷期执行。第三个坑是忽略冷数据查询变慢的评估。历史数据搬到低频存储后读取延迟会变高。如果某些历史查询要求秒级返回就不能简单归档得留一部分热缓存或者接受分钟级响应的分析模式。第四个坑是清理不彻底。生命周期策略要覆盖到临时表、中间表否则这些表留在热存储上悄悄吃钱。我见过不少团队只归档了核心业务表结果临时表和测试表占了一半存储账单照样降不下来。冷热分层不只针对大表清点全库表清单把没人用的中间表一并处理效果才明显。5. 动手改造前先算清三笔账5.1 第一笔账现有成本基线真到了要上云数仓的时候别急着迁移数据先算清自己现在的成本基线。把集群里所有节点的硬件配置、采购价格、维保费用、机房电费、网络带宽成本列一遍再统计数据总量、日增数据量、最大表、分区策略最后翻一下查询日志统计平均并发、峰值并发、典型查询耗时时长。这些数据会告诉你到底哪部分成本最该砍是存储、计算还是人力运维。推荐把结果做成一张表像这样指标数值有效数据量20TB物理存储占用60TB三副本计算节点8台平均CPU使用率18%峰值CPU使用率75%月度TCOXX万元有了这个基线后面任何方案的对比都有据可依。否则你很容易被别人给出的“特价数字”带偏选了不适合自己负载的配置。5.2 第二笔账不同压缩方案下的存储费用第二笔账是压缩方案。在云上申请一小块存储建一张与业务大表结构相同的测试表导入一份有代表性的数据分别测试不同压缩级别记录物理占用和导入耗时。然后按云存储单价算出不同压缩率下的月度存储费用。这步做完你基本能判断现有数据按GBase 8a的列存压缩大概能压到什么程度存储费用能压到多低。如果压缩率是5:1光存储一项就降了八成三副本变单副本且压缩这个账非常可观。对了算压缩账的时候顺手把备份也算进去。云数仓的备份一般走对象存储成本不高但也要有规划。数据无价该备份的一分不能省。我见过有人为了省存储费用把备份周期拉长到一个月结果一次误删数据恢复时发现只能找回三周前的那种教训太痛了。5.3 第三笔账迁移后的TCO与回退成本第三笔账不能只看迁移后的月度账单还得看迁移过程中和迁移失败后的成本。迁移意味着ETL任务、BI报表、数据接口都要适配这部分人力成本经常被低估。如果团队对GBase 8a不熟要先精读官方文档或者找有经验的同学带一带别让团队一边踩坑一边上生产。我建议定一个“小步快跑”的切换策略先选一个业务域或一张大表做试点跑通全流程验证数据正确性和查询性能再逐步扩大范围。迁移期间新旧两套并行应用层做灰度切换这样一旦发现问题可以及时回退。回退方案的成本也要纳入预算——预留的窗口时间、双跑期的资源成本都是这笔账的一部分。我自己的习惯是每次做这类评估都先把“压缩比、分层比例、峰值并发”三个数写出来再决定架构。这三个数只要清楚预算基本就控住了。查询性能调优、实际迁移中的更多踩坑下篇接着写。