キャッシュ問題
キャッシュはその使われ方で、適した設計やパラメータ設定が異なる。
万能のキャッシュ実装はない。
変化しないデータと変化するデータがある。
キャッシュは、キャッシュとして保持された時点のスナップショットであり、最新ではない。
このため、真のデータと必ずしも一致しない。
真のデータの変化を知るには、ポーリングかイベントドリブンにするしかない。それでも受信までの遅延がある。
キャッシュの中からの検索も検索アルゴリズムとしての速度問題がある。
せっかくキャッシュしてもそのキャッシュの中から探すのに時間がかかるのでは無意味になってしまう。
キャッシュを適度に捨てて行かないと以下のような問題がある。
オリジナルは更新済みなのに、古いデータのままになる。
使われないデータがいつまでも存在する。
キャッシュで使われる記憶容量が増えていく。(メモリリーク状態になる)
キャッシュの容量を制限すると、以下のような問題がある。
キャッシュがあふれるような更新がかかるとキャッシュが無意味になってしまう。
キャッシュが無意味になりがちな2つの要因
大量データの繰り返し読み込み
同じ繰り返しなのに、キャッシュのデータが毎回新しく書き換わってしまい、キャッシュの意味がなくなる。
これに耐えるのがループ耐性
大量の繰り返し参照
一見キャッシュにはよさそうに見えるが
参照パターンがランダムで大量になると、どのデータを残すべきなのかが分からなくなる。
特定のデータに偏ったり、時間によって偏り方が変わることがある。
これに耐えるのがスキャン耐性
Keyword: キャッシュ不整合