ノンリピータブルリード
2回目の読み取り時に1回目と内容が変わっちゃっているよ
データを更新すると発生するかもしれない現象だよ
トランザクション処理の話で出てくるよ
簡単に書くよ
ノンリピータブルリード(英:non-repeatable read)とは
「ここから ここまでワンセット」な処理(トランザクション処理)の話で出てくる「そうなったら、ちょっと困るかもなぁ」な現象のひとつ
であり
例えば「1回目に読み込んだときは『ピヨ太』だったのに2回目に読み込んだら『ピヨ子』になっていた」のように、同じデータを2回読み込んだときに1回目と2回目で(1回目読み込んでから2回目読み込むまでの間に他の人が変更しちゃったから)違う内容が返ってくる現象のこと
です。
詳しく書くよ
順番に見ていきましょう。
まずは予備知識として
・データベース
・レコード
・トランザクション
について説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。
データベースは「データを入れておく箱」です。
突っ込んで考えると混乱するかもしれません。
何となくのフィーリングで理解してください。
レコードは行列で表現される表の「行」です。
ただし、今回は「データベースに入っているデータ(行)」と解釈してください。
データベース(の中にあるデータ)は表形式のイメージで表現されるのが一般的です。
例えば以下のような形です。
| 名前 | 性別 | 年齢 |
|---|---|---|
| ピヨ太 | 男 | 成人済み |
| ピヨ子 | 女 | 永遠の17歳 |
| ピヨ太ママ | 女 | 心は乙女 |
この表には、ピヨ太君、ピヨ子さん、ピヨ太ママの3人分のデータが入っています。
名前と性別と年齢のセットで1行です。
この表におけるそれぞれの行、名前と性別と年齢のセットがレコードです。
さて、ここで考えてみてください。
1行には1人分のデータが入っています。
1行で1件のデータです。
そのため、データベース(のテーブル)にしまったデータそのものを指して「レコード」と表現する場合も あります。
例えば、データベース(のテーブル)にデータを入れることを指して「レコードを作る」と言ったりします。
あるいは「2件以上のデータ」を意図して「複数レコード」と表現する場合も あります。
基本的には「行」の意味ですけどね。
「データ1件」を意図する場合もあるのです。
一応、頭の片隅にでも置いておいてあげてください。

トランザクションは「ここから ここまでワンセット」な処理単位です。
例えば、そうですね。
ピヨ太君がピヨピヨカンパニーに出社するとしましょう。

ピヨ太君はピヨピヨカンパニービルに到着すると
1.私服からスーツに着替える
2.タイムカードを押す
3.コーヒーを飲みながらケーキを食べる
の3つの行動をします。
この3つが、ピヨ太君が出社した状態になるためにやる作業です。
いわば、ピヨ太君の「出社作業」ですね。

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

繰り返しになりますが、ピヨ太君の出社作業は
1.私服からスーツに着替える
2.タイムカードを押す
3.コーヒーを飲みながらケーキを食べる
の3つです。
この3つの行動は、どれか1つでも欠けてはダメです。
すべての行動を一連の流れでやる必要があります。

このような
「ここから ここまでワンセット」な処理単位
がトランザクションです。
小難しい言い方をすると「分割不可な一連の処理」です。

以上を踏まえて
トランザクション処理の話で出てくる用語で、同じレコードを読み込んだのに1回目と2回目で違う内容が返ってくる現象
が「ノンリピータブルリード」です。
「ファジーリード」とも呼ばれます。

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

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

ある日のことです。
ピヨ太ママが今日のおやつを準備するためにデータベースを見ました。
データベースには「ケーキ」と書いてあります。

ピヨ太ママは早速ケーキを作り始めました。

ピヨ太ママがケーキを作っている間にピヨ太君が来て「ケーキ」から「ミカン」に書き換えました。
ピヨ太君は「今日はミカンの気分だな」と思ったのです。

ピヨ太ママが作っていたケーキが完成しました。
ピヨ太ママは何気に完璧主義者です。
念のために、もう一度データベースを確認しました。

なんと!
データベースに書かれている内容は「ミカン」でした。
なんてこったーい。

このような現象がノンリピータブルリードです。
同じレコードを読み込んだのに1回目と2回目で内容が変わっている現象
です。
一言でまとめるよ
まぁ「ノンリピータブルリード」って単語が出てきたら「2回目の読み取り時に1回目と内容が変わっちゃっている現象なんだな~」と お考えください。
おまけ
■訳してみるよ
「non(ノン)」は否定を意味します。
「repeatable(リピータブル)」の意味は「繰り返し可能な」とかです。
「read(リード)」の意味は「読む」とか「読み出す」とか「読み取る」とかです。
何となく くっつけると
繰り返し可能ではない読み取り
となります。






