データベース以外の操作にキャッシュを実装することは理にかなっていますか? 長いコードブロックの評価のためにそれを実装することは理にかなっていますか? たとえば、パラメーターを受け取るコード ブロックがあります。このパラメーターに基づいて、正しい値に一致するまで if/else ブロックの長いリストを調べて、値を返します。私の場合、IN パラメータは有限であり、OUT パラメータは IN パラメータに基づいて一貫しています。つまり、すべての 'A' の戻り値は 'B' であり、すべての 'X' の戻り値は 'Z' です。この種の操作には、DB レコードは含まれません。キャッシングを導入することで、長期的に評価からいつでも削減できるのではないかと思っています。提案?ありがとう。
2 に答える
実行されたコードが長いか複雑である限り、努力を正当化するのに十分なほど、これは完全に理にかなっています。たとえば、Java メソッド レベルで動作するhttp://static.springsource.org/spring/docs/3.1.0.M1/spring-framework-reference/html/cache.htmlにある Spring のキャッシング アノテーション サポートを参照してください。ただし、Spring 以外の環境では、このようなアプローチを自分で簡単に実装できます。
最初にアプリケーションをプロファイリングして、影響を受けるコード ブロックでどれだけの時間/CPU が費やされているかを確認し、キャッシュがここで意味があるかどうかを確認する必要があります。
低レイテンシをどのように評価するかによって異なります。この Google のプレゼンテーション(スライド #13) によると、メイン メモリからの 1 MB のシーケンシャル リードのコストは約 0.25 ミリ秒で、他にももっとコストのかかるものがたくさんあります。同じスライドから:
- 1 回のディスク シークは 40 倍遅くなります。
- ネットワークから 1 MB のデータを読み取るのは 40 倍遅くなります。
- ディスクから 1 MB のデータを読み取るのは 120 倍遅い
したがって、キャッシングは特定の状況で非常に役立ちますが、分析を行い、アルゴリズムが浪費している時間を確認してから決定する必要があります。