美文网首页
列式存储更新 - PDT(位置增量树)

列式存储更新 - PDT(位置增量树)

作者: GOGOYAO | 来源:发表于2019-08-19 18:36 被阅读0次

参考资料

PDT 论文1:Positional Update Handling in Column Stores
PDT 论文2:Positional Delta Trees to reconcile updates with
read-optimized data storage

1. 简介

该论文主要是介绍列存系统,如何在线更新数据。论文提出了一个新的数据结构(PDT: Positional Delta Tree) 。PDT 的主要目标是在不影响读优化系统的速度(读)优势,支持事务一致性更新。PDT 是存储在内存中的结构。

2. 图例说明

2.1. 名词解释

  • SID:Stable ID, 可以理解为只读存储(read store)的位置ID,但不具备唯一性和升序,只保证不降序。
  • RID:current Row ID,不唯一,只保证不降序。仅 RID 和 SID 结合起来才是唯一的。
  • PDT:位置差量树
  • VALS:值空间
  • TABLE:等长相关列的集合
  • tuple:代表一行数据

2.2. 图例


图1是初始状态,TABLE0持久化存储在磁盘,当前RID 和 SID都是完全相同的。表的主键是 store 和 prod 两列。
图2表示batch0插入的数据。
图3表示插入操作发生后,PDT 的变化。节点定义如下:
PDT_internal_node {
  sid[F-1],
  delta[F],
  child[F],
  parent
}
PDT_leaf {
  sid[F],
  type[F],
  value[F],
  parent,
  next
}

PDT 是一个类似 B+树的结构,F 是树的度,叶子节点才存放数据(其中,value 字段的 i0,i1,i2,是值空间的地址,见图4)。非叶子节点(这里只有根节点)包含:一个 SID 作为分割键,一个 delta 用于计算 RID <=> SID 的映射(因为插入后,RID 和 SID 不是完全相同,所以需要有个映射关系)。用于分割的 SID 是右子树最小的 SID。插入操作产生的新 SID 都是0(插入数据根据排序规则排在最前面),在PDT 中从左往右的顺序决定了在最后结果中的顺序,见图5 Table1delta 的值等于其对应子节点的插入数减去删除数,如果是子节点是非叶子结点,delta 值则等于子节点 delta 值之和。

图4表示值空间的情况。PDT 的叶子节点存了 SID(更新的位置)、更新的类型、指向新 tuple 数据的指针。不同的更新类型(update、insert、delete),有不同的值空间。在之前的插入操作中,仅 insert 的空间有数据。

图6、7、8是在图5 Table1 的基础上,执行删除和更新操作。Table1不是stable 的(没有落盘)。
此处对于 delete 操作就有两种情况。对于删除 Table0 中的数据(stable),值空间的 delete 表中有对应的记录,数据其实并没有删除(仅仅置灰,见图9),如(Paris,rug)的删除;对于Table1(非 stable,数据实际还在值空间 insert 表)的删除,则是直接把值空间中的 insert 表的记录删除掉,如(Berlin,table)的删除。
对于更新操作,每一列在值空间中都有对应的表。如 qty 和 new 分别记录对应列的数据。对于在 PDT 中的数据,则直接修改值空间的值,如(Berlin,cloth,Y,5)。

更准确的说法,对于 PDT 中的记录,删除或者更新都直接操作。

图9-12,又插入了三条数据,最终形成Table3。此时,磁盘上存储的还是Table0。在这个阶段,PDT 的高度增长到了3。图11中增加了△符号(=插入数-删除数),用于说明 RID 和 SID 的映射方式:

RID = SID + △

3. 与现有value-based方案的对比

相关文章

  • 列式存储更新 - PDT(位置增量树)

    参考资料 PDT 论文1:Positional Update Handling in Column StoresP...

  • 列式存储

    01 什么是列式数据库 列式存储(Column-oriented Storage)并不是一项新技术,最早可以追溯到...

  • 列式存储

    1 为什么要按列存储 列式存储(Columnar or column-based)是相对于传统关系型数据库的行式存...

  • 列式存储

    本文转自:几张图看懂列式存储 最近看到一篇很好资料,里面三言两语配上几个图就把列式存储(Column-based ...

  • Parquet列式存储格式详解,下推和压缩性能测试

    摘要:列式存储,Parquet Parquet概述 Apache Parquet是面向分析型业务的列式存储格式,由...

  • parquet学习总结

    深入分析Parquet列式存储格式 Parquet是面向分析型业务的列式存储格式,由Twitter和Clouder...

  • ReactNative 增量热更新思路

    增量热更新 ReactNative 增量更新 ReactNative 增量更新的内容包含 JS 和图片,在每次应用...

  • 行式存储和列式存储优缺点和paruqet文件结构

    一、列式存储和行式存储的比较 列式存储和行式存储是针对数据在存储介质中的排序形式而言的,假设存在一张table,那...

  • Hive文件存储格式

    列式存储和行式存储 上图左边为逻辑表,右边第一个为行式存储,第二个为列式存储。 ** 行存储的特点: **查询满足...

  • 001 列式存储的概念

    为什么需要列式存储 相对于传统型数据库行式存储而言,区别如下 行式存储,存储一个表,通过行的序列构成 列式存储,存...

网友评论

      本文标题:列式存储更新 - PDT(位置增量树)

      本文链接:https://www.haomeiwen.com/subject/gyqbjctx.html