ネガティブキャッシュ
2008-11-19 07:53
システムの世界で「キャッシュ」とは一時的にデータを蓄えておくことです。ブラウザのキャッシュは身近な例です。
システム開発者であれば更新頻度が少なく、且つ使用頻度の多いマスタデータや設定情報をキャッシュするのはよくあることで、 開発したシステムのパフォーマンスを上げるためのテクニックとして多用されています。
DNSサーバに関して学んだ際に、「ネガティブキャッシュ」を知ったときには感心した記憶があります。
DNSサーバの「キャッシュ」とは、一般的な考えと同様に「○○の結果はXXだ」という情報を一旦保持しておくものですが、
「ネガティブキャッシュ」とは「○○の結果は無かった」という情報を保持しておくものです。
具体的に説明しますと、そもそもDNSサーバはブラウザに入力された文字列をIPアドレスに変換する作業を担ったサーバですが、
仮に間違ったURLが入力された場合、DNSサーバはIPアドレスに変換できません。
その場合、ブラウザには「このページは表示できません」といったような内容が表示されます。
しかしそうなるとユーザーは概して何度もやり直しをするものであり、
これが繰り返されるとDNSサーバに余計な負荷がかかります。
その負荷を防ぐ為に一度失敗した内容は、しばらくはキャッシュしておくのがネガティブキャッシュです。
これはある意味、逆転の発想だと思って感心したわけです。
正しい結果だけではなく、データが無かった(取得に失敗した)という結果をキャッシュしておく発想は、
私はなかなか思いつきにくいものでした。
そんな小さな感心をした際に、今後非常に検索に時間のかかるオンラインシステムを開発する機会があり
検索結果をキャッシュしておく仕様になったとしたら、
その時は検索の結果でヒットしなかったという情報もキャッシュしてみようなんて思ってました。
※結局そのようなシステムを開発する機会はありませんでした。残念。
余談ですが、このネガティブキャッシュの考え方を実生活のどこかで適用できないかなとアレコレ考えた事があったのですが、 その一つが電話帳でした。
仮にDNSサーバを電話帳に例えると、下表の山田太郎の情報はキャッシュで山田次郎の情報はネガティブキャッシュになるというわけですな。 (まぁ現実的には有り得ない話です。。。)
| 名前 | 電話番号 |
|---|---|
| 山田太郎 | 03-5789-xxxx |
| 山田次郎 | 電話は引いていません |
Posted by T.S
