powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / блокировки и транзакции, всегда ли обязательно?
7 сообщений из 7, страница 1 из 1
блокировки и транзакции, всегда ли обязательно?
    #36661135
Фотография DirksDR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если конкурентные процессы записывают в одну глобаль строки с уникальными ключами, есть ли смысл оформлять запись как транзакцию с блокировкой?

Пробовал запускать из двух терминалов параллельно программку:
w !,$zts," start"
for i=1:1:10000000 do ;
.;lock ^a
.;tstart
.s k=$i(^a)
.s ^a(k)=""
.;tcommit
.;lock
w !,$zts," end"

1.в таком виде (без транзакций и болкировок) - 96сек
2.как транзакции (раскомментарены tstart & tcommit) - 140 сек
3.как транзакции с блокировкой - 135 сек (на первый взгляд странно, что быстрее 2-го варианта, но может транзакциям легче, когда они работают последовательно, а не параллельно).

Во всех трех вариантах результат был одинаковый - формировалась глобаль на 20млн строк.
Никаких ошибок, типа нарушения структуры глобала и т.д.
Так есть ли смысл в данном случае использовать транзакции и блокировки?
...
Рейтинг: 0 / 0
блокировки и транзакции, всегда ли обязательно?
    #36661166
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DirksDR , если используется функция инкремента - блокировать дополнительно нет необходимости. Эта функция изначально гарантирует уникальный инеремент для всех процессов.
...
Рейтинг: 0 / 0
блокировки и транзакции, всегда ли обязательно?
    #36661172
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DirksDRТак есть ли смысл в данном случае использовать транзакции и блокировки?
В данном примере нет смысла в блокировках и транзакциях... Если будут сбои в некоторых процессах, думаю что в глобале просто будут "дырки" с нумерацией.
...
Рейтинг: 0 / 0
блокировки и транзакции, всегда ли обязательно?
    #36661347
Фотография DirksDR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,

То есть можно не бояться, что параллельные процессы попортят структуру базы/глобали?
...
Рейтинг: 0 / 0
блокировки и транзакции, всегда ли обязательно?
    #36661359
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DirksDR , конкретно в твоём примере никто ничего не попортит...
...
Рейтинг: 0 / 0
блокировки и транзакции, всегда ли обязательно?
    #36661405
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В первую очередь "разводить" процессы нужно проектирвоанием базы, чтобы как можно реже случалась необходимость работы с одними и теми же данными, блокировки должны быть максимально локализованными.

Насчет транзкций - то же самое. Очень плохо загонять в транзакцию расчет на два часа.
В конце концов, если будет сбой, то он не меньше чем два часа будет откатывать назад.
Максимально отработка ошибок желательна без транзакций, и только в самых критичных моментах есть смысл в их использовании.
...
Рейтинг: 0 / 0
блокировки и транзакции, всегда ли обязательно?
    #36665291
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DirksDRЕсли конкурентные процессы записывают в одну глобаль строки с уникальными ключами, есть ли смысл оформлять запись как транзакцию с блокировкой?

Блокировки можно и не использовать в принципе, если так уж хочется, а ключ реально уникален - в твоем примере $i уникален.

Транзакции смысл имеет - ибо если у тебя случиться непонятное - вставленные данные нужно будет откатить. Без транзакций это будет весьма непросто.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / блокировки и транзакции, всегда ли обязательно?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]