内存中增量和列扫描
将内存中的增量和列数据一起扫描,因为增量存储可能包括尚未合并到列存储的更新记录。由于它已经扫描了最近可见的 delta tuples in 内存,因此 OLAP 的数据新鲜度很高。
基于日志的增量和列扫描
将基于日志的增量数据和列数据一起扫描以获取传入查询。与第一种类似,第二种使用列存储扫描最新的增量用于 OLAP。但是,由于读取可能尚未合并的 delta 文件,这样的过程更加昂贵。因此,数据新鲜度较低,因为发送和合并 delta 文件的高延迟。
列扫描
只扫描列数据以获得高效率,因为没有读取任何增量数据的开销。但是,当数据在行存储中经常更新时,这种技术会导致新鲜度低。
4 对比
Comparisons of AP techniques in HTAP Databases
对于第一种单机列扫描 + 内存增量遍历来说,优点是数据新鲜度较高,缺点是需要比较多的内存空间。对第二种分布式列扫描 + 日志文件扫描来说,优点是扩展性高,缺点是效率比较低。
三、数据同步技术(DS)
由于在查询时读取增量数据的成本很高,因此需要定期将增量数据合并到主列存储中。这个时候,数据同步(Data Synchronization)技术,就非常重要了,也是分为两大类型。
1 类型一:内存增量合并
关键技术:
- 基于阈值的合并(Threshold-based merging)
- 两阶段数据迁移(Two-phase data migration)
- 基于字典的迁移(Dictionary-based migration)
相关数据库:Oracle、SQL Server、SAP HANA
Threshold-based merging
举个例子,如果阈值达到列存储 90% 的容量时,我们就把 Delta Table 中的数据合并到 Column Store 当中,当然这种方式有个缺点 —— 如果阈值设置的太大可能会导致 AP 的性能发生抖动,所以看到图里我们加了一个 Trick-based,最好是定小量按期地去合并,做一个权衡。
Two-phase data migration
两阶段数据的迁移,可以拿 SQL Server 举例,如图所示:
- 第一阶段:迁移准备
- 第(1)步先插入 RID 去把需要隐藏的数据写入到删除表当中;
- 第(2)步把这些数据分配 RID 后生成 Delta Colunm Store;
- 第二阶段:迁移操作
- 第(3)步,把刚刚插入进去的 RID 删除;
- 第(4)步,最后真正把 Delta 中相关的数据删除,最后才把生成的增量列存合并到主列存中,达到了数据迁移的效果。
Dictionary-based migration
第三种基于字典的迁移,SAP HANA 就是采用这种方式。如图所示,它第一阶段主要是针对每一列的数据做一个本地字典的方式映射过去增加对应的数据向量,第二阶段,才会把这个字典加入到全局的字典,做一个全局的排序,最后合并到数据向量当中。