Skip to Content

重要链接:http://scn.sap.com/docs/DOC-35518
ABAP on SCN: http://scn.sap.com/community/abap
ADT on SCN: http://scn.sap.com/community/abap/eclipse

当2011年HANA刚发布时,大家争先恐后讨论的,SAP努力澄清的,是BW会不会消失。后来当roadmap渐渐清晰时,觉得当时描绘的ERP on HANA简直遥不可及,而BW on HANA也只是谨慎地期待。可是到今天,suite on HANA(SoH)已经大概发布了有半年时间了,而且也已经GA了好几个月了。SAP描绘的one box可能真的会实现。既然business suite跑在HANA上了,以前用ABAP开发的首先要更新知识了。在前一篇blog中,我们安装了开发工具。这一篇,let’s get our hands dirty,开始做点东西出来吧。

如果仅仅是让OPEN-SQL支持HANA,我想SAP早就可以发布SoH了。但是要想体现HANA的价值,一定要有一些不一样的,新的东西出来,比如:

  • 通过ABAP DDIC访问HANA视图
  • 集成ABAP与HANA SQLScript
  • 针对HANA的特殊语句,特别优化

在探讨里程碑NetWeaver 7.4之前,我们先回顾一下在这之前ABAP与HANA是如何结合的。我们知道SAP通过DBI作为数据库访问的接口,为每一个数据库开发对应DBSL,抽象出OPEN-SQL作为数据库访问语句,然后通过DBSL转换成底层数据库特定的SQL方言。在NW 7.4之前,我们就有两种方式访问HANA,而且是以前SAP就提供的技术:

  • EXEC SQL
  • ADBC类

它们都是用底层数据库的SQL直接与DB通讯的方法。Thomas的blog里面有介绍这两种方法的代码写出来是什么样子。

虽然我们都无数次地听到过SAP介绍基于HANA的应用开发范例:将耗费资源的逻辑下沉到数据库,减少应用服务器与DB之间的数据传递,但是可能很少有人去实际体验。在这个第二篇入门博客里,我做一个实验,我们一起来体验一下suite on HANA以后到底带来什么样的UX。

我们假设数据库有一张表,其中有一个时间字段,可以代表订单的交货时间(这里的假设是都是未交付订单,时间都在未来),那么我要计算所有订单交货时间据今天一共有多少天。我搜索的数据集为100万条记录。

在传统的ABAP开发里,由于通用性的要求,OPEN-SQL并不提供什么办法能让我们将这种计算推向DB层面。所以逻辑大概是:

SELECT

计算时间差.

汇总.

ENDSELECT

或者

SELECT.

LOOP 内表

计算时间差

汇总时间

ENDLOOP.

这里我要用到ABAP in Eclipse的一个功能来展示运算时间,叫做ABAP profiling

119

选择我们要运行的程序以后,便开始搜集相关的trace。运行结束后,我们可以双击trace打开如下一个结果:

29

好吧,我的示例代码写的不足够好,因为我选择了SELECT ENDSLECT的方式,导致DB时间占据了主要。如果我采取先放到内表的方式,可能演示效果更好一些。

不过,这个结果并没有什么意外的,DB时间占去了几乎所有运行时间。不到11s的运行时间,可以忍受,但是考虑到如此简单地一个功能,可能就无法忍受了。

那么我们将逻辑推向HANA,利用HANA计算出时间差汇总数据(你可以用SQL语句也可以使用存储过程,up to you)。我们可以利用HANA的DAYS_BETWEEN和SUM直接算出汇总数据。Profiling的结果如下:

37

时间骤降到了1.68秒。如果再经过调优,时间会更短。

所以ABAP on HANA的开发是混合模式的,当我们考虑到开发效率和通用性的时候,使用OPEN-SQL,但是这只会利用到一小部分HANA的功能,比如你在OPEN-SQL里做聚合的时候;但是当遇到某些特殊场景要做性能优先考虑的时候,我们会混合ABAP和HANA的开发,短时间内相应结果,给用户一个最佳的体验。

后续的blog,要说说NW 7.4的比较酷的东西了,怎么更方便的从ABAP调用HANA对象。

To report this post you need to login first.

1 Comment

You must be Logged on to comment or reply to a post.

Leave a Reply