Column-Stores vs. Row-Stores: How Different Are They Really?

这篇文章分析了,CS和RS本质区别在什么地方。虽然RS可以通过某些方式,比如拆分列,对列进行索引,以及做视图物化,来“逼近”CS。但是实际测量依然会发现有很大的性能gap,这些gap的来源是什么呢?

作者总结下来有这么几个具体差别:

  1. Later Materialization 延迟物化,先对某些列进行筛选,然后按照这个筛选器去读取剩余的列。这个和具体存储格式相关,比如ORC/Parquet就没有办法这么搞。这块可以做到3倍的加速。
  2. Block Iteration. 针对chunk进行迭代处理,肯定比基于tuple unit要快。
  3. 针对Column的特定压缩技术,以及可以在这些压缩数据上直接操作。这个其他文章有说到。
  4. Invisble Joins. 不可见Join. 这个算法其实也没有太复杂,本质就是在join的时候使用bitmap等技术来尽可能地延迟物化。