「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典イメージぴよ画像「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

ダーティリード

pointこの用語のポイント

point変更途中のデータが他の人に見えちゃう現象だよ

pointトランザクション処理の話で出てくるよ

スポンサーリンク

簡単に書くよ

ダーティリード(英:dirty read)とは

「ここから ここまでワンセット」な処理(トランザクション処理)の話で出てくる「そうなったらマズいよね」な現象のひとつ
であり

まだ変更している途中だから変更された内容が他の人に見えちゃダメなのに見えちゃう現象のこと
です。


image piyo

詳しく書くよ

順番に見ていきましょう。
まずは予備知識として

データベース
トランザクション
コミット
ロールバック


について説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。

データベースは「データを入れておく箱」です。
突っ込んで考えると混乱するかもしれません。
何となくのフィーリングで理解してください。

ダーティリード

トランザクションは「ここから ここまでワンセット」な処理単位です。

例えば、そうですね。
ピヨ太君がピヨピヨカンパニーに出社するとしましょう。

ダーティリード2

ピヨ太君はピヨピヨカンパニービルに到着すると

1.私服からスーツに着替える
2.タイムカードを押す
3.コーヒーを飲みながらケーキを食べる


の3つの行動をします。
この3つが、ピヨ太君が出社した状態になるためにやる作業です。
いわば、ピヨ太君の「出社作業」ですね。

ダーティリード3

出社作業が終わったら、ピヨ太君はピヨ太ママに「ピヨ太です。出社しました」と連絡を入れます。
これでピヨ太君は出社した状態になります。

ダーティリード4

繰り返しになりますが、ピヨ太君の出社作業は

1.私服からスーツに着替える
2.タイムカードを押す
3.コーヒーを飲みながらケーキを食べる


の3つです。

この3つの行動は、どれか1つでも欠けてはダメです。
すべての行動を一連の流れでやる必要があります。

ダーティリード5

このような

「ここから ここまでワンセット」な処理単位

がトランザクションです。
小難しい言い方をすると「分割不可な一連の処理」です。

ダーティリード6

コミットは「トランザクション処理の結果を確定させる処理」です。

ダーティリード7

先ほどのピヨ太君の話を思い出してください。
出社作業をやっている最中は、ピヨ太君の状態は「出社中」です。
対外的には、出社したことに なっていません。

ダーティリード8

ピヨ太君はピヨ太ママに「出社しました」と連絡を入れました。
これでピヨ太君は、対外的にも「出社済み」になります。

ダーティリード9

ピヨ太ママに連絡を入れる作業がコミットに相当します。

ダーティリード10

トランザクション処理は「ここから ここまでワンセット」な処理です。
当たり前ですが、やっている最中は やりかけです。
対外的には、やったことに なっていません。

コミットすることによって、対外的にも やったことになります。
トランザクション処理の結果が本体に反映されます。

一連の「ここから ここまでワンセット」な処理が終わり「やるべきことは やり終わったから、やり終わったことにするよ!」と対外的に宣言するのがコミットです。

ロールバックは「やりかけのトランザクション処理を取り消して何もしなかった状態に戻すこと」です。

ダーティリード11

先ほどのピヨ太君の例を思い出してください。

ピヨ太君の出社作業は

1.私服からスーツに着替える
2.タイムカードを押す
3.コーヒーを飲みながらケーキを食べる


の3つでした。
これが終わってピヨ太ママに「出社しました」と連絡を入れると出社済みになります。

ピヨ太君は毎日 順調に出社作業をしていました。

ところが、ある日のことです。

ピヨ太君のタイムカードが見当たりませんでした。
これではタイムカードが押せません。

ダーティリード12

ふて腐れたピヨ太君は、私服に着替えて帰ってしまいました。
出社作業を取り消して、ピヨピヨカンパニービルに来る前の状態に戻ってしまったわけです。

ダーティリード13

このような

やりかけの「ここから ここまでワンセット」な処理を取り消して、やらなかった状態に戻す

のがロールバックです。

ダーティリード14

