0. YPermitin 4124 27.06.19 20:57 Сейчас в теме

Ускорение чтения правил обмена в УПП 1.3 в 20 раз!

Способ оптимизации чтения правил обмена конвертации данных. Может понадобиться при большом размере правил и высокой периодичности обмена.

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
1. dmurk 267 28.06.19 00:05 Сейчас в теме
А теперь для тех, кого заинтересовала тема заголовка, но разочарован статьей.
1. Применяя описанную методику не забудьте о необходимости проверять факт изменений в правилах обмена прежде чем использовать данные из кэша
2. Данное решение никоим образом не ускоряет чтение правил обмена не находящихся в кэше, хотя это и возможно. При чтении правил обмена выполняется обработка одноуровневого массива несвязанных данных, вследствие чего задача хорошо распараллеливается по одному из двух вариантов:
- В первом случае алгоритм основан на разделении массива правил обмена на чет/нечет, либо первый/второй/третий/четвертый, либо октетная обработка и тому подобное масштабирование. Для каждого фонового задания выгружается собственная копия правил с использованием штатной Универсальной обработки с небольшими модификациями на обработку только правил с указанным совпадением номера с остатком от деления на 2, 4, 8 и т.п., а для несовпадающих номеров использовать крайне быстрый метод обработки XMLЧтение.Пропустить(), после отработки фоновых заданий потребуется выполнить сборку результатов.
- Во втором случае потребуется использовать недавно добавленные в платформу объекты поточной обработки двоичных данных, и за счет применения парного чтения двух копий XML с правилами обмена на открывающий и закрывающий XML-маркер (методом ПропуститьДо(), выполнить нарезку исходного XML файла на объекты на заданной глубине вложенности XML, после чего передать куски XML на десериализацию фоновым заданиям, что увеличивает задачу на 1 месяц разработки, но даёт 15% выигрыш в задержке диспетчера десериализации, а ещё позволяет аналогичным образом в несколько потоков перейти к решению задачи ускорения загрузки файлов обмена, а не только правил.
Артано; WellMaster; ivanov660; Dach; wowik; 27272; YPermitin; SirStefan; +8 Ответить
2. YPermitin 4124 28.06.19 06:13 Сейчас в теме
(1) Вы пошли еще дальше, отлично!

Жаль, что разочаровал. Посыл был в простой демонстрации решения. А то и правда на целый месяц разработка увеличится :)
Mi4man; paybaseme; wowik; 27272; acanta; +5 Ответить
3. dmurk 267 28.06.19 06:33 Сейчас в теме
(2) Нет, я не разочарован. Я отлично понимаю, что такое диалог с бизнесом, и что такое business value
4. Rustig 1189 28.06.19 06:41 Сейчас в теме
(0) решение интересное!
(1) я вас не понял:
1. правила не меняются или так лучше скажу - меняются, но редко - и за этими изменениями следит разработчик - то есть сам автор.
2. данное решение не должно ускорять правила, которые не "в кэше".

вообще тема простая - зная бизнес-логику программы, легко делать оптимизацию. я приведу свой реальный пример для простоты понимания сути: вот есть типовое решение в типовых конфигурациях - использовать во всех документах константу ВалютаРегламентированногоУчета - обращение к ней происходит почти в каждом документе при любой операции - распечатать что-то, провести документ, при изменении данных формы. Тут же происходит пересчет валюты через курс валюты. Но если , к примеру, вы знаете что фирма работает только с Руб. и курс постоянен =1, то можно во всех где хотите местах прописать это условие оптимизацию - к примеру убрать проверку на валюту при проведении документа, в запросах упростить сам запрос - убрать пересчет курса.
То есть, еще раз, зная бизнес-процесс фирмы и бизнес-логику программы, можно точечно оптимизировать. В этом и заключается одна из сторон автоматизации бизнес-процессов клиентов.
Примерно так я убираю (закомменчиваю) в конфигураторе механизмы ЕГАИС и ЭДО во всех местах программы, если знаю что магазин не торгует алкоголькой, это ведь строительный магазин, магазин не использует ЭДО - электронный документооборот.... И так далее и тому подобное - выигрыш в том, что программа начинает быстрее работать даже без замеров производительности.
6. YPermitin 4124 28.06.19 07:16 Сейчас в теме
(4) если вопросы ко мне, то:
1. Правила могут меняться скол ко угодно раз. При изменении правил кэш очищается. При первом обмене кэш формируется, если его не было. Разработчику можно не следить за этим.
2. Да, если в кэше правил не было, то первый запуск будет без оптимизации.
Азверин; +1 Ответить
7. Rustig 1189 28.06.19 07:22 Сейчас в теме
(6) нет вопросов, все понятно
12. lunjio 62 29.06.19 10:30 Сейчас в теме
(6) Было бы логичнее хэш высчитать массива и хранить кэш в привязке к хэшу, вроде операция не дорогостоящая, но логически корректная. На картинке вижу 52 и 8, а не 152 и 8 ) точно 152 ?
13. YPermitin 4124 29.06.19 10:35 Сейчас в теме
(12)
52 и 8, а не 152 и 8


