一份数据搞定OLAP+OLTP(下)

举报
Popeyes 发表于 2020/06/12 16:19:41 2020/06/12
【摘要】 在上片文章中,简单地介绍了L-store的数据结构和基本操作,在本篇文章中将会介绍L-store的merge 步骤及方法 3.1 无冲突的合并在L-Store中,坚持一个原则,那就是“永远都在稳定的数据上进行操作”。 首先对Merge的步骤进行讲解 1.在tail page中识别已经提交的修改2.从base pages中导入tail page中对应的需要更新的页面3.融合base page和...

在上片文章中,简单地介绍了L-store的数据结构和基本操作,在本篇文章中将会介绍L-store

的merge 步骤及方法

 

3.1 无冲突的合并

在L-Store中,坚持一个原则,那就是“永远都在稳定的数据上进行操作”。

 

首先对Merge的步骤进行讲解

 

1.在tail page中识别已经提交的修改

2.从base pages中导入tail page中对应的需要更新的页面

3.融合base page和tail page

4.对页面目录进行更新

5.对过时的数据进行重新放置

 

 

在这里使用一个简单的例子进行讲解

p1.png

 

可以看到在这个表中包含了base page,tail page以及merged page。

 

简单地说merge的过程就是去tail page中读取连续的修改记录,将他们合并后合入base page。在合入之后表级的tail page将会被永久性地销毁。

 

在通过简单的例子分析之后作者给出了几条保证merge 方法不会导致数据冲突的引理与定理

 

引理1. Merge操作被严格地限制于稳定的数据上

 

引理2.Merge操作在不违反任何查询snapshot的情况下会安全地对过期的base page进行删除

 

 

 

根据引理1 与 引理2, 可以得到

定理1 :Merge 过程以及用户的交易过程都不会在base page和 tail page中产生竞争,从而merge过程不会有冲突影响。

 

3.2 维持数据之间的血缘关系

在L-store 数据库中,数据的血缘关系是非常重要的,因为这关系到merge 与 update 过程的独立性。以及可以使得各列之间的merge过程相互独立。

 

在L-store 中,用了一个既简单又优雅的方式来对数据间的血缘得以记录和保留,那就是tail-page sequence number(TPS). 这个可以理解为在tail page 中一个自然增长的序号。 在原始的base page中,这个tps被设置为0,这表示数据从来没有被更改过。

 

引理3:在并发merge的情况下,

 

定理2:即使在并发状态下的merge也是可以被构建snapshot的

 

p2.png

 

 

在表-5中展示的是一个根据数据血缘关系进行更新的例子。

 

可以看到base page中的b2 指向的是(TPS)t12。 我们从Last Updated Time 中可以发现在t7的时候这个累积式的更新被打断了,所以t12 里面所携带的数据不再是t1-t7的数据的累积式更新。

 

举例一个在并发情况下的例子:如果正在查找b2所对应的数据,有可能从t2开始读取,也有可能从合入后的t7开始读取,但是这都不会影响最后所获得的数据的正确性

 

3.3 对历史数据进行压缩

p3.png

历史数据的压缩分成两步

1.根据RID对相同行数据的操作进行分组

2.对分组好的数据进行合并并且以存储在同一行

 

对于已经被合入到base page之后的tail page数据,系统会对这些历史数据进行压缩并作为较低优先级的冷数据进行保存。


 

 

 


【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。