質問は 2 つの記事に基づいています:
- Basecamp Next by DHH from 37signals
- Advanced Caching in Rails by Adam Hawkins
ロシアの人形のキャッシュを使用することのパフォーマンスへの影響について、私は少し混乱しています。具体的には:
自動期限切れキーを使用すると、すべてのリクエストがデータベースにアクセスしてオブジェクトのタイムスタンプを取得するように見えます - 何か不足していますか? (最良のシナリオでは、階層の最上位のキーに対してのみそれを行う必要があることを理解していますが、それでも...)
最初の記事では、todo リストとすべての todo アイテムをキャッシュしています。リストをキャッシュすることは、多くの作業 (すべてのアイテムの DB クエリ) を節約できるため、非常に理にかなっています。しかし、なぜ個々のアイテムをキャッシュするのでしょうか? アイテムのタイムスタンプを取得するために既にデータベースにアクセスしていますが、正確には何を保存しているのでしょうか? いくつかの html 行を生成していますか?
2 番目の記事で、Adam は次のようにビューのチャンクをキャッシュします:
cache [post, 'main-content']
...cache [post, 'comments']
コメントが追加されると、投稿のタイム スタンプが変更されるため、両方の全体が無効になります。ただし、main-content
変更されていません-再生成したくありません!!! コメントのみを無効にするにはどうすればよいでしょうか。(これは実際には非常に一般的なユーザー ケースです。オブジェクト自体、さまざまな関連付け、他のストア内のデータなど、論理的に独立したいくつかの部分を持つモデルです。)
ロシア人形のキャッシングは、ネストされたオブジェクトの階層が深い場合にのみ意味があるように思えます (basecamp では、プロジェクト -> todos リスト -> todo -> items リストがあります)。ただし、階層が浅い場合は、無効化を自分で行う方がよいでしょう。
フィードバックをいただければ幸いです。
ありがとう。