Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / блокировки и транзакции, всегда ли обязательно? / 7 сообщений из 7, страница 1 из 1
01.06.2010, 12:57
    #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
01.06.2010, 13:09
    #36661166
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
блокировки и транзакции, всегда ли обязательно?
DirksDR , если используется функция инкремента - блокировать дополнительно нет необходимости. Эта функция изначально гарантирует уникальный инеремент для всех процессов.
...
Рейтинг: 0 / 0
01.06.2010, 13:11
    #36661172
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
блокировки и транзакции, всегда ли обязательно?
DirksDRТак есть ли смысл в данном случае использовать транзакции и блокировки?
В данном примере нет смысла в блокировках и транзакциях... Если будут сбои в некоторых процессах, думаю что в глобале просто будут "дырки" с нумерацией.
...
Рейтинг: 0 / 0
01.06.2010, 14:19
    #36661347
DirksDR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
блокировки и транзакции, всегда ли обязательно?
krvsa,

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

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

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

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


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