通过服务层添加数百万个项目的最佳实践

2020-09-08 22:22发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家您好,

对于使用Service Layer将数百万个项目添加到SBO Hana数据库中,我想征询您的意见。 如果您能与我们分享实现此目标的最佳方法,那就太好了。

任务包括

1)添加每个具有20-30个属性的项目,其中一些还具有项目图像

2)为项目添加一些附加信息,例如项目描述的翻译(实体MultiLanguageTranslations)。 我还没有找到一种方法来将这种翻译添加为Item添加请求的一部分。

据我所知,我们有几种选择:

  1. 在单独的请求中发送每个项目,ItemImage和MultiLanguageTranslations。 可能是最糟糕的选择。
  2. 使用批处理请求一次发送XXX个项目

    2.1)一个批处理请求中最大子请求数是否有限制/建议?

    2.2)SBO将在创建商品时生成ItemCode。 是否可以使用ItemCode在同一批处理请求中添加ItemImage和MultiLanguageTranslations?

  3. 使用脚本引擎吗? 可以提供任何帮助吗?

负载均衡器

如果我正确理解服务层负载均衡器,则其效果仅在同时有XX个不同的用户/会话同时使用服务层的情况下可见。 那是对的吗? 如果我们仅使用1个用户来上传此数据,那么Load Balancer不会对处理速度产生任何影响?

谢谢。

此致

OndřejNekvinda

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家您好,

对于使用Service Layer将数百万个项目添加到SBO Hana数据库中,我想征询您的意见。 如果您能与我们分享实现此目标的最佳方法,那就太好了。

任务包括

1)添加每个具有20-30个属性的项目,其中一些还具有项目图像

2)为项目添加一些附加信息,例如项目描述的翻译(实体MultiLanguageTranslations)。 我还没有找到一种方法来将这种翻译添加为Item添加请求的一部分。

据我所知,我们有几种选择:

  1. 在单独的请求中发送每个项目,ItemImage和MultiLanguageTranslations。 可能是最糟糕的选择。
  2. 使用批处理请求一次发送XXX个项目

    2.1)一个批处理请求中最大子请求数是否有限制/建议?

    2.2)SBO将在创建商品时生成ItemCode。 是否可以使用ItemCode在同一批处理请求中添加ItemImage和MultiLanguageTranslations?

  3. 使用脚本引擎吗? 可以提供任何帮助吗?

负载均衡器

如果我正确理解服务层负载均衡器,则其效果仅在同时有XX个不同的用户/会话同时使用服务层的情况下可见。 那是对的吗? 如果我们仅使用1个用户来上传此数据,那么Load Balancer不会对处理速度产生任何影响?

谢谢。

此致

OndřejNekvinda

付费偷看设置
发送
2条回答
clasier
1楼 · 2020-09-08 22:35.采纳回答

嗨Ondrej,

让我尝试通过 一个到所有的问题:

2)关于 MultilanguageTranslations对象我已经检查了SDK帮助中心,对我来说 它是与Items分离的对象,因此,分离的SL请求将是

"图像"与您使用"项目图像"功能相同(https://help.sap.com/doc/0d2533ad95ba4ad7a702e83570a21c32/9.3/zh-CN/Working_with_SAP_Business_One_Service_Layer.pdf ,第3.17节"项目图片"?在这种情况下,需要单独的请求 确实。

关于您的不同 选项:

  1. 应该没问题,只是你会循环过来 您的代码在每个循环中都有3个请求。
  2. 批量添加项目可能是一种解决方案 但请考虑以下因素:
  • 批处理中的操作按顺序处理 由SL负责,因为SL必须确保操作顺序。
  • 不使用批处理请求或不使用批处理请求 太长的时间就会有更好的性能。
  • 批处理的优点是减少了 网络延迟以及使用全局事务的可能性。 取决于您在批处理性能中可以运行的操作类型 好还是不好。

2.1限制/建议 批处理请求

默认的最大大小 SL接受的主体为50MB。

可以通过 " httpd-b1s-lb-member-common.conf"中的LimitRequestBody,但它是 建议不要将其更改为更大的值,因为这意味着更多的内存 分配在后端,可能的话 导致内存问题。

我们的建议是拆分

LimitRequestBody 52428800

SetHandler b1s

p>

2.2内部的ItemCode参考 一批

  • 您可以使用 在同一批次内的后续请求中创建项目。
  • 请检查" 3.9.4更改"部分 集合"上的 SL 文档,展示了如何重用Content ID来引用Content 来自同一批次中但位于不同ChangeSet上的先前请求的ID。

3。 脚本引擎

使用脚本引擎可以 是将附件,项目和 翻译。 这样,您的几个应用程序可以使用相同的脚本 出于不同的目的,而不必重复该组操作。 您 如果您想将3个操作设为 链接在一起。

4。 负载均衡器和用户会话。
使用其他sessionID 将触发更好的进程并行化。 副作用是它会 在服务器端消耗更多的内存。

希望它对您有帮助

特立尼达。

我是小鹏鹏啊
2楼-- · 2020-09-08 22:29

嗨,特立尼达,

谢谢。 现在,我们将使用普通请求(而不是批处理请求),并且不使用脚本引擎。 我们计划使用一个用户的多个会话来加快此过程。 没问题,仍然为每个会话创建一个进程,对吧?

我们还将利用标头" Prefer"和值" return-no-content",因为我们真的不需要通过POST请求在创建时返回整个对象。 这也应该为我们节省一些处理时间。

此致

OndřejNekvinda

一周热门 更多>