処理というのは、いつでも上手くいくとは限りません。

トランザクション処理も同じです。
やっている最中で何らかの理由により失敗することがあります。

処理が失敗するのは仕方ありません。
ですが、やりかけの状態で止まってしまうのは、とても中途半端です。

そこで、やりかけの処理結果を捨てて、やる前の状態に戻します。
「中途半端な状態で残るくらいなら何も残ってない方がマシだ!」の心意気です。
この「やりかけの処理結果を捨てて、やる前の状態に戻す」作業がロールバックです。

以上を踏まえて

トランザクション処理において、まだ変更途中だから他の人に(どんな変更をしたか)見えちゃダメなのに、見えちゃう現象

が「ダーティリード」です。
ダーティリードはコミット・ロールバック前の変更内容が他の人にも見えちゃう現象です。

ダーティリード15

例えば、そうですね。

ここに「ピヨ太君の今日のおやつデータベース」(以下、データベースと表現します)が ありました。
データベースには「ケーキ」と書かれたデータが入っています。

ダーティリード16

おやつの時間が近付くと、ピヨ太ママがデータベース(の中にあるデータ)を見に来ます。
そして、データベースに書いてある内容のおやつを用意してくれます。

ダーティリード17

ある日のことです。
ピヨ太君が「今日はミカンの気分だな」と思いました。

ダーティリード18

そこでデータベースの中身を「ケーキ」から「ミカン」に書き換えました……が変更内容を確定する(コミットする)前に「やっぱり苺が良いかな」と思い直しました。

ダーティリード19

そこでピヨ太君は「ケーキ」から「ミカン」への変更を取り消しました。
ロールバックしたのです。

ダーティリード20

その後で「ケーキ」から「苺」に書き換えました。

ダーティリード21

最後にコミットして、変更内容を確定させました。

ダーティリード22

よし!これで今日のおやつは苺だ!
そう思ったピヨ太君でしたが、出てきたおやつはミカンでした。

ダーティリード23

タイミング悪く、ピヨ太君が「ケーキ」から「ミカン」に書き換えたタイミングでピヨ太ママがデータベースを見に来ていたのです。

ダーティリード24

今回の例において、確かにデータは

「ケーキ」→「ミカン」→「ケーキ」→「苺」

と変わりました。

ダーティリード25

ですが、トランザクション処理において変更内容が確定されるのはコミットとかロールバックしたタイミングです。
よって、対外的には

「ケーキ」→(ロールバックしたときに変更内容が確定されて)「ケーキ」→(コミットしたときに変更内容が確定されて)「苺」

と変わった扱いです。

ダーティリード26

おやおや、取り消したから対外的には なかったことになっているはずの「ミカン」というデータがピヨ太ママに見えちゃっていましたね。

ダーティリード27

このような現象がダーティリードです。

変更途中(コミット・ロールバック前)だから他の人に見えちゃダメなのに見えちゃう現象

です。

変更途中のデータは未確定です。
取り消されるかもしれませんし、別の内容に変更される可能性もあります。
それが他の人に見えちゃったら困りますよね。
そんな困ったちゃんな現象です。


image piyo2

一言でまとめるよ

まぁ「ダーティリード」って単語が出てきたら「変更途中(だから他の人に変更した内容が見えちゃダメ)なのに他の人に見えちゃう現象なんだな~」と お考えください。

一番上に戻るよ
スポンサーリンク
書籍画像029
書籍画像013

おまけ

■訳してみるよ

「dirty(ダーティ)」の意味は「汚い」とかです。
「read(リード)」の意味は「読む」とか「読み出す」とか「読み取る」とかです。
何となく くっつけると

汚い読み取り

となります。




書籍画像
わわわ説明術コラム
宣伝だよ
エンジニア育成現場の「失敗」集めてみた。 42の失敗事例で学ぶマネジメントのうまい進めかた
「分かった!」と思わせる説明の技術 知識ゼロの相手にも伝わるようになる本【Audible】
エンジニアのための生成AI入門 はじめての生成AIアプリ開発からエージェント開発まで