yagikota / study

0 stars 0 forks source link

データ指向アプリケーションデザイン7章 #21

Open yagikota opened 1 month ago

yagikota commented 1 month ago

What do you do?

7章読む。

TODO

yagikota commented 1 month ago

トランザクション

7.1 トランザクションという捉え所のない概念

トランザクションの特徴=ACID特性

7.1.1 ACIDの意味

ACID

→DBごとに定義が異なるので、ほぼマーケティング用語と化している。

Atomicity

Consistency

Isolation

Durability

7.1.2単一オブジェクト操作と複数オブジェクト操作

7.1.2単一オブジェクト操作

単一オブジェクトレベルでのAtomicityとIsolationは必要

7.1.3 エラーと中断の処理

中断されたトランザクションのエラー処理は完璧ではない

yagikota commented 3 days ago

7.2 弱い分離

7.2.1 Read Committed

https://christina04.hatenablog.com/entry/transaction-isolation-level image

Read Committedではこれらが起きない。

7.2.2 スナップショット分離とリピータブルリード

7.2.3 更新のロストの回避

read-modify-writeで問題になる。 UserAのwriteがUserBのwriteに打ち消される。

UPDATE counters SET value = value + 1 WHERE key = 'foo';

であれば防げる。 ORMフレームワーク使うと意図せず、read-modify-writeになることがあるので注意。

アトミックの実現には、読み取り時の排他ロック(cursor stability)orシングルスレッド実行

image

7.2.4 書き込みスキューとファントム 書き込みスキュー(Write Skew)は、複数のトランザクションが互いに干渉することなく読み取りと書き込みを行い、結果的にシステム全体の整合性が崩れる現象です。これは、特にSerializable以外の分離レベルで発生しやすく、シリアライゼーションで防止できます。

ファントムリード(Phantom Read)は、トランザクション内で同じクエリを複数回実行した際、別のトランザクションによる行の追加や削除によって結果が変わってしまう現象です。これはSerializable分離レベルで防ぐことができ、特に複数のトランザクションが同じデータセットを操作する場合に問題になります。

yagikota commented 2 days ago

むずい😓

yagikota commented 2 days ago

https://speakerdeck.com/mixi_engineers/2023-database-training-01

よくまとまってる