トランザクション
一つの作業単位として扱う一連の操作の集まり
作業中のトランザクションによる更新は、他のトランザクションからはトランザクションが完結するまで不可視です。 そのトランザクションが完結したその時点で、トランザクションで行った更新の全てが見えるようになります。
複数システムで跨ったトランザクションを実現するのは非常に難しい→マイクロサービスなど トランザクションが必要な要件であれば、それは単一システムで完結させるべき
RDMS
トランザクションを考慮したファイルシスム
トランザクションNTFS
ACIDの中の分離性をどのレベルで実現するかという塩梅の話。処理速度と不整合とのトレードオフがある。
https://gyazo.com/92c28d7599349824b921715b6b0bfca6
RDMSではread committedかrepeatble readどちらかでやることが多い
hiroki.iconシリアライズは遅すぎるしread uncommittedで読み込む値が信用ならないのはあれだし、丁度いいのかな
仮定:トランザクションA,Bが同一のテーブルを操作した
事象
ダーティーリード
Aで更新されている最中(Aはコミットされていない)にBでデータを読み出す→更新途中のデータを読み込んで不整合
ファジーリード/ノンリピータブルリード
Aの中の1回目と2回目のSelectの間にBがUPDATEした時に、Aの2回目のSelectでは異なる値を読み取ってしまう
hiroki.iconモロに他のトランザクションの影響(UPDATE)を受けて値が変化してしまっている
ファントムリード
Aの中の1回目と2回目のSelectの間にBがレコードを追加/削除した時に、Aの2回目のSelectで異なる値を読み取ってしまう。
ロストアップデート
AとBとで同時に更新して更新内容が消える
アップデートがなかったことになる。