我有一些行业解决方案生成的XML文件,新数据可以使用XML API直接上传到Exact Online,也可以直接使用Inventtive SQL中的UploadXmlTopics
表和Exact Online驱动程序。
但是,Exact Online XML API的约束限制为。每次上传10 MB,即使这样,当系统负载很重时,加载时间也可能很长。
当加载时间超过十分钟时,部分交易已经应用且部分失败。如果超时,则不会返回任何消息,说明要加载的内容。
我无法更改XML文件,因为它们是由行业解决方案自动生成的。
将XML文件可靠地上传到Exact Online的最佳方法是什么?
答案 0 :(得分:0)
当然最好更改XML文件,但有各种替代方法。首先请注意,Exact Online的表现在一天和周末都有所不同。根据经验,周日在13:00至23:00之间上传大量数据的最佳时间。
手动上传时,您可以手动将XML文件拆分为多个XML文件。始终拆分路径/ eExact / TOPIC上的主要主题。
通过UploadXmlTopics
表格上传时,您可以使用两种方法:
计算出的方法是旧版本中唯一可用的方法。它的工作原理如下:
然后确定您需要多少片段,例如使用:
select ceil(log(xmlsize / 10000, 16)) + 1
from ( select sum(length(xml)) xmlsize from xmlaccounts@inmemorystorage )
用最大片段大小替换10000。在重负荷期间选择较小的一个,在周末选择1000000。
使用例如:
记住结果 local define xmlaccountsparts "${outcome:0,0}"
然后构造新的XML以插入UploadXmlTopics
,如下所示:
选择filenamepostfix,xml from(select filenamepostfix,listagg(xml,'')xml from(select substr(md5(xml),1,$ {xmlaccountsparts})filenamepostfix ,xml 来自xmlaccounts @ inmemorystorage ) 组 通过filenamepostfix )
使用UploadXMLTopics
将此有效内容插入Exact Online。
它实际上做的是首先使用16作为基数的对数函数来确定大约需要多少文件。然后使用MD5为每个要上载的XML主题关联一些随机分布的十六进制(16个基本)值。将MD5值的左侧字符数等于对数函数结果,以获得大约此数量的文件,每个文件具有大致相同的有效负载大小。然后重构XML。
较新的版本有一个自动片段选项,可以为您提供繁重的工作。使用类似SQL的
insert into UploadXMLTopics@eol
--
-- Upload seed data into Exact Online.
--
( topic
, payload
, division_code
, orig_system_reference
, fragment_payload_flag
, fragment_max_size_characters
)
select topic
, filecontents
, division_code
, filename
, true
, 10000 /* This one is in characters. You can also specify in number. */
from ...
可以使用以下方法查询加载的片段:
select *
--
-- Check results and reload.
--
from UploadXMLTopicFragments@eol