昼間のメモ

お仕事をしているときに、あっ!と思いついたことはすぐに忘れてしまいますので、とにかく残すためのメモです。

キャッシュについて

2005-11-09 22:32:00 | Weblog
SOAとは何かを考える from JavaOne@arclamp.jp

リソースAとリソースBがあり、リソースAはリソースBより100倍速いとする。たとえば、リソースAがメモリ、リソースBがハードディスク。

アプリケーションが設定ファイルを見て、動作を切り替えるとする。たとえば、デバッグ情報のON/OFF、ログファイルパス等々。 ここで、リソースBに用意されている設定ファイルを毎回READしたらどうなるか? 1回だけデバッグ情報を参照するだけなら大したことはないが、毎件づつ処理するたびに設定ファイルのデバッグ情報をREADしていたら、本来の仕事よりオーバーヘッドがかかることになる。

そこで、一度リソースAであるメモリに読み込み、あとはメモリの設定を呼んで分岐する。

ここまではなんとも当たり前の話かもしれない。

さて、ここでリソースAとリソースBがどちらも同じ速度で動作するようになったらどうだろう。 つまりリソースBに設定ファイルがあるが、毎回これをREADしても全然遅くならないということになる。

つまりキャッシュ管理をリソースAを使って実装してもまったくの無意味となる。 確かに新規のプログラムは楽になるかもしれない。しかし、既存のプログラムはどうしようか・・・。せっかく小細工して10%パフォーマンスアップしたが、メンテナンスコストは50%悪化みたいなことをしていたら、もう存在する価値がなくなる。

こんなときにDIで取り替えることができたら・・・。今までキャッシュしていたけど、DIコンテナの設定1つでキャッシュなしにできる。そんな設計になっていないと意味がないわな。

つまり、アプリケーション層で一生懸命キャッシュ管理していて、DIでDBアクセサを切り替えられるようになっていたとしても、DBアクセサなんて10年 間取り替える必要もなかったのに、キャッシュなしにしたいと思ったら、全部アプリケーションを作り直しだったみたいなことになりそうです・・・。

なんでこんなことを書いたかというと、ローカルとネットワークは厳密に区別していた。私なんかはDOS世代なので、ローカルがデフォルトで、必要なときだ けネットワークにつなげるみたいな感覚がまだまだ残っている(これでもADSLを引いてから常時接続にはなっていますが・・・)。

近い将来、ローカルでもネットワークでもパフォーマンスが変わらなくなったらどうなるだろうか。その時代に新規開発したものは良いのだが、今あるものはや はりネットワークは遅いからローカルでキャッシュしてみたいな発想をあちこちでしているのではないだろうか。それは簡単に取り外すことができるのだろう か・・・。

キーワード
設定ファイル アプリケーション層 オーバーヘッド ログファイル ON/OFF
コメント (0) |  トラックバック (0) |  この記事についてブログを書く
Messenger この記事をはてなブックマークに追加 mixiチェック シェア
« 祝)gooブログ開設 | トップ | 運用に入ってから... »

コメント

コメントはありません。

コメントを投稿

 ※ 
コメント利用規約に同意の上コメント投稿を行ってください。
※文字化け等の原因になりますので、顔文字の利用はお控えください。
下記数字4桁を入力し、投稿ボタンを押してください。この数字を読み取っていただくことで自動化されたプログラムによる投稿でないことを確認させていただいております。
数字4桁

トラックバック

この記事のトラックバック  Ping-URL

あわせて読む