Хеш хранить для сравнения актуальны ли данные в кэше? Так и делалось.

Про картинку затрудняюсь ответить, почему общий замер 152, а в подвале таблицы только 52 видно. Все таки 6 лет прошло с тех пор :)
Прикрепленные файлы:
10. triviumfan 10 28.06.19 22:59 Сейчас в теме
(4)
от есть типовое решение в типовых конфигурациях - использовать во всех документах константу ВалютаРегламентированногоУчета - обращение к ней происходит почти в каждом документе при любой операции - распечатать что-то, провести документ, при изменении данных формы. Тут же происходит пересчет валюты через курс валюты. Но если , к примеру, вы знаете что фирма работает только с Руб. и курс постоянен =1, то можно во всех где хотите местах прописать это условие оптимизацию - к примеру убрать проверку на валюту при проведении документа, в запросах упростить сам запрос - убрать пересчет курса.
То есть, еще раз, зная бизнес-процесс фирмы и бизнес-логику программы, можно точечно оптимизировать. В этом и заключается одна из сторон автоматизации бизнес-процессов клиентов.
Примерно так я убираю (закомменчиваю) в конфигураторе механизмы ЕГАИС и ЭДО во всех местах программы, если знаю что магазин не торгует алкоголькой, это ведь строительный магазин, магазин не использует ЭДО - электронный документооборот.... И так далее и тому подобное - выигрыш в том, что программа начинает быстрее работать даже без замеров производительности.

Сомнительная оптимизация.
11. Rustig 1189 29.06.19 09:02 Сейчас в теме
(10) в чем сомнения, дорогой друг?
14. triviumfan 10 29.06.19 10:36 Сейчас в теме
(11) обращение к константе - тут бессмысленно что-либо делать, даже модуль повторного использования значений не рекомендуется (на итс где-то видел), пересчета как такого нет, ведь идёт сравнение валют, коль обе рубли то и пересчета нет.
егаис и эдо небось от значений функциональных опций зависит, зачем комментировать, если оно итак не работает и соответственно оптимизировать нечего.
15. Rustig 1189 29.06.19 23:12 Сейчас в теме
(14)егаис и эдо в УТ 10.3,в котором нет функц. опций. Я привёл пример общего принципа. Если и спорить, то не с конкретным примером, а с принципом оптимизации кода (РЕФАКТОРИНГ). Ну а про константу принцип простой - для моей организации эта константа в принципе не нужна, и поэтому все вызовы и пересчёт курса тоже не нужны. Берите шире, смотрите глубже - кроме этой константы много чего ещё можно отключить в конфигурации: нет учёта серий - убираем серии и т.д.
16. dmurk 267 30.06.19 22:41 Сейчас в теме
(4) У меня были ситуации когда в один поток обмен не успевал загружать суточный объем данных. Тогда приходит на помощь параллельная разборка xml с данными
5. acanta 64 28.06.19 07:06 Сейчас в теме
Огромное спасибо, очень помогли.
YPermitin; +1 Ответить
8. Dach 275 28.06.19 11:16 Сейчас в теме
Очень уважаю автора, но статья странная. Больше подходит новичку, нежели опытному автоматизатору, честно говоря.

Если уж обмен используется часто, а правила меняются редко и разрешено менять конфигурацию, почему вообще не решить проблему кардинально?

Сделать из обработки документ, все методы обмена перенести в него, все реквизиты обработки - в реквизиты документа. Все что можно сериализовать - все в реквизиты с типом Строка или ХранилищеЗначения, все что нельзя сериализовать - написать обработчики заполнения при инициализации объекта документа. Поменялись правила - открыли документ интерактивно, перезаписали их.

Короче, посыл не очень ясен. Думаю, каждый 3-й наш коллега таких "ускорений" делает пяток штук в месяц.
Может не стоит все подряд из старого блога сюда "переносить"? Исключительно ИМХО.
acanta; YPermitin; +2 2 Ответить
9. YPermitin 4124 28.06.19 11:48 Сейчас в теме
(8) спаибо за отзыв!

Хорошо, что каждый 3-й делает подобные оптимизации в среднем 5 раз в месяц. Автоматизация и компетенции растут!

У вас слишком много "если". А вариант с документом создаст сложности для поддержки типовых конфигураций. Радикальным методом для оптимизации я бы лучше назвал - отказ от типовых механизмов обмена. Да и никто не говорил, что правила меняются редко.

Ваше мнение услышано!
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1C
Москва
зарплата от 100 000 руб. до 150 000 руб.
Полный день


Руководитель проектов 1С
Санкт-Петербург
Полный день

Бизнес-архитектор 1С, ведущий консультант
Санкт-Петербург
Полный день

Программист 1С
Москва
зарплата от 120 000 руб. до 150 000 руб.
Полный день