0. YPermitin 4053 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 4053 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 4053 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 4053 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 4053 28.06.19 11:48 Сейчас в теме
(8) спаибо за отзыв!

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

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

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

Вакансии

Программист, аналитик, эксперт 1С
Санкт-Петербург
По совместительству

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

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству

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

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