0

我有几个由行业解决方案生成的 XML 文件,其中包含要使用 XML API 直接或使用UploadXmlTopics带有 Exact Online 驱动程序的 Invantive SQL 中的表上传到 Exact Online 的新数据。

但是,Exact Online XML API 的限制约为。每次上传 10 MB,即使系统负载很重,加载时间也会很长。

当加载时间超过十分钟时,部分事务已应用,部分事务失败。超时没有返回消息,说明还有什么要加载。

我无法更改 XML 文件,因为它们是由行业解决方案自动生成的。

将 XML 文件可靠地上传到 Exact Online 的最佳方式是什么?

4

1 回答 1

0

当然,最好更改 XML 文件,但有多种选择。首先请注意,Exact Online 的性能在白天和周末会有所不同。根据经验,上传海量数据的最佳时间是周日 13:00 到 23:00。

手动上传时,您可以手动将 XML 文件拆分为多个 XML 文件。始终在路径 /eExact/TOPIC 上拆分主题。

通过UploadXmlTopics表格上传时,可以使用两种方式:

  • 计算出来的
  • 自动化

为 Exact Online 计算的 XML 大小

计算方法是旧版本中唯一可用的方法。它的工作原理如下:

  • 在内存表或基于文件的表中,为您希望上传的每个 XML 主题放置一条记录。我通常将它们命名为“xml”作为列名。
  • 然后确定您需要多少片段,例如使用:

    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如下所示:

    select filenamepostfix, xml from (select filenamepostfix, listagg(xml, '') xml from (select substr(md5(xml), 1, ${xmlaccountsparts}) filenamepostfix, xml from xmlaccounts@inmemorystorage) group by filenamepostfix

  • 并使用UploadXMLTopics.

它的有效作用是首先使用以 16 为底的对数函数大致确定您需要多少个文件。然后使用 MD5 为每个要上传的 XML 主题关联一些随机分布的十六进制(16 个基数)值。取 MD5 值的左侧字符数等于对数函数的结果,以获得大约这个数量的文件,每个文件的有效负载大小大致相同。然后重构 XML。

Exact Online 的自动 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

看起来像: 片段 XML 上传到 Exact Online

于 2017-03-24T11:40:57.980 回答