回答編
ファントムリードはデータベース用語ね。トランザクションの分離レベルが低い場合、同一検索条件にもかかわらずデータが増えたり消えたりする現象。
トランザクション……? 分離レベル……?
あるファイルを複数人で編集しようとすると『読み取り専用につき書き込み不可』って出ることあるでしょ? あれと同じでデータベースは情報の整合性を保つため、アクセス中のデータをロックしてしまうの。このロックをどれだけ厳密に行うかが分離レベルの調整。
うーん……? ロックの強さってことですか?
強さじゃなくて厳密さね。で、トランザクションはデータベースに対する一連の処理のこと。たとえばAさんの口座から十万円引き落としてBさん口座に入金するとか。この処理をやっている最中に他の振り込みが行われるとわやくちゃになるでしょ? だから作業中はきっちりデータをロックして他からアクセスできなくする。
ああ、それなら分かります。古い口座情報をもとに金額計算したらやばいですもんね。二重取りされたり以前の入金情報が消えてたりして……。
そうそう。でね、厳密にロックといったら振り込み処理が終わるまで何もできないわけだけど、ここで残高くらい照会したいってニーズがあったとする。処理が並行してデータ破損するのはまずいけど、引き落としと入金の間の口座情報が見えてしまうのはOKってケース。そういう場合に分離レベルを落とすと書き込み不可のまま読み取りだけできるようになるのよ。
なるほど……ロック適用の条件をゆるめる……ああつまり厳密さってわけですか。
そう、分離レベルを調整したわけね。ただまぁ処理中のデータを操作できるようになるわけだから色々と妙なことも起こる。その一つがファントムリード。今回のお題。
readが読み取りだから……ファントム……幻を読み取る?
たとえば同一トランザクションの中で二回データを読み取る処理があるとするわよ。学校の学籍簿データベースとかを例にするなら『学生数』を読み込むなどね。で、一回目の処理のあと別トランザクションが編入生の追加を行っちゃったとする。すると二回目の読み取りはどうなる?
学生数が増えていますね。
そう、不整合が起きる。これがファントムリード。単純に人数を読み取るだけなら問題ないけど、読み込んだ人数をベースに何か計算したり別レコードを編集してたらまずいわよね。だからそこまでトランザクションの独立性を求めるなら分離レベルを最強(SERIALIZABLE)にしておくべき。まぁ全ての処理が並列不可になるからサーバのパフォーマンスはダウンするけどね。
なるほど……
(分かったような分からないような)
まぁまとめると私の部下は『幻の読み取り』を《亡霊先駆》って読み替えちゃう英語力の持ち主ってわけよ。
ぐっ!! 蒸し返しますね……。
分かりました、readのスペリングで格好よい二つ名考えればいいんでしょ! 待っててください(タッタッタッと走っていく)
おー、速い速い。
ぜぇ、はぁ、お待たせしました! どうですかこのネーミング、ファントムリード……《朧なる読み手》、完璧! まさに中二! いかがですか!
……読み手ならreaderじゃない?
しまったぁあああああああ!
【解説】
ファントムリード:
データベース用語。トランザクションの分離レベルが低い場合、同一検索条件にもかかわらずデータが増えたり消えたりする現象。分離レベルによって他にダーティーリード、ファジーリードという現象が起こる。
この連載の記事
-
最終回
トピックス
IT業界の夢とロマンが詰まった、最終回なIT用語! -
第43回
トピックス
業界人は軍事用語好き? やっぱり中二病なんですかね、なIT用語 -
第42回
トピックス
サッカー漫画で何を思い浮かべるかで世代が分かるIT用語 -
第41回
トピックス
いくぜっ、バーストモード! 動作クロック30倍! なIT用語 -
第40回
トピックス
前世の記憶は信じなくても、過去のミスは忘れない室見さん、なIT用語 -
第39回
トピックス
もう一人の自分を解き放て! 対比で分かる中二病的IT用語 -
第38回
トピックス
生命を刈り取る「不死の軍団」みたいなIT用語 -
第37回
トピックス
MK2、透明で発展系のMK2……なIT用語 -
第36回
トピックス
お金がかかるをキーワードにいろいろな話題が広がったIT用語 -
第35回
トピックス
理化学とミリタリーへの憧れが中二病につながるかもしれないIT用語 -
第34回
トピックス
超兵器とリンク、しているようで実はただ乗りしてるだけのようなIT用語 - この連載の一覧へ