SAP HANA 增量合并操作 (Delta Merge Operation)

我们都知道, SAP HANA 的数据更新方式是采用增量合并操作(Delta Merge Operation)的方式,原始数据在 Main 区域,新增加的数据在一个 Delta 区域,通过不断合并 Main 和 Delta 形成新的 Main,比普通的修改方式在性能上有着很大的优势。
今天看了一下整个增量合并操作中数据的读写和合并过程,感觉还是蛮有意思的。对很多应用场景下的数据增删修改合并操作有着很好的借鉴意义。

我们先来看一幅图:

sap-hana-delta-merge


这幅图很好的总结了整个增量合并的过程,我们一步一步来看:

Before Merge

1)Main 中存放原始数据,Delta 中存放增量数据;
2)所有写操作在 Delta 中进行;
3)读操作可读取 Main 和 Delta 中的数据。

During Merge

1)合并操作从 Main 中数据和 Delta 中已提交的数据进行合并,放入 Main New 中;
2)Delta 中未提交的数据复制到 Delta New 中;
3)所有写操作在 Delta New 中进行;
4)读操作可读取 Main,Delta 和 Delta New 中数据;
5)Delta New 中若有新提交的数据也通过合并操作合并到 Main New 中。

After Merge

1)删除 Main 和 Delta,留下 Main New 和 Delta New;
2)所有写操作在 Delta New 中进行;
3)读操作可读取 Main New 和 Delta New 中的数据;
4)此时的 Main New 和 Delta New 即为下次 Merge 的 Main 和 Delta。

整个 Delta Merge Operation 有以下几个特点:
1.异步发生
2.合并操作进行时,列式数据表仍可用于读取和写入操作(因为有双重缓冲,操作过程中表被锁定的时间很短)
3.增量合并后,增量存储不会清空
4.主要存储会在合并期间被重新排序
5.只有主存储区会被持久化到磁盘

Delta Merge Operation 的代价也是较高的,主要是因为:
1.需要大量的内存空间(当 Main 和 Main New 同时存在时至少需要2倍的内存消耗)
2.主存储区的数据要被重新写入内存,消费CPU资源,并且少量更改也会导致主存储区持久化到磁盘,I/O负担较重
当然也有特殊的情况,例如只进行 memory-only merges,这样做只影响内存中的数据,不进行最后的持久化,或者分区,每次只对受到影响的分区进行合并操作。

参考:
《AGSTF002 – SAP HANA Technology Fundamentals》
《增量合并操作Delta Merge Operation之过程》

如无注明,均为原创。转载请注明: 转载自MITGAI`S THINKING
本文链接地址: SAP HANA 增量合并操作 (Delta Merge Operation)

知识共享许可协议本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

如果本文对您生活或工作产生了积极影响,那我非常高兴。
如果您愿意为文章的内容或想法提供支持,欢迎点击下边的捐赠按钮,资助作者创作更多高价值高品质的内容。
支付宝捐赠
anyShare分享到:

发表评论