本文包含以下内容:
1.什么是HANA?
2.SAP S/4 HANA与 SAP Suite on HANA之间的差异
3.OLAP和OLTP的概念
4.企业级数据库的发展过程
5.SAP HANA的独特功能
6.Code Push Down及其方式
7.HANA Cloud是什么以及它从何而来
8.云化后HANA Cloud新增的能力以及常见场景
1.什么是HANA?
SAP HANA(High Performance Analytical Appliance高性能分析设备)是一款使用内存数据库技术的应用程序,可在短时间内处理大量实时数据。内存计算引擎允许HANA直接处理存储在内存中的数据,跳过了从磁盘读取数据的步骤。
HANA是第一个可以基于OLTP数据执行实时OLAP分析的数据库系统。
2.SAP S/4 HANA与 SAP Suite on HANA之间的差异
SAP Suite on HANA:
SAP Suite on HANA是SAP为不同行业提供的完整产品(ECC是SAP Business Suite的模块之一)。其数据库可以是HANA或任何其他数据库,如DB2、DB6、MSSQL等。ECC是SAP Suite on HANA的一部分。
SAP Business Suite 4 SAP HANA(SAP S/4 HANA):
这是基于HANA开发和充分利用HANA能力优化过的SAP系统。”简化”了数据模型,并遵循“一体原则”。简单理解就是,某些业务流程的一批核心表(MM、FI等)已被单个表(MATDOC、ACDOCA等)所取代。因此SAP Business Suite 4 SAP HANA被称为S/4 HANA。
3.OLAP和OLTP的概念:
3.1 OLAP:
Online Analytical Processing(OLAP),这类操作主要针对数据分析,而不是数据处理。
例如:库存分析中获取库存数据各类指标的过程。
3.2 OLTP:
Online Transaction Processing(OLTP)这类操作主要针对数据处理,而不是数据分析。
例如:保存或修改某些数据,例如创建销售订单或更改销售订单。
4.企业级数据库的发展过程
传统的数据库系统,例如Oracle、DB2、DB6、Sybase、MSSQl,主要的优化都是针对OLTP,而没OLAP方面的优化往往不足,导致分析性能一般。
而分析性能一般的原因除了优化少,还包括其基于硬盘的存储方式,App需要从硬盘中读取和提取数据,将其加载到内存后再与CPU通信,以完成计算,获取结果。
而操作90%的耗时用于从数据库读取和获取数据,硬盘IO成为了主要瓶颈。
此外,OLAP和OLTP操作往往不是实时的。
因为在App从数据库中提取数据并传递到内存时,数据库可能同时正在执行其他操作,因此,数据不是完全实时的。
这可以借助下图进行解释:
基于这些需求,SAP推出了BW,作为一款数据仓库,它基本完全是一个OLAP系统。在OLAP操作上性能更高,但这也是接近实时的查询,不是完全实时的。
下图解释了上述概念:
该系统依旧存在数据冗余、硬件成本高、性能低等缺陷。
而基于传统数据库以及独立数据仓库的常见问题,SAP推出了HANA数据库。在这里,所有数据都保存在内存中。
因此,现在的OLAP操作得到了很大的优化,因为在内存中处理数据比在磁盘中快得多。
此外,这是第一个OLAP和OLTP事务都是实时的数据库系统。
5.SAP HANA的独特功能:
- 内存计算
- 同时支持列式和行式存储
- 仅插入方法
- Code push down
- 数据压缩
- 数据的大规模并行处理
5.1内存计算:
内存计算意味着所有计算都在内存里进行,这使得计算速度更快。
5.2同时支持列式和行式存储:
5.2.1基于行的存储Row based storage:
传统数据库系统,如Oracle、DB2、DB6、Sybase等,都以行存储的方式存储表中的数据。
这意味着每次执行OLAP操作时,都需要从左到右遍历所有数据。
下图右侧即数据实际存储的方式:

row-based storage的优点:
- 每一行的所有字段都存储在一起。
- 易于插入/更新,即基于行的存储有利于OLTP事务,因为它将直接遍历内存的末尾并插入新记录。
row-based storage缺点:
- 即使查询过程中只涉及少数列也必须遍历所有数据。这意味着row-based storage的表不利于OLAP事务。例如:如果我们想知道印度国家的总销售额,那么查询将是SELECT sales FROM“table name”WHERE country=“India”,即使查询结果只涉及前两行数据,它仍需要遍历所有行数据。
5.2.2基于列的存储Column based storage:
在Column based storage中,我们将按照列为单位进行查询。
下图为列式存储中数据实际存储的方式

Column based storage优点:
- 在查询过程中,只需要读取目标列(遍历),因为每一列都可以用作索引。
- 系统记录了每列的起始地址和结束地址。因此,对于先前的查询例子,系统只需要遍历Country列即可,每一列都可以作为查询索引。
Column based storage缺点:
- OLTP事务会比较麻烦
- 查找到目标数据后,需要按照其行号重新获取整行数据
5.2.3在SAP HANA中何时选择基于列/行的存储:
- SAP HANA中表的默认存储类型是列存储,基于特殊原因才推荐放入行存储中。
5.2.4什么时候可能选择Row based storage:
- 单次更新/插入/删除的范围很大时,例如:table NRIV(Number range intervals)。
5.2.5什么时候必须选择Column based storage:
- 表用于分析上下文时(例如:包含业务数据)。
- 行数较多时(经验法则:超过100000),因为列存储中的压缩效果更好。
5.3 HANA中的Insert only策略:
HANA中的“
Insert only”策略意味着,当某行被更新时,实际不会更新其具体的数据,而是将其设置为无效。并插入(追加)一个具有新数据的新行。
优点:
- 保持OLAP的高效。
- 不需要重新排序
- 降低系统负载
5.4 Code push down:
传统方式中,主要的数据密集型计算都在应用中进行,数据库层主要用于存储并向应用提供数据。
但在HANA数据库中,SAP建议直接在数据库层执行数据密集型计算。这是因为整个数据库现在都驻留在内存中,多数时候处理数据比应用要快。
5.5数据压缩:
目的是降低内存复杂性。每个不同的字段(列)中不同列值都会被映射到连续的数字,因此数据库实际存储的不是实际值,而是占用空间小得多的连续数字。这种方法或过程被称为dictionary compression字典压缩。这样就能减少数据占据的空间。
5.6海量数据处理:
目的是降低时间复杂度。数据库工作(例如搜索查询)将被分配给CPU的多个核心,从而加速工作
6. Code push down及其架构:
code-to-data paradigm在SAP HANA中分为三个级别,每个级别的代码复杂性和性能都在不断提高:
- 透明优化:表buffer增强带来更快的数据访问。
- ABAP中的高级SQL:针对Open SQL的增强,以及CDS视图
- SAP HANA原生特性:AMDP、原生SQL。
5.1自下而上的开发方法:
在自下而上的方法中,我们将在HANA数据库内开发HANA View和database procedures,然后使用远程代理在ABAP层(应用程序服务器)中调用这些功能。

这种方法显然会更快,但也会有缺点:
ABAP开发必须一边在HANA 数据库创建DB artifact,一边在ABAP层远程调用artifact,而远程调用就意味着数据复制,意味着需要同时维护HANA和ABAP链接。
5.2自上而下的开发方法:
在自上而下的方法中,我们在可以在应用层直接开发基于HANA的ABAP artifact,如CDS View和AMDP,它们将在HANA服务器上自动创建HANA View。

自上而下方法的主要优点是,ABAP artifact中,只有基于HANA的部分才需要和HANA集成。不需要HANA delivery unit。
7.HANA Cloud是什么以及它从何而来
HANA Cloud是SAP于2020年发布的一款数据库即服务DBaaS。
其实SAP之前还发布过HANA Service(NEO)和HANA Service(Cloud Foundry)两个版本的云HANA数据库,但是由于这些版本的底层都是基于VM虚拟机的,而不是基于容器的,在技术能力上会有一些限制。随着HANA技术的发展,实现了底层的容器化架构之后,才有了我们现在的SAP HANA Cloud.

8.相较HANA,HANA Cloud新增的能力以及常见场景
新增的能力:
- 首先,HANA Cloud底层是基于Kubernetes搭建的,也就意味着其底层是容器化的,具有可伸缩,高可用等特性;
- 其次,SAP认为云时代的大数据量不能仅仅依靠HANA来支撑,所以在HANA Cloud中加入了Data Lake作为另一个存储选项,以更低的成本支撑更多的数据,并与高性能的HANA存储原生集成,一起提供功能。
新增的场景:
- 在HANA支持的场景之外,HANA Cloud额外可以支撑云/本地混合架构下的数据管理,同时提供Data Lake的存储选项来支持PB级的数据量。
关于本文内容有任何问题或见解,欢迎在评论区留下你的想法,如果时间紧迫,也可以直接联系到我 arthuryang1996@foxmail.com,感谢你的时间