Stefan Hagen在博文SAP Cloud Application Studio Performance Best Practices里介绍了在C4C里使用Cloud Application Studio进行ABSL编程的一些性能方面的最佳实践。
文章里提纲挈领地给出了一些guideline。这里提供一些具体的例子。
如何批量调用BO action
不好的例子:
第一行和第四行有两个循环,然后在第二次循环里调用一个比较耗时的ServiceRequest BO的item 节点上定义的标准action FinishFulfilmentProcessing。代码的时间复杂度为o(n2)
正确的做法:
优化的原理就是,C4C和其他很多基于Netweaver的SAP产品一样,其BO的核心service都支持批量操作。所谓批量操作,技术上就是指这些service的输入参数是一个内表,而非单条数据。如果您做过CRM开发,可以类比CRM_ORDER_MAINTAIN这个function module,其所有输入参数都是内表结构。C4C的BO提供的service的接口定义也完全采用了这种支持批量操作的设计。
上述不好的例子,编译出来的ABAP代码的伪代码如下:(因为C4C的后台代码没有开放给Partner和客户,我只能提供伪代码)。可以看出尽管BO的action是执行批量操作,但是这种写法并没有发挥批量操作的作用,每次在循环内部作为输入参数的内标在第二行被清空,造成每次调用BO action时输入参数只有一条记录。
而正确的例子,编译后生成的伪代码为:
能清楚地看到BO action的执行已经放到循环外部了。
如何批量执行BO Retrieve
当我们在Cloud Studio里通过代码自动完成功能试图调用BO的Retrieve方法时,IDE会提示我们Retrieve方法有三个重载(Overload), 这表明Retrieve能够支持传入不同的参数。
正确和不建议的做法分别见下图蓝色和红色代码。可以看到蓝色代码retrieve接受的输入参数是一个集合, 包含了两个ID为3和4的元素,使得41行的调用能够一次即可返回2个ServiceRequest的数据。
line 43编译后生成的ABAP代码的伪代码:
line 41编译后生成的ABAP代码的伪代码:
通过比较能发现如果传入retrieve的参数是一个ID的集合,那么编译生成的ABAP代码会调用一个接口为内表的retrieve方法,批量读取数据。
如何批量执行BO Create
对于基础的Create操作,见下列代码第54行,只支持基于单个节点的数据创建。
但是对于CreateWithReference的场景,则和第二个例子的Retrieve场景一样,不仅支持传入单个数据(第56行), 也支持传入一个集合(第58行)。
这两种不同的输入,会导致编译生成的ABAP代码分别进入CREATE_WITH_REF_1和CREATE_WITH_REF_N的执行逻辑,产生性能差异。
要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:
相关推荐
首先,`absl-py`源自Google的内部库,旨在提供一套实用的工具和最佳实践,帮助开发者构建可靠且可扩展的Python应用程序。其核心功能包括日志记录、命令行参数处理、实验管理、性能基准测试等,这些在大型项目中尤为...
8. **性能优化**:absl-py 中的一些模块针对大规模计算进行了优化,比如多线程和并行计算的支持,可以帮助提高代码的执行效率。 9. **测试框架**:它还包含了一套测试工具,使得编写和执行单元测试、集成测试变得...
`absl-py-1.4.0.tar.gz` 是一个包含 `absl-py` 库版本 1.4.0 的压缩包文件。`absl-py`,全称为 Applied Binary Logistic,是一个由谷歌开发并维护的开源库,主要用于提供一系列在机器学习和深度学习项目中常用的基础...
在替换过程中,需要注意的是`std::optional`和`absl::optional`的一些行为差异。例如,`absl::optional`支持直接用`= nullptr`来初始化为空,而`std::optional`则不支持。此外,`absl::optional`提供了`emplace()`...
用户应仔细阅读以获取最佳实践和可能的注意事项。 2. **absl_py-2.0.0-py3-none-any.whl** - 这是实际的Python Wheel文件,其中包含了absl-py库的代码和所有依赖。使用pip工具可以方便地将这个文件安装到Python环境...
标题 "absl_py-1.4.0-py3-none-any.whl.zip" 提供的信息表明,这是一个包含Python库absl-py特定版本(1.4.0)的...通过理解并正确使用这个库,可以提高代码质量,简化项目管理,并利用Google的实践经验来优化算法性能。
标题 "absl_py-2.1.0-py3-none-any.whl.zip" 提供的信息表明,这是一个包含Python库absl-py特定版本(2.1.0)的压缩文件,该库通常用于机器学习和人工智能项目。"py3-none-any"部分表示这个库是为Python 3编译的,不...
9. **Python的最佳实践**:`absl-py` 遵循了Python编程的最佳实践,例如使用类型注解和面向对象设计,这有助于代码的可读性和维护性。 10. **兼容性**:`absl-py` 与TensorFlow和其他深度学习框架很好地集成,可以...
6. **性能监控**:`absl-py` 提供了一些性能监控工具,如计时器、计数器等,可以帮助开发者跟踪代码性能瓶颈。 7. **多进程管理**:对于并行和分布式计算,`absl-py` 提供了简单的多进程管理工具,可以方便地启动和...
7. **代码质量**:absl-py 遵循了Google的编码风格,保证了代码的可读性和一致性,同时也符合Python的最佳实践。 8. **社区支持**:由于其开源性质,absl-py拥有活跃的开发者社区,不断更新和改进,用户可以通过...
它主要服务于两个核心目标:首先,提供一套可重复使用的实用程序和最佳实践,以简化复杂项目的开发流程;其次,作为TensorFlow和其他谷歌AI框架的辅助工具,增强其功能和易用性。 在0.1.6这个版本中,absl-py可能...
absl-py,全称是"Application Baseline Library for Python",由谷歌开发并开源,旨在提供一套基础工具,帮助开发者构建大规模的机器学习项目。它主要关注稳定性和性能,为机器学习研究和生产环境提供了许多实用的...
`absl-py`,全称为"Application Default Building Blocks for Python",是Google开发的一个开源库,它提供了各种实用工具和功能,便于构建和管理大型、复杂的Python项目,尤其是在机器学习和人工智能领域。...
absl-py,全称是Application Default Library for Python,是由谷歌开发的一个开源库,主要用于提供各种实用工具和基础框架,尤其在机器学习和人工智能项目中广泛应用。它包含了日志记录、命令行参数解析、时间管理...
**absl-py**,全称为Application Baseline Library for Python,是谷歌开发的一个开源库,旨在提供一套基础工具集,以支持大规模机器学习项目的开发和实验管理。这个库受到了TensorFlow等大型项目的启发,提供了许多...
"深度学习"标签表明这个库特别适用于深度学习领域,因为absl-py提供了许多对TensorFlow和其他深度学习框架有益的辅助工具和最佳实践。 在压缩包内,主要文件"absl-py-1.3.0"可能包括以下部分: 1. `setup.py`: 这是...
在开始介绍如何下载、安装和合并Abseil(absl)之前,我们先来了解一下Abseil库的一些关键特性: 1. **类型安全**:Abseil提供了许多类型安全的替代品,如字符串和字符串_view,以及智能指针,以避免内存管理和类型...
absl-py(Applied Binary Clustering Library for Python)是由谷歌开发的一个开源库,旨在为研究人员和工程师提供一套稳定、可扩展的工具,以支持大规模机器学习项目的开发和实验。这个库的名字"absl"源自其最初的...
`absl-py` 的设计考虑了谷歌内部的实践经验,它强调了在实验中的一致性和可复现性,以及在大规模数据集上的高性能计算。 在`absl-py-0.11.0`版本中,我们可以期待以下关键特性: 1. **日志记录与调试**:`absl....