Re[3]: Версионность в Yukon
От: PCherkasova Россия  
Дата: 12.11.04 12:37
Оценка:
Здравствуйте, Merle

Вы знаете, я проверила в Юконе этот пример. Он вполне успешно работает: одна из транзакций откатывается.
Поэтому вопрос, — от каких таких аномалий snapshot не избавляет, остается открытым.


M>Так же, одной из классических аномалий, от которой snapshot не избавляет, и которую можно отнести к разновидности фантомов является Write Skew:

M>Допустим бизнес-логика требует, чтобы x+y<5, на данный момент x=1 и y=1, далее псевдокод:
M>
M>-- для всех транзакций
M>SET TRANSACTION ISOLATION LEVEL SNAPSHOT

M>-- транзакция 1 (T1)
M>--
M>SELECT (X, Y)

M>-- надо добавить к X два, 
M>-- проверяем, что X + 2 + Y < 5
M>--
M>IF ((X + 2) + Y < 5) -- все в порядке Y(=1) + X(=1+2)<5
M>    UPDATE SET X=X+2

M>-- в этот момент стартует вторая транзакция
M>-- которой, в свою очередь, надо к Y добавить 2, естественно с проверкой.
M>--
M>SELECT (X, Y)

M>IF (X + (Y + 2) < 5) -- тоже все в порядке Y(=1+2) + X(=1)<5
M>    UPDATE SET Y=Y+2 -- так как SELECT(X, Y) выбрал последнюю 
M>                     -- зафиксированную версию X (=1)

M>-- ну и фиксируем обе транзакции в произвольном порядке.
M>-- 
M>COMMIT    -- T1

M>COMMIT    -- T2
M>

M>В многоверсионной истории это выглядит примерно так:
M>R1(x,y),W1(x),R2(x,y),W2(y),C1..,C2
M>Как нетрудно догадаться, в результате этих упражнений X+Y будет равно 6, что не соответствует никакому сценарию последовательного выполнения этих транзакций.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.