Oracle Database In-Memory(架构与实践)
上QQ阅读APP看书,第一时间看更新

1.3.5 SAP HANA

SAP HANA是一个基于列式的内存数据库和应用平台,将事务处理、分析处理以及业务逻辑处理功能组合至内存中,突破了传统交易型数据库架构中,开发支持实时分析应用的限制。高性能分析装置(High Performance ANalytic Appliance,HANA)基于C++语言编写,其中一些业务和预测分析功能使用了SAP内部的L语言开发,L语言也是C++语言的变种。HANA采用软硬件一体的形式,硬件由IBM、Dell、华为等认证的合作伙伴提供。

HANA于2009年开始开发,于2011年正式发布。HANA由SAP完全重新构建,虽然诞生的时间并不长,但产品的构想则早已有之,并且HANA通过并购以及与研究机构的合作实现了快速发展。最初的产品中已经融入了隶属于波茨坦大学的Hasso Plattner学院的研究成果、TREX搜索引擎、2005年收购的关系型行式内存数据库P*TIME,以及与MySQL AB合作的关系型数据库MaxDB等技术。Hasso Plattner是SAP的创始人,HANA最初的命名实际上表示Hasso’s New Architecture,也说明了HANA是基于多种长期积累技术基础上的新构想。此外,通过对Business Objects和Sybase的收购,HANA也融合了这些产品的知识产权,如Sybase IQ列式数据库、Business Objects数据联邦等。之后,产品经过了不断的发展和演进。2015年,SAP发布了集成了HANA的新一代ERP产品S/4HANA,2016年,SAP发布HANA 2.0,以及集成了HANA的新一代数据仓库BW/4HANA。2020年,SAP发布HANA Cloud。

SAP HANA集成了一个完整的数据库管理系统,使用标准的SQL接口,支持事务的原子性、一致性、隔离性和持久化。SAP HANA支持大多数入门级SQL92语句,使用Open SQL的SAP应用程序可以不经改变直接在SAP HANA平台上运行。SQL是SAP HANA的标准接口,并以SQL扩展的方式实现了自由搜索功能,此外通过使用多维表达式(MDX)直接支持了商务智能客户端的使用。和其他数据库系统相比,HANA的一个显著优势在于与SAP应用的紧密集成,包括SAP商务套件中的ERP、CRM、PLM、SCM以及SAP BW数据仓库平台。

SAP HANA架构如图1-7所示,核心服务包括Index服务器、预处理服务器和名称服务器。Index服务器包含实际的数据和数据处理引擎;预处理服务器用于分析文本数据,并提取文本搜索功能所需要的信息;名称服务器存放整个HANA系统的拓扑信息,如租户数据库的位置。

图1-7 SAP HANA架构

和Oracle Database In-Memory一样,HANA综合了行列两种格式,并且都是通过联合这两种格式实现了多版本并发控制(MVCC)。不同的是,由于Oracle在行格式上已有长期积累,因此以行格式为主,以列格式为辅,变化量记录在列格式一端。而HANA以列格式为主,变化记录在行格式中。这是由于其最初的设计是从列格式起步,用于加速分析系统。在图1-7所示的数据处理引擎部分,数据以列压缩格式存放于Main Store中,写操作不会直接修改Main Store中的数据,而是以追加方式插入到行格式的Delta Store中,后台在适当时候会将Delta Store中的变化合并到Main Store中,形成最新版本的数据。Oracle的MVCC实现需要操作两次,包括修改实际数据,并将修改前的数据写入回滚段中。HANA的实现采用Insert Only方式,只需一次操作,而且Delta Store中的数据是未压缩的,比较适合高速的插入、删除和更新,但同时需要占用更多的内存空间。HANA的持久化层采用了定期保存点(Savepoint)和事务日志机制。在事务提交时记录日志,然后后台定期地将内存中的数据以快照的方式存放于Savepoint文件中。Savepoint类似于TimesTen的检查点文件,通过Savepoint结合日志文件,即可保证数据库的数据一致性和正常恢复。

HANA是无共享架构,每个节点都有自己的数据和日志,支持内存的纵向和横向扩展。横向扩展时需要考虑数据和应用的分布,其中包括:数据类型,例如主数据、交易数据、参照数据、数据的参照一致性等;数据依赖性、数据访问路径;工作负载,例如读写比例、交易还是查询、更新频率等。数据分布的手段相应可以将相互依赖的表放在一起,将相互关联的表的分区放在同一节点,对于主数据、参照数据,可以复制到每一个节点,以实现数据属地化访问,避免节点间通信。

HANA的高可用性通过集群和复制实现。支持的集群文件系统包括IBM的GPFS、EMC的MPFS、Oracle的OCFS2、XFS和NFS。通过集群文件系统,备用节点可以访问其他所有活动节点上的底层存储,因此故障时可以按一对多的方式接管失效节点,继续运行业务。HANA的灾备通过复制实现,可以基于存储的底层数据复制、基于集群文件系统的复制,或基于传输日志的SAP系统复制。复制传输可以基于同步或异步方式,备端可处于备用状态,或设为只读以分担主端的工作负载。

数据集成方面,HANA可以与SAP ERP、SAP BW或非SAP的第三方数据源进行集成。SLT(SAP Landscape Transformation replication server)和SRS(SAP Replication Server)均能提供实时数据集成,前者基于触发器,后者基于数据库日志。SAP Data Service和SDI(Smart Data Integration)是基于ETL的数据复制工具,主要用于准实时的批量数据集成。SAP Data Hub并不拥有自己的存储,其主要用于多数据源集中管理、编排调度与治理。SDS(Smart Data Streaming)非常适合于处理实时产生的事件数据,并迅速分析结果并给出响应,如社交媒体、物联网传感器和智能设备的数据。无须将数据复制到HANA,SDA(Smart Data Access)允许访问远程数据,就好像数据存储在本地一样。这使得应用程序可以实时访问和集成来自多个系统的数据。