问题现象
在给一个内存吃紧的前端可视化应用做性能优化时,有人推荐用 Apache Arrow。于是开始调研,随即被一个问题卡住:Parquet 和 Arrow 到底有什么区别?
它们都是列式的数据结构。一开始的理解是\”Parquet 用于磁盘,Arrow 用于内存\”,听上去分工很清晰。但很快就发现 Arrow 也可以存成文件写到磁盘上(比如 .arrow 文件)。那么:
- 既然两者都能落盘,区别到底在哪?
- 它们是不是在做同一件事?
- 一个内存密集型的前端可视化场景,应该用哪个?
原因分析
要分清这两者,关键不是看\”能不能放磁盘上\”,而是看各自的设计目标。
Parquet 是序列化格式,为空间和 IO 优化
Parquet 是一种列式文件格式,用于数据序列化。它的设计取向非常明确:以 CPU 解码开销为代价,换取存储空间和 IO 的效率。
由此带来几个关键特性:
- 读取 Parquet 文件必须解压、解码,把内容还原成某种内存数据结构之后才能计算。Parquet 本身不提供任何用于内存计算的数据结构。
- Parquet 是流式格式,通常需要从头到尾解码。虽然存储格式后来增加了\”索引页


