内容字号:默认大号超大号

段落设置:段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

天翼云_网站建设介绍_怎么申请

2021-07-22 01:55 出处:欧普曼云计算 人气: 评论(0

正如我们所知,当我们移动到HANA数据库时,大数据的应用,我们的想法是"代码下推"。

传统上,性能的瓶颈是在数据库和应用程序服务器之间移动记录。

移动的记录越多,所需时间越长。一旦数据到达应用服务器,您就可以使用ABAP对其进行各种计算。

新的想法是在数据库级别进行所有计算,然后只将少量记录(结果)传输到应用服务器。HANA数据库为此进行了优化,它执行各种操作,例如并行数据库读取。从理论上讲,最终的结果是,如果你将数据密集型计算"下推"到数据库中,那么你的应用程序将运行快10亿倍。

此时,你可能会说"哦,是的,每个人都说这个代码下推的东西太棒了,从来没有人举过一个实际的例子"。

好吧,我举一个例子。这不是一个很好的例子,但它是现实的-这比我所看到的其他许多例子都要好。如果你有一个更好的例子-我相信你有那么告诉我它是什么。然而,我要描述的是我20年来每月都要处理的事情。

您可能知道VBKD"销售订单的业务数据"表,它包含诸如客户采购订单号和付款条件之类的内容,它的工作原理是这样的-如果销售订单中的每个行项目都相同,那么只有一个物料编号(POSNR)为000000的销售订单条目。如果输入销售订单的人员更改了行项目级别上的值,则会向表中添加一个新条目,并更改项目的POSNR。这种设计显然是为了节省数据库空间——十行项目有十个相同的条目加上另一个相同的标题条目有什么意义?

一切都很好,但这意味着程序通常会将VBKD的全部内容读入一个内部表中。然后传统地读取带有项目编号的内部表,如果这不起作用,则在标题级别执行另一次读取。这以前需要在ABAP中使用两个READ TABLE语句,但在最近的版本中,您可以在一个语句中执行此操作,如下所示

这很好–但是您可能会认为,如果我们现在可以在内部表上执行类似的聪明操作,那么我们肯定可以在读取数据库时首先执行类似的聪明操作?也就是说,数据无价,我们只想从数据库中向应用服务器传输一条记录——项记录(如果存在)或头记录——也就是说,我们希望将上面显示的逻辑"下推"到数据库层。

事实证明,我在ABAP SQL语句中找不到这样做的方法(这并不意味着没有这样做的方法,你可以告诉我如果你想怎么做)或者在CDS视图中。

但是在ADMP中,理论上你可以创建一个类,该类接受销售订单号和项目(或者更可能是一个这样的表),并返回正确的VBKD记录(或者更可能是一个这样的表)。

该类将用SQLSCRIPT语法编写,这可能会让你头晕目眩,例如,FOR的想法/ENDFOR而不是循环/ENDLOOP发送一些ABAP人员向门跑去。不应该是这样的,所有的编程语言都有不同的语法,手游返利折扣,没什么好怕的。

不管概念是什么都很清楚-在数据库中,ADMP尝试获取订单/项目组合的记录,如果不存在,则获取订单/标题组合的记录。

好的,让我们尝试创建一个ADMP做这个。

我去我可爱的ABAP在云系统,其中有一个HANA数据库连接。那里没有VBKD表,所以我必须为这个练习创建我自己的Z等价物。

我们通常在VBKD中寻找什么-付款条件,例如"发票月份后30天"。现在当你从男爵那里买怪物的时候,变量不是你要付多久的钱,而是如果你不付的话会发生什么。

所以,我设置了一个域,列出了各种支付选项。

最后一个选项是到目前为止最差的。使用这些付款条件的人倾向于提前付款。

接下来我创建一个数据元素,该域将在其中生存。现在我将创建VBKD的等价物。为了使事情尽可能简单,这只是将有树字段-怪物销售订单号和项目和付款条件。我还必须创建VBELN和POSNR数据元素等价物,因为云中ABAP中没有VBAK和VBAP这样的东西。我将调用我的新表ZMONSTER\u BDATA.

云中ABAP中的DDIC定义都是基于源代码的,这需要一些时间来适应,但毕竟它与定义内部表没有太大区别。

接下来我需要一个小程序用伪数据填充该表。以前我会用SE38编写一个类型1的可执行程序。然而,那是十分钟前的事了。在"蒸汽朋克"中,我需要创建一个类。如果这个类实现了interface If\u OO\u ADT\u CLASSRUN,那么我可以直接调用MAIN方法,就像在SE38屏幕上按F8一样。

生成器

我不想要任何花哨的东西–在正常的ABAP世界中,如果我想获得订单号1的第10项和订单号2的第10项的相关记录,那么我必须将三条记录从数据库传输到应用程序服务器,然后过滤掉标题级别的记录订单号2.

相反,我只想带回两个记录-每个订单的正确记录。只有两个命令没有区别,但是想象一下如果你有一万个或更多,这通常是我在现实生活中得到的。

为了填满表格,我在Eclipse屏幕左侧的explorer视图中选择了我的类,并使用菜单选项"Run As=>ABAP Application(Console)"。万岁!它告诉我这三条记录已保存到我的(HANA)数据库中!

下一步是编写一个新类,该类将查询数据库中我的两个monster销售订单,并从数据库中为每个订单带回一条且只有一条记录。

我需要用marker接口标记reading类,在云上,物联网行业,如果是\u AMDP \u marker \u HDB,那么实现可以作为HANA数据库中的存储过程执行。理论上(根据文档),我应该可以有一个返回参数,但是第一个错误是当我试图把整个结构作为返回参数返回时出现的,第二个错误是当我试图把任何东西作为返回参数返回时出现的,所以我又回到了导出参数上看起来是这样的:–

定义

和草案实现是这样的:–

实现V1

这是简单的一点,一切都在传统的ABAP(或多或少)到现在为止。

下一步是我跳出我的舒适区,开始用SQLSCRIPT编码。那太可怕了。所以,我做谷歌搜索,这是没有任何帮助。即使是SAP帮助也没有用。所以,现在是猜测时间。那很好,这是最好的学习方法。这就像敏捷宣言。https://agilemanifesto.org/

"试验自己"而不是"被告知如何做某事"

虽然我们相信右边的语句有价值,但我们相信左边的语句更有价值。

回到SQLSCRIPT Eclipse中的混乱会给我一些错误消息,指导我如何用这种新语言写作–首先最后用";"而不是句号结束行。在看了一段时间的SCN之后,我尝试了一下语法,并随机尝试了各种各样的东西,我得出了以下结论:–

实现V2

似乎工作得很好。您可以在ABAP中这样做—两个SQL语句一个接一个,或者读取整个表,然后在内部表上执行两次读取,以尝试获取正确的记录。

这里所有的"智能"如果您可以这样称呼它的话,都在数据库级别。显而易见的问题是——有什么区别?想必这会让事情变得更快?是吗?如果没有,请告诉我。

这是我写的第一个SQLSCRIPT。我肯定我错得很厉害。我在1999年写的第一个ABAP也不是很好,我在1981年写的第一个BASIC也不是很好

分享给小伙伴们:
本文标签: 天翼网站建设介绍怎么申请

相关文章

评论

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

签名: 验证码: 点击我更换图片

评论列表