29.04.2016, 11:25 | #1 |
Участник
|
Какой способ использование транзакции предпочтительнее.
Добрый день.
Имеется два способа использовать транзакцию. Вариант (А) PHP код:
PHP код:
В операторах ttsBegin/ttsCommit зашита дополнительная логика на уровне ядра системы, что тоже оставляет метод (А) более предпочтительным. Некоторые разработчики используют метод (Б) аргументируя тем, что транзакция не блокирует базу. Но ведь как-то разносятся журналы ГК по 100 строк по разным модулям, накладные... Может выбор должен зависить от магического алгоритма выбора и обновления данных. Но если алгоритм простой (выбор, клиента и обновление у него поля даже с обновлением глобальной адресной книги) считаю, что метод (А) предпочтительнее. К какому методу склонны вы, обновление каких данных заставляло вас использовать метод (Б)? |
|
29.04.2016, 11:32 | #2 |
Участник
|
на мой взгляд вопрос не корректен, это типа спросить, на чем лучше передвигаться на пароходе или велосипеде, все зависит от целей и решаемой задачи
|
|
29.04.2016, 11:37 | #3 |
Участник
|
Определяющим здесь является не производительность а ограничения бизнес-процесса. Если возможно на логическом уровне допустить обработку части строк, а не всех сразу, то лучше использовать второй вариант.
Если не хотите реализовывать функцию дообработки частично необработанных данных (на случай обрыва транзакции) и блокировки не критичны, то используйте первый вариант. См. также Коллеги, что вы думаете о данном коде? 2MikeR Последний раз редактировалось S.Kuskov; 29.04.2016 в 11:39. |
|
29.04.2016, 12:59 | #4 |
Участник
|
Еще есть компромиссный вариант, когда транзакция фиксируется не на каждом шаге цикла, а на каждую пачку записей, например по 100 штук. Позволяет снизить накладные расходы.
|
|
29.04.2016, 13:42 | #5 |
Участник
|
У нас возникла проблема. Америкосский разработчик-интегратор внедрил свое решение, вследствие которого в системе расплодились дублирующие друг друга записи InventDim. Т.е. Все поля идентичны кроме InventDimId и RecId. Предстояла задача найти и устранить не только все дубликаты InventDim, но и заменить внешние ключи InventDimId по всем таблицам в системе. На выполнение подобной процедуры ушла неделя процессорного времени. Естественно, мы применили вариант (Б), т.к. при возникновении проблем (а проблемы были), не хотелось бы откатывать назад все изменения, которые уже произошли.
__________________
// no comments |
|