让你的“战斗机”燃起来

让你的“战斗机”燃起来

六月 30, 2025

在上一篇 Thinking in Big Data 中,我留下了两个事项:

  • 我需要了解作者是否有在研究、或者已经有他所推崇的设计思路
  • 我需要了解现在有哪些(大数据相关的)技术是按照直接利用高配置服务器的思路去设计的,及真实的案例

问题很美好,时间很骨感,这里就简单写些关于如何更好的利用高配单机,至于其他的设计思路相关的问题,就等将来的机缘吧。

高效使用(点燃) 高性能机器(战斗机) 的可能途径……

并行化处理

尽可能的利用多核处理,不论是通过编程语言并发库的能力,还是通过多进程协作的方式,让 CPU 转起来。

利用内存进行计算

尽可能利用内存而不是磁盘、文件系统来进行IO,毕竟这相差了好些数量级。

设计缓存

如果内存足够,尽量多放一些常用数据到缓存层。常用的概念,不仅限于从C端最终客户端的角度,也适用于服务端的工作流加速场景。简单点说,别总是习惯性的把中间结果持久化去做隔离,如果这些中间过程的数据不那么重要,那基于内存做计算加速是非常有效的。

优化数据分片(分区)

尽量平衡并行处理时每个处理单元所负责的工作量,避免数据倾斜导致明显的处理延迟。

避免 Data Movement 或者 Shuffle

就近计算是一个重要理念。比如:

  • Spark 中的 broadcast join
  • 各数据库支持的谓词下推(predicate pushdown 或者 filter pushdown)

使用更高效的存储格式

如果一定要持久化到存储介质,那么存储格式也很重要,比如 Apache Parquet 或者 ORC ,这些其实也是跨编程语言的。这些都是按列存储的形式,目的是为了更好的利用 CPU 的向量计算能力,也就是一个计算指令直接就可以处理多个数据。

GPU 加速

这个了解的不多,就不谈了。

监控实际的资源利用率

这最后一点,很重要,尤其是调整前后。否则,我们无从得知到底机器有没有被榨干。如果还没有,那从哪些方面去考虑进一步的压榨?

总结

思路就是这样了,难点在于实践。毕竟每个工程的背景、实际的瓶颈、要权衡的利弊都各不相同,按需压榨才是正解。