SAP HANA 数据库
一、行列式存储
SAP HANA DB 支持两种存储方式:行存储 以及 列存储。SAP HANA DB 针对列存储进行了优化,这也是默认的存储类型。
在计算机内存中,是按线性序列存储的。如下图所示,行存储是以一行记录为单位进行存储,列存储则是以列为单位。
在 SAP HANA DB中,针对列存储进行了一下的优化:高性能读取操作,同时仍提供良好的写入性能操作。应用高效的数据压缩以节省内存并加快搜索速度和计算。此外,SAP HANA数据库的一些功能,如 分区,仅适用于列表。列存储通常是适用于大批量更新的表。但是,更新和插入性能是在行表上更好。基于行存储通常适用于具有 频繁的单次更新。
行存储 与 列存储 各自的优点 以及应用场景
存储类型 | 优点 | 应用场景 |
---|---|---|
列存储 | 1. 高性能读取操作,同时仍提供良好的写入性能操作 2.应用高效的数据压缩以节省内存并加快搜索速度和计算 3.消除额外索引 4. 消除了物化聚合(有点类似与view) | 1.通常只计算单列或少量列。2.根据几列的值查询该表。 3.表包含大量列 4.该表有大量的行和列操作的需求(聚合、扫描等)5.大多数列只包含少数不同的值(与行数相比),可以实现高压缩率。 |
行存储 | 1. 更新和插入性能在行表上更好 | 1.应用程序一次只需要处理一条记录(多次查询/更新单个记录)。 2.应用程序通常需要查询完整记录(select *)。3.压缩率低:列相对于行来说含有更多不同的值。4既不需要聚合,也不需要快速查询。5.该表包含少量行(例如,配置 表)。 |
二、Temporal Tables
Temporal Tables:提供管理历史数据功能的表。
三、列存储的内存管理
两种存储类型:
存储类型 | 概括 |
---|---|
Main Storage | 在这个区域,主要存储的是主数据,并且进行了有效的数据压缩。可读,但不能进行写入操作 |
Delta Storage | 在这个区域,主要存储的是每次写入的数据。可读,并且能进行写入操作,对写优化 |
Delta合并操作(The Delta Merge Operation)
写仅在Delta Storage 进行。Delta Merge优化数据并传输到Main Storage(也就是Delta合并到Main)。每个表的主存储必须在内存中重写,然后持久化到磁盘
Delta合并过程:
1.在合并操作之前,所有写操作都进入Delta1存储,所有读操作都从Main1存储和Delta1存储读取。
2.在合并操作运行时,会发生以下情况:
a.所有的写操作都会进入第二个Delta存储,即Delta2。
b.读取操作从原始Main Storage main 1中读取数据,也从Delta Storage delta 1和delta 2中读取数据。
c.Main1和Delta 1的内容合并到新的主存Main 2中。
3.合并操作完成后,会发生以下事情:
a.删除Main1和Delta1存储。
b.整个主存储器的内容将持久化到磁盘。
四、数据压缩(针对列表)
在SAP HANA DB中,列表有两种压缩方式
压缩方式 | 概述 |
---|---|
字典压缩(Dictionary compression) | 默认的压缩方法适用于所有列。它涉及到将不同的列值映射为连续的数字,这样存储的通常是更小的连续数字,而不是实际存储的值。(Delta Storage 只用了字典压缩 对写优化) |
高级压缩(Advanced compression) | 每一列可以使用不同的压缩方法进一步压缩,即前缀编码、游程编码(run length encoding, RLE)、簇编码、稀疏编码和间接编码。SAP HANA数据库使用压缩算法来确定哪种压缩类型最适合列。(仅应用在Main Storage ) |