粒度ってなんですか?

最近は何故か少なくなったけど、言葉が通じないことがよくあった。
気がつかないうちに業界言葉を多用しているとこういう??に見舞われることになる。
例えば、「オーベーヘッド」という単語を使うと、「何が頭の上?」とか
まぁ、確かに飛行機の上のモノ入れは

over head compartment

ですけどね。

最近こういうことが少なくなったのは、私が丸くなったのか、後退したのか。
前者だと信じたいけど、こればっかりは分からない。

で、粒度(ことえりでは一発で変換された。驚き。MS-IMEでも一発だ。驚き)

キャッシュのはなしで必ずと言って出てくるこの単語。
(まぁ、それをいえば、この「キャッシュ」という単語も??でしょうけど
現金じゃなくて、ね。現金はcashで、キャッシュはcache)


キャッシュといえば、ライトバック(WriteBack)やらライトスルー(Write Through)
コヒーレンシー(coherency)とかいろいろと意味不明な単語が行き交う世界な訳ですが。

その中で、「粒度」(念のため。よみは「りゅうど」キーボードを作っている新潟の会社ではなくて。)
元の単語はgranularityで、これに訳を当てたのが粒度、なんでしょうけど

ちなみに、WikiPediaではこう書いてあるけど、微妙にあってないような...
粒度 - Wikipedia

この場合、キャッシュに「格納する大きさ(単位)」という表現がぴったりくるのかなぁ?

何も考えなければ、大きければ大きいほどいいんじゃないのか?ということになる
んだろうけど、残念ながらそうではない。
大きければ大きいほど、参照した時のペナルティ(これも業界用語ですな)も大きい
可能性がある。


極端な例
キャッシュのサイズが1MByteの場合


例)
1.あるクエリ-Aの結果の500KByte。これをキャッシュする
2.別のクエリ-A'の結果は600KByte。これは格納できない(Aをキャッシュしている前提で)


しかし、AとA'はきわめて似ているクエリなので結果のほとんどは重複している。
この場合、若干粒度を小さくして(落として)共通部分をキャッシュするようにすれば、効率は上がる

まぁ、現実にはそう簡単にはいかないんですけどね。

かといって、細かすぎると今度隙間が多くなって、キャッシュに入りきらない可能性も出てくる。
もちろん、上書きが頻繁に起きて、キャッシュのヒット率も下がるだろうし。

DBのスキーマ設計が職人芸であるように、キャッシュの粒度設定も結構職人芸の世界
なんじゃないかと思う今日この頃。

この辺りはコモディティ化し辛い気がする。
GAEやAmazonEC2があるお陰で簡単に?スケールするかのように語られているけど、
実際のところはそうではないですよね。
(まぁ、ある程度までは簡単にスケールするとは思いますけどね。それ以上は
そう簡単ではないですよね。恐らく。)

結局のところ、コンピュータサイエンスの出番は減るどころか、ますます増えている
んだなぁ、と思う今日この頃です。
とはいえ、この辺りはまだまだ手探りの部分なんでしょうけど。

そういえば、一般的なスケールアウトの概念として階層化ってのがあるけど、
キャッシュの階層化ってのはWeb業界では聞いたことがないような?私が知らないだけですか?
(階層化に向いていないデータセットということなんでしょうか?)

記憶媒体の観点で見ると見事に階層化が行われているのだけど
CPU(レジスタ)<=>CPUキャッシュ(1次)<=>CPUキャッシュ(2次)<=>CPUキャッシュ(3次)<=>メモリ<=>Diskバッファ<=>Disk

ps)
Web界隈ではLBの階層化という手法もごく一部のサイトでは使用されている模様