トランザクションのモデル
以下のような分類がある.世の中で広く使われているのは General Model までか.
General model:
the one consisting of several steps, each of which either reads or writes an entity
Data Operation を r と w だけにすること
Two-step model:
all the reads come before all the writes
r_i(x) <_s w_i(y) for any {x, y} forall r_i(x) where <_s is the order of the schedule
これは特に呼び名がない.ここでは read-all-before-you-write と呼んでみる
トランザクションが read step と write step に分かれる,というイメージ.
Restricted model:
an entity is read before it is written
there exists r_i(x) forall w_i(x) forall
informalに言うと「blind writeがない」こと.
これを read-before-you-write とよぶ
Two-step Restricted model: read-all-before-you-write と read-before-you-write の合成.
Action model:
each step is an indivisible execution of a read and a write step.
各トランザクションは不可分な Action からなる. A(x) A(y) A(a,b) といった表記で, A はreadとwriteを両方行っている仮定をとる.
つまり暗黙に read-before-you-write である.
readしかしない data itemに対しても不可分に write をするという仮定をとっているので,すなわち 「排他ロックしかない2PL」と同じようなもの
--- 番外編 ---
The page model :
no data item is read (again) after it has been written.
これはGeneral modelも暗黙に持っている仮定なのか?
エルブランセマンティクス:
a step writes a new value that potentially depends on the values of all data items that ti has read from the database or from other transactions
つまり, General model のDBからTwo-step modelのDBにコードを移植しても挙動は変わらないが,逆だと変わりうる.