Для тестирования использовалась версия 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 |
Сценарий = Справочники.СценарииОбменовДанными.НайтиПоКоду("00001");
ОбменДаннымиСервер.ВыполнитьОбменДаннымиПоСценариюОбменаДанными(Ложь, Сценарий);
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#. Реализация делалась "в лоб" без учёта расхода памяти,
оптимальности алгоритмов и т.п.