DaJet ©

DaJet Exchange
Потоковый обмен данными для 1С:Предприятие 8

Тест производительности выгрузки данных из таблиц регистрации изменений

Для тестирования использовалась версия DaJet Exchange 2.3.1 с настройками по умолчанию. То есть установили как есть, подключили план обмена, создали конвейеры, настроили RabbitMQ и всё - все настройки "из коробки".

Тестирование производилось на одном объекте метаданных - справочнике. Использовалась максимально простая структура данных: Ссылка, Код, Наименование и ПометкаУдаления. Было создано 10 000 элементов справочника общим объёмом данных приблизительно 2 МБ. Все эти элементы регистрировались перед началом теста в плане обмена как изменённые. Успешным выполнением теста считались, либо выгрузка в файл XML, либо доставка сообщений в регистр сведений (входящую очередь) базы-приёмника 1С.

Во всех тестах выборка данных производилась из плана обмена за исключением одного теста, а, именно, УОД+КД2. В этом тесте все данные выбирались непосредственно из справочника одним запросом (только одно обращение к СУБД). Все тесты выполнялись на одном потоке операционной системы, каждый тест по отдельности, не мешая друг другу. Время выполнения считалось как среднее арифметическое из 10 замеров. Правила конвертации объектов КД-2 состояли только из одного правила для выше упомянутого объекта метаданных.

Тестировались следующие варианты выгрузки:

Результаты тестирования
Параметр БСП+КД2 УОД+КД2 УОД+РИБ РИБ MS-PG MS-RMQ MS-RMQ-PG
Источник данных План обмена Справочник План обмена План обмена План обмена План обмена План обмена
Удаление регистрации Нет Нет Нет Нет Да Да Да
Выполнение ПРО (route) Нет Нет Нет Нет Да Да Да
Формат данных XML КД2 XML КД2 XML КД2 XML РИБ JSON DaJet JSON DaJet JSON DaJet
Размер данных 9 757 KB 8 096 KB 8 096 KB 2 470 KB 2 246 KB 2 246 KB 2 246 KB
Время выполнения 56 384 ms 20 702 ms 53 809 ms 26 696 ms 10 282 ms 6 169 ms 8 753 ms


Код 1С для тестирования

БСП+КД2

Сценарий = Справочники.СценарииОбменовДанными.НайтиПоКоду("00001");
ОбменДаннымиСервер.ВыполнитьОбменДаннымиПоСценариюОбменаДанными(Ложь, Сценарий);

УОД+РИБ

УОД+КД2

РИБ

Замер времени выполнения в миллисекундах:

Комментарии по итогам тестирования

1. Варианты БСП+КД2, УОД+РИБ и РИБ "под капотом" используют для выгрузки данных механизмы РИБ. То есть это выборка ссылок "ПланыОбмена.ВыбратьИзменения()" и далее в цикле "Выборка.Получить()". Другими словами это 10 000 + 1 запросов к СУБД. Почему при этом вариант РИБ почти в два раза быстрее, наверное, можно объяснить тем, что у него нет "обвязки" использования правил конвертации КД-2.

2. Почему вариант УОД+КД2 быстрее варианта РИБ можно объяснить тем, что в этом случае УОД строит один запрос со всеми полями напрямую к справочнику. Выполняется всего навсего один запрос к СУБД за всё время выполнения теста.

3. Каждый тест DaJet выполняет 10 (consume) + 10 000 (route) + 10 000 (contract) запросов к СУБД. Кроме этого DaJet Exchange выполняет очистку таблицы регистрации изменений плана обмена и гарантирует доставку, выполняя все операции в транзакции.

4. Тест DaJet MS-PG при настройке MaxDop равной 4 показал результат 3 987 ms.

P.S.
Значения всех тестов DaJet можно улучшить ещё в 2-3 раза за счёт оптимизации кода C#. Реализация делалась "в лоб" без учёта расхода памяти, оптимальности алгоритмов и т.п.