6

我有一个包含大量数据的网站,我正在对所有页面进行“俄罗斯娃娃”缓存,如下所示:

# articles.html.haml
- cache "list of articles", expires_in: 15.minutes do
  = render partial: "article", collection: @articles

# _article.html.haml
- cache article do
  = article.body
  = render partial: "comment", collection: article.comments

# _comment.html.haml
- cache comment do
  = comment.body

这将产生数十万个碎片。

1. /tmp/cache 目录中有这么多片段文件,这会降低性能吗?

2. rail 会自动删除过期的旧碎片吗?

PS。该站点驻留在具有 4GB 内存的单个 Ubuntu 服务器上。它没有使用 memcached 作为缓存存储,只是使用 rails 开箱即用的基于标准文件的实现。

4

2 回答 2

1

除非您托管在 Windows 服务器上,否则分布在 Rail 缓存中的多个文件夹中的 100K 文件不会对性能造成任何影响。

于 2014-02-03T04:18:16.293 回答
1

在某些时候,您将不得不问自己一个问题,缓存命中是否仍然比生成片段成本更低。如果答案是肯定的(并且可以进行基准测试),与未缓存的情况相比,这仍然可以提高性能。在物理(盘片)硬盘驱动器上存储数十万个缓存片段的情况下,我会非常警惕 I/O 瓶颈。如果这成为问题,您可以限制缓存策略的深度以减少文件数量。但是,请再次进行基准测试。命中率在这里是一个非常重要的统计数据,因为在这种特定情况下,高命中率会限制 I/O。

如果性能让您担心,还请查看片段过期的频率。在您的具体情况下,每次发表评论时,“文章列表”都会失效。您目前每 15 分钟过期一次,但如果您希望输出保持一致,实际上应该在放置或编辑评论或文章后立即过期。如果您的文章列表中每分钟有多个评论,那么您甚至可以在此处缓存单个评论是绝对正确的。如果 I/O 成为问题,您总是可以添加一些 RAM 并开始使用 memcached(或 redis,就此而言)。

但是,因为您有多层缓存,所以除了对父“文章列表”片段的命中之外,您的文件系统只有几次命中可能完全没问题。

于 2014-01-21T16:37:41.987 回答