mrdrivingduck / paper-outline

🔍 To record the papers I have read.
24 stars 0 forks source link

Query Execution in Column-Oriented Database Systems #18

Open mrdrivingduck opened 2 years ago

mrdrivingduck commented 2 years ago

主讲列式存储中的查询执行。Daniel J. Abadi 同学的博士论文,好长一篇。每一个 chapter 都是一篇独立的论文了。还是读这篇更详细点的吧。

mrdrivingduck commented 2 years ago

Abstract

在一维的存储世界中模拟二维关系表的两种方式:

本文经过分析得出,一个特别为列式存储设计的查询执行器对于获取性能来说至关重要。本文提出了 C-Store,分为存储层 + 执行层。提升性能的三个要点:

  1. 执行层能够直接操作压缩后的列数据,提升 I/O 和 CPU 的效率;解决执行器扩展性的问题
  2. 尽可能推迟各列被 join 成行的时机
  3. invisible join
mrdrivingduck commented 2 years ago

Introduction

分析型应用的特点:

几种构建列式存储的方法:

优化列式存储性能的更深层方法:

mrdrivingduck commented 2 years ago

Column-Store Architecture Approaches and Challenges

三个等级的实现方式:

使用行存来模拟列存的几种方案(性能都不好):

列存 + 行存执行器:

列存 + 列存执行器:

三种实现方式,实现难度逐渐增大,但优化空间和性能也在逐步提升。

mrdrivingduck commented 2 years ago

C-Store Architecture

每个表被表示为 投影 的集合,每个投影是一个表的子集,包含了表的所有行以及 某几列。每个投影中的各个列单独存放,但行顺序相同。表中的每个列至少会出现在一个投影中,一个列可以被存储在多个投影中(以不同的顺序)。

C-Store 中包含:

由 Tuple Mover 周期性地把 WS 中的内容转移到 RS 中。

存储层上,投影中的每个列被存放在一个单独的文件中,被分为 64KB 大小的 block,每一个 block 可以使用最适合这个 block 的压缩算法。

C-Store 的算子与其它关系型数据库相比:

向量化执行:一次性获取多个属性值,从而有效利用 loop pipelining,提升 CPU 使用效率。

mrdrivingduck commented 2 years ago

Integrating Compression and Execution

压缩能够通过减少磁盘寻找时间、减少数据移动时间、提升 buffer pool 命中率来提升 I/O 性能。带来的问题是如何选用压缩算法。如果选择不当,那么原先的 I/O 瓶颈可能会变成 CPU 瓶颈。