このページの本文へ

なれる!SE 間違いだらけの?IT用語辞典(中二版)第13回

《組織》の科学力があれば何とかなりそうなIT用語

2013年04月25日 18時00分更新

  • この記事をはてなブックマークに追加
  • 本文印刷

回答編


ファントムリードはデータベース用語ね。トランザクションの分離レベルが低い場合、同一検索条件にもかかわらずデータが増えたり消えたりする現象


トランザクション……? 分離レベル……?


あるファイルを複数人で編集しようとすると『読み取り専用につき書き込み不可』って出ることあるでしょ? あれと同じでデータベースは情報の整合性を保つため、アクセス中のデータをロックしてしまうの。このロックをどれだけ厳密に行うかが分離レベルの調整。


うーん……? ロックの強さってことですか?


強さじゃなくて厳密さね。で、トランザクションはデータベースに対する一連の処理のこと。たとえばAさんの口座から十万円引き落としてBさん口座に入金するとか。この処理をやっている最中に他の振り込みが行われるとわやくちゃになるでしょ? だから作業中はきっちりデータをロックして他からアクセスできなくする。


ああ、それなら分かります。古い口座情報をもとに金額計算したらやばいですもんね。二重取りされたり以前の入金情報が消えてたりして……。


そうそう。でね、厳密にロックといったら振り込み処理が終わるまで何もできないわけだけど、ここで残高くらい照会したいってニーズがあったとする。処理が並行してデータ破損するのはまずいけど、引き落としと入金の間の口座情報が見えてしまうのはOKってケース。そういう場合に分離レベルを落とすと書き込み不可のまま読み取りだけできるようになるのよ。


なるほど……ロック適用の条件をゆるめる……ああつまり厳密さってわけですか。


そう、分離レベルを調整したわけね。ただまぁ処理中のデータを操作できるようになるわけだから色々と妙なことも起こる。その一つがファントムリード今回のお題。


readが読み取りだから……ファントム……幻を読み取る?


たとえば同一トランザクションの中で二回データを読み取る処理があるとするわよ。学校の学籍簿データベースとかを例にするなら『学生数』を読み込むなどね。で、一回目の処理のあと別トランザクションが編入生の追加を行っちゃったとする。すると二回目の読み取りはどうなる?


学生数が増えていますね。


そう、不整合が起きる。これがファントムリード。単純に人数を読み取るだけなら問題ないけど、読み込んだ人数をベースに何か計算したり別レコードを編集してたらまずいわよね。だからそこまでトランザクションの独立性を求めるなら分離レベルを最強(SERIALIZABLE)にしておくべき。まぁ全ての処理が並列不可になるからサーバのパフォーマンスはダウンするけどね。


なるほど……
(分かったような分からないような)


まぁまとめると私の部下は『幻の読み取り』を《亡霊先駆》って読み替えちゃう英語力の持ち主ってわけよ。


ぐっ!! 蒸し返しますね……。
分かりました、readのスペリングで格好よい二つ名考えればいいんでしょ! 待っててください(タッタッタッと走っていく)


おー、速い速い。


ぜぇ、はぁ、お待たせしました! どうですかこのネーミング、ファントムリード……《朧なる読み手》、完璧! まさに中二! いかがですか!


……読み手ならreaderじゃない?


しまったぁあああああああ!


【解説】

ファントムリード
データベース用語。トランザクションの分離レベルが低い場合、同一検索条件にもかかわらずデータが増えたり消えたりする現象。分離レベルによって他にダーティーリード、ファジーリードという現象が起こる。

この連載の記事

注目ニュース

ASCII倶楽部

最新記事

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン