AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.04.2016, 11:25   #1  
johny77 is offline
johny77
Участник
 
31 / 27 (1) +++
Регистрация: 04.07.2006
Какой способ использование транзакции предпочтительнее.
Добрый день.

Имеется два способа использовать транзакцию. Вариант (А)
PHP код:
ttsbegin;
while(
setEnumerator.moveNext())
{
    ...
    
// выбор и обновление данных
}
ttscommit
Другой вариант (Б)
PHP код:
while(setEnumerator.moveNext())
{
    
ttsbegin;
    ...
    
// выбор и обновление данных
    
ttscommit;

Поскольку данные обновляются в одной транзакции, то вариант (А) предпочтительнее, поскольку откатывается вся транзакция.
В операторах ttsBegin/ttsCommit зашита дополнительная логика на уровне ядра системы, что тоже оставляет метод (А) более предпочтительным.

Некоторые разработчики используют метод (Б) аргументируя тем, что транзакция не блокирует базу. Но ведь как-то разносятся журналы ГК по 100 строк по разным модулям, накладные...

Может выбор должен зависить от магического алгоритма выбора и обновления данных. Но если алгоритм простой (выбор, клиента и обновление у него поля даже с обновлением глобальной адресной книги) считаю, что метод (А) предпочтительнее.

К какому методу склонны вы, обновление каких данных заставляло вас использовать метод (Б)?
Старый 29.04.2016, 11:32   #2  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,689 / 405 (17) +++++++
Регистрация: 23.03.2006
на мой взгляд вопрос не корректен, это типа спросить, на чем лучше передвигаться на пароходе или велосипеде, все зависит от целей и решаемой задачи
Старый 29.04.2016, 11:37   #3  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Определяющим здесь является не производительность а ограничения бизнес-процесса. Если возможно на логическом уровне допустить обработку части строк, а не всех сразу, то лучше использовать второй вариант.

Если не хотите реализовывать функцию дообработки частично необработанных данных (на случай обрыва транзакции) и блокировки не критичны, то используйте первый вариант.

См. также Коллеги, что вы думаете о данном коде? 2MikeR

Последний раз редактировалось S.Kuskov; 29.04.2016 в 11:39.
Старый 29.04.2016, 12:59   #4  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,875 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Еще есть компромиссный вариант, когда транзакция фиксируется не на каждом шаге цикла, а на каждую пачку записей, например по 100 штук. Позволяет снизить накладные расходы.
Старый 29.04.2016, 13:42   #5  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
643 / 347 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
У нас возникла проблема. Америкосский разработчик-интегратор внедрил свое решение, вследствие которого в системе расплодились дублирующие друг друга записи InventDim. Т.е. Все поля идентичны кроме InventDimId и RecId. Предстояла задача найти и устранить не только все дубликаты InventDim, но и заменить внешние ключи InventDimId по всем таблицам в системе. На выполнение подобной процедуры ушла неделя процессорного времени. Естественно, мы применили вариант (Б), т.к. при возникновении проблем (а проблемы были), не хотелось бы откатывать назад все изменения, которые уже произошли.
__________________
// no comments
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Остатки по номенклатуре в разрезе складов внутри транзакции Ace of Database DAX: Программирование 21 04.06.2017 09:02
Какой способ создания диалога лучше? АртемМелихов DAX: Программирование 8 10.08.2015 08:07
Какой смысл InventDim на строках заказа? IKA DAX: Функционал 7 08.04.2013 19:04
Какой способ для связи Axapta с Excel вы предпочитаете? Gustav DAX: База знаний и проекты 37 09.06.2006 09:02
транзакции andreynikolai DAX: Программирование 2 20.06.2002 17:51

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 02:58.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.