Загрузить XML в Exact Online, превышающий максимальный размер или время отклика

У меня есть несколько XML-файлов, сгенерированных отраслевым решением, с новыми данными, которые нужно загрузить в Exact Online с помощью XML API либо напрямую, либо с помощью таблицы UploadXmlTopics в Invantive SQL с драйвером Exact Online.

Тем не менее, Exact Online XML API устанавливает ограничение в ок. 10 МБ на загрузку, и даже в этом случае время загрузки может быть долгим, когда система сильно загружена.

Когда время загрузки превышает десять минут, часть транзакций была применена, а часть завершилась сбоем. При тайм-ауте не возвращается сообщение, в котором говорится, что осталось загрузить.

Я не могу изменить файлы XML, так как они автоматически генерируются отраслевым решением.

Как лучше всего надежно загрузить файлы XML в Exact Online?


person Guido Leenders    schedule 24.03.2017    source источник


Ответы (1)


Конечно, лучше всего изменить XML-файлы, но есть и другие альтернативы. Прежде всего, обратите внимание, что производительность Exact Online меняется в зависимости от дня и выходных. Лучшее время для загрузки больших объемов данных — воскресенье с 13:00 до 23:00, в зависимости от опыта.

При загрузке вручную вы можете вручную разделить XML-файлы на несколько XML-файлов. Всегда разделяйте основную тему по пути /eExact/TOPIC.

При загрузке через таблицу UploadXmlTopics можно использовать два подхода:

  • Рассчитано
  • Автоматизированный

Расчетный размер XML для Exact Online

Расчетный подход является единственным доступным в более старых версиях. Это работает следующим образом:

  • В таблице в памяти или в таблице на основе файла поместите запись для темы 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 )

  • И вставьте эту полезную нагрузку в Exact Online, используя UploadXMLTopics.

Что он эффективно делает, так это сначала определяет приблизительное количество файлов, которые вам нужны, используя логарифмическую функцию с 16 в качестве основания. Затем используйте MD5, чтобы связать несколько случайно распределенных шестнадцатеричных (16 оснований) значений для каждой загружаемой темы XML. Возьмите количество левых символов значений MD5, равное результату логарифмической функции, чтобы получить примерно такое количество файлов, каждый из которых имеет примерно одинаковый размер полезной нагрузки. А затем реконструируйте XML.

Автоматический размер XML для Exact Online

В более новых версиях есть опция автоматического фрагментирования, которая делает всю тяжелую работу за вас. Используйте 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

person Guido Leenders    schedule 24.03.2017