列存zedstore

邮件列表

1、动机与目标

1)列子集查询性能提升(减小IO)

2)相对于heap表,减小磁盘占用空间。Tuple头更小,利用压缩数据

3)表数据可以列式存储形式独立于表数据

4)完全符合MVCC

5)支持所有索引

6)混合行列存储,一些列可以一起存储,另外可独立存储

7)分列的粒度非常灵活,可以把一起访问的列存储到一起

8)不需要分开的toast表

9)快速add/drop列或者更改列的数据类型,避免全部重写表

2、设计

简单说,忽略列存储概念,将之认为压缩的行存储。列存储是这个概念的扩展,在下节解释。最基本的磁盘数据结构是B-tree,以TID为索引列。注意,这不是现有的Btree索引,而是独立于表数据存储的另外新Btree。

TID-逻辑行标识符

TID是一个48位的行标识符。传统的分割方法:分为block和偏移显得无意义。为了通过TID查询一个tuple,必须深度遍历B-tree。页分裂或者合并操作可以通过逻辑TID将tuple移动到不同页。

B-tree内部页非常简单,每个页仅仅存储TID数组以及downlinkpairs。叶子页具有short未压缩的头,接着为btree的条目。存在两种条目:普通条目,包含一个元组或者一个数据,未压缩的payload;一个“container item”,有多个普通条目,压缩的payload.

+-----------------------------

| Fixed-size page header:

|

|   LSN

|   TID low and hi key(for Lehman & Yao B-tree operations)

|   left and right pagepointers

|

| Items:

你可能感兴趣的:(PostgreSQL源码分析)