
目次
ダーティリード
ダーティリードとは
トランザクション処理中の未確定データが他のトランザクションから読み取られてしまう現象。
ダーティリードのわかりやすい事例
1. 在庫管理システム
ある在庫管理システムで、トランザクションAが在庫数を更新しようとしている最中に、トランザクションBがその未確定の在庫数を読み取ってしまう場合があります。
例えば、トランザクションAが在庫を30個減らす処理を行っている途中で、トランザクションBがその在庫数を読み取り、さらに20個減らす処理を行うとします。
その後、トランザクションAがエラーでロールバックされると、実際の在庫数は元のままですが、トランザクションBは誤った在庫数を基に処理を行ってしまいます。
2. 銀行の口座管理
銀行の口座管理システムで、トランザクションAが口座残高を更新している最中に、トランザクションBがその未確定の残高を読み取る場合があります。
例えば、トランザクションAが口座から1000円を引き出す処理を行っている途中で、トランザクションBがその残高を読み取り、さらに500円を引き出す処理を行うとします。
その後、トランザクションAがエラーでロールバックされると、実際の残高は元のままですが、トランザクションBは誤った残高を基に処理を行ってしまいます。
※これらの事例は、ダーティリードがデータの整合性にどのような影響を与えるかを示しています。
CHATGPT参照
会話で学ぼ
基礎知識編
データベースで行われる一連の操作のことだよ。
例えば、銀行の口座にお金を振り込むとき、
その操作が全部完了するか、
全部キャンセルされるかのどちらかになるよ。
あるトランザクションがまだ完了していないデータを、
別のトランザクションが読み取ってしまうことなんだ。
例えば、あなたがデータを更新している最中に、
わたしがそのデータを読み取ってしまうと、
あなたの更新が完了する前の不完全なデータを
わたしが使ってしまうことになるんだ。
例えば、銀行のシステムでダーティリードが起きると、
正確な残高がわからなくなってしまうことがあるんだ。
どうやって防ぐの?
トランザクションの分離レベルを上げる必要があるよ。
例えば、「リピータブルリード」や
「シリアライザブル」っていう分離レベルを使うと、
他のトランザクションが未完了のデータを読み取ることができなくなるよ。
SNSで発信
X(元Twitter)
YouTubeショート
未投稿
スタンドエフエム
【デジナンばあばチャンネル】
ばあばと、もに隊長のおもしろトークだよ(笑)
https://stand.fm/episodes/66ff1f9667c162daed4eba5e
インスタグラム
未投稿
tiktok
未投稿
https://www.facebook.com/share/r/FfCTVjAmAyiWxCPP/
スレッズ
あとがき
このサイトは
「デジタル難民のばあば」と「パソコンやスマホをあまり得意としない方々」が一緒になって
少しずつ、ヒントもしくは知識を共有していくサイトです。
知識を楽しく学びながら、棺桶に足を突っ込むその日まで、一緒に成長してまいりましょう。
最後まで読んでいただきありがとうございました♡