saveAll的限制

2020-09-07 09:54发布

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

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


你好,

saveAll的限制是什么,或者关于saveAll的性能有何考虑? 我们必须不时地导入大约100到160万行。 impex不是一种选择。

谢谢

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

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


你好,

saveAll的限制是什么,或者关于saveAll的性能有何考虑? 我们必须不时地导入大约100到160万行。 impex不是一种选择。

谢谢

付费偷看设置
发送
4条回答
梦想连接
1楼-- · 2020-09-07 10:14

将所有这些模型都存储在内存中并附加到ModelContext存在内存限制。 大量保存并没有太大好处。 我将使批量大小可配置,并从每批大约100个项目开始,并测试最有效的方法。 出于性能原因或因为您未使用CSV,ImpEx并不是不可取的选择吗?

Haoba3210
2楼-- · 2020-09-07 10:19

您能告诉我HANA的批量大小是多少吗? 是否依赖数据库? 对于modelService.saveAll(list); 方法。

3楼-- · 2020-09-07 10:32

不知道为什么impex/csv是一个约束,但是如果原因是文件或敏感数据的大小,那么我建议使用Bean Shell脚本直接导入CSV文件,而无需触摸它 。 如果您具有正确的用户ID/密码,则可以直接连接到外部数据库。 以下是2个选项。 选项1读取外部CSV文件。 选项2直接从第三方数据库读取它。

INSERT_UPDATE产品;代码[unique = true]; ..."#%CSVReader reader =新的CSVReader(ImpExManager.class.getResourceAsStream("" myDataFile.csv""),"" utf-8"");" "#%reader.setMaxBufferLines(100000l);" "#%impex.includeExternalData(reader,1,-1);"

INSERT_UPDATE XYType; $ code [unique = true]; $ mandant; $ typ; baseProduct(code,catalogVersion(catalog(id [default ='myCatalog']),version))#%impex.initDatabase(,,,); "#%impex.includeSQLData("" SELECT"" +"" myProduct.ProductID,myProduct.Tenant,Variant.myVariantID,(myProduct.ProductID +'-base ::'+ CAST(myProduct.Tenant AS varchar(2))) )"" +""从DB.SpecialProduct作为产品JOIN DB.SpecialProductVariant作为VARIANTE"" +""在myProduct.ProductID = Variant.ID和myProduct.Tenant = Variant.Tenant"" +"" WHERE"" +"" Variant.myVariantID> 0 AND Product.variant ='xytype'""));"

这些可以通过Hybris管理控制台导入,将enableCodeExecution和legacy模式设置为true

Alawn_Xu
4楼-- · 2020-09-07 10:22

建议不要使用model.save或saveAll来批量保存如此大的数据 。 最好尝试一些本机数据库操作或在批处理模式下使用impex。 您可以编写一个bean脚本,并使用impex将数据添加到数据库中。

如果您要保存的主要模型有参考模型,

saveAll()会对性能产生影响。 在从模型上下文读取后,saveAll()保存模型的所有修改,其中save()不会更新任何已保存的参考模型。

一周热门 更多>