Column-Stores vs. Row-Stores: How Different Are They Really?
论文阐述的就是行存与列存 两者之间到底有什么区别
Abstract
论文首先给出结论:列式存储(Column Stores)比行式存储(Row Stores)在性能上好过一个数量级。而这关键的原因就是:针对只读数据,列存的I/O效率远高于行存。因为他们只需要读取查询中涉及的一些列。
通常我们会想当然的认为对行存数据进行垂直分表、为每一列建索引,就可以在查询时,提高I/O效率,只查询部分列对应的数据,从而达到列存的速度。但是论文通过实验证明这个假设是错的。
论文首先用实验证明了行存相比与列存性能确实差了很多。然后论文分析了列存和行存之间的不同。包含两个方面:查询执行层面及存储层面。总结出列存主要存在以下几个优势:
- 延迟物化(Late materialization)
- 块遍历(Block iteration)
- 列压缩(Column-specific compression techniques)
同时如果行存想要达到列存这种性能优势,不仅要在查询执行层面进行优化,存储层面也需要进行优化。
Introduction
近些年(2008年)出现了很多列存系统,比如MonetDB,C-Store。这些作者说列存相比行存在读频繁的场景下性能可以提升一个数量级。但是这些列式系统的性能测试方式显然过于“传统”,仍然以行式存储下数据结构的设计思路来设计性能测试的方案。于是作者来了一个灵魂发问。