2008年那会儿,数据仓库市场还是Teradata、Oracle Exadata这些老牌玩家的天下,谁也没想到一个叫Netezza的“愣头青”会杀出来,把分析型数据库的规矩彻底改写。这家公司没有选择在通用数据库的赛道上硬碰硬,而是专攻“分析”这件事本身。它的内核里藏着一个极具颠覆性的设计——用FPGA(现场可编程门阵列)来做数据过滤和计算,这在当时听起来像是天方夜谭,但正是这个决定,让Netezza在性能上甩开了同期的对手。今天聊Netezza,不是翻旧账,而是想拆开它的内核看看,那些被时间验证过的设计思路,对当下的数据分析架构依然有启发。

Netezza的核心架构,被它自己称为“Snippet Blades”和“SPU”(Snippet Processing Unit)。你可以把整个集群想象成一个流水线工厂:主机(Host)负责接收SQL请求,把查询拆解成一个个小任务,然后分发到后端的SPU上。每个SPU就是一台独立的服务器,上面挂着一块FPGA芯片和若干块硬盘。这里最聪明的设计在于,FPGA不是用来做通用计算的,它被专门编程成数据过滤和列解压的引擎。当数据从硬盘读出来的时候,FPGA会直接进行筛选,把不满足条件的数据行直接丢弃,只把有效数据传给CPU做进一步聚合运算。这个“数据提前压缩”的思路,让Netezza在IO瓶颈面前绕了一个漂亮的弯。
具体来说,传统数据库处理一个查询,往往要把整张表的数据从磁盘搬到内存,再在CPU里逐行判断条件。而Netezza在数据落盘的时候,就把每一列的数据按照压缩算法打包,并且把每列的最小值、最大值这些统计信息记录在元数据里。查询进来的时候,FPGA先扫描元数据,如果发现某个数据块的统计信息根本不符合查询条件,整个数据块直接跳过,连磁盘都不读。这种“暴力扫描”式的淘汰策略,看起来简单粗暴,但在千万级数据块的场景下,效率高得惊人。我记得有测试数据说,Netezza在TPC-H的基准测试里,某些查询的响应时间能比传统架构快上一个数量级,靠的就是这种笨办法里的巧劲。
再往内核深处走,Netezza的存储设计也很有意思。它用的是行列混合存储,但和后来出现的行列混合方案不太一样。Netezza把每张表的数据按行切成一个个“extent”,每个extent里再按列存储。这种设计让它在做全表扫描的时候,能同时享受行存储的顺序读优势,又能在列上进行高效的压缩和过滤。更关键的是,Netezza的压缩算法是专门针对分析场景调优的,比如它对重复值多的列用RLE(游程编码),对数值列用delta编码,对字符串列用字典编码。而且这些压缩和解压操作,同样是在FPGA上完成的,CPU几乎不参与。这意味着数据从磁盘到CPU的路径上,压缩、过滤、投影这些最耗资源的操作,全部被硬件分流了。
不过,任何架构都有它的短板。Netezza的FPGA方案虽然性能猛,但灵活性不够。因为FPGA的逻辑一旦固定下来,就很难像通用CPU那样随意适配新的算法。比如后来分析场景里开始流行复杂的事件处理、全文检索、机器学习推理,Netezza的FPGA就显得力不从心,只能把这类任务回退到CPU上跑,性能优势就大打折扣。这也是为什么后来IBM收购Netezza之后,推出的新版本开始逐渐弱化FPGA的角色,转向更通用的x86架构。但反过来看,Netezza的启发恰恰在于它证明了:在特定场景下,用专用硬件做数据管道里的脏活累活,比堆CPU核数要高效得多。
有意思的是,Netezza的分布式设计也很有前瞻性。它的SPU之间不共享数据,每个SPU只管自己那部分数据,查询的时候主机把任务分发下去,各个SPU并行处理,汇总结果。这种“无共享”(Shared Nothing)架构在今天看来是分布式数据库的标配,但在当年,很多产品还在用共享存储的方式,为了扩展性头疼不已。Netezza的做法是让数据分布完全对应用户的分区键,查询的时候能精确找到对应的SPU,减少了不必要的数据网络传输。而且它的数据分布策略还支持按哈希、按范围、按随机等多种方式,用户可以根据查询模式灵活选择。
再聊聊Netezza的查询优化器。这个部分可能是最容易被忽略但最见功力的地方。Netezza的优化器会把SQL查询转换成一种叫“计划树”的结构,然后对每棵子树做成本评估。评估的时候,它考虑的不只是CPU代价,还有IO代价和网络传输代价。更特别的是,它会把FPGA的处理能力也纳入成本模型里——如果某个过滤操作能被下推到FPGA执行,优化器会优先选择这种执行计划,哪怕它在CPU上看起来更“简单”。这种“硬件感知”的优化思路,比后来很多号称智能优化的数据库都要激进。
但Netezza的命运也折射出现实的一面。2012年IBM花17亿美元收购Netezza,本想让它在自己的大数据版图里扮演重要角色。可IBM后来的整合并不顺利,Netezza的独立产品线逐渐被边缘化,技术团队也流失了不少。到了2015年后,Netezza几乎不再有新版本发布,成了IBM PureData System for Analytics的一个内置引擎。很多曾经用Netezza的企业,后来都迁移到了Exadata、Snowflake或者云原生数据仓库上。但奇怪的是,那些迁移过去的人,经常会在技术论坛里怀念Netezza的响应速度,说它的“秒回”感觉很难再找到。
说到底,Netezza的高性能内核,核心秘密就是“把简单的事情用硬件做到极致”。它没有去搞复杂的索引结构,没有做花哨的物化视图,而是老老实实地把数据压缩、过滤、扫描这些最基础的操作,用FPGA加速到物理极限。这种思路反而显得更有意思——大家都在追逐新的计算范式,却忘了数据管道里那些最基本的动作,才是性能的真正瓶颈。Netezza用它的兴衰史告诉我们,与其在算法层面各种花活,不如先看看数据在硬件层面是怎么流动的。那些被时间沉淀下来的设计哲学,哪怕产品已经退场,也依然值得后来者反复咀嚼。


