Write Skewとは?
Write Skewは、分散トランザクションの一貫性モデルにおいて発生する問題の一つです。これは、複数のトランザクションが独立して検証を行い、その結果が一致していないにもかかわらず、最終的に同じデータに対して矛盾した書き込みを行うことで発生します。Write Skewは、特に「Serializable」よりも弱い一貫性レベル(例えばSnapshot IsolationやRead Committed)で見られる現象。
例でいうと
- 医師Aがシフトを確認します。医師Bはまだシフトに入っていません。
- 医師Bも同じくシフトを確認します。医師Aはまだシフトに入っていません。
- それぞれの医師が「もう一人がシフトに入っていないので自分がシフトに入る」と判断して、最終的に2人ともシフトに入ることになります。
Read Skewとは?
Read Skewは、分散システムやデータベースの一貫性において、トランザクションが古いまたは不整合なデータを読むことで発生する問題です。特に、Snapshot Isolationのような分離レベルでは、トランザクションがコミットされた時点よりも古いスナップショットを読み込むことがある
例)
- トランザクションAがユーザーXの口座残高を確認します。この時点で残高は¥100,000です。
- トランザクションBが並行して動作しており、ユーザーXの口座から¥50,000を引き出す操作を行い、これがコミットされます。
- トランザクションAが最初のスナップショットを基に、残高が¥100,000だと判断して別の操作を行いますが、実際には既に¥50,000に減っています。
ここでは、トランザクションAが古いスナップショットのデータを使用して不整合な操作を行ってしまうというRead Skewの例が発生しています。