【问题标题】:Is there a big performance hit with using file_store for storing the cache as opposed to mem_cache_store?与 mem_cache_store 相比,使用 file_store 存储缓存是否会对性能造成很大影响?
【发布时间】:2010-12-19 02:43:23
【问题描述】:

我认为我不需要为我的 Rails 应用程序设置 memcached,但我想对一些事情做一些简单的缓存。

使用 file_store 作为 config.cache_store 设置是否足够?或者从服务器负载的角度来看,是否必须一遍又一遍地访问文件以获取数据?

或者我可能不是很了解 file_store 和 mem_cache_store 之间的区别......

【问题讨论】:

    标签: ruby-on-rails performance caching memcached


    【解决方案1】:

    我认为我不需要为我的 Rails 应用程序设置 memcached,但我想在一些事情上做一些简单的缓存

    然后使用您现有的数据库来存储您的缓存项目。 (您使用的是数据库,对吧?)

    memcached 只是一个快速但愚蠢的数据库。如果您不需要“快速”部分 (*),则不要引入额外的复杂性、不一致性和单独缓存层的开销。

    带有 file_store 的 memcache 是一个笨拙但速度不快的数据库,因此除了兼容性/测试之外对任何人都没有什么用处。

    (*: 实际上,大多数网站都没有。当您无法优化架构、将其非规范化以用于常见查询或进一步预先计算复杂操作时,Memcache 应该是最后的手段。这不是一般的网络应用程序应该被视为对可扩展性至关重要。)

    【讨论】:

    • 你说在哪里存储缓存的项目?只是使用 Rails file_store 选项进行缓存?
    • 数据库中的表 — MySQL、PostgreSQL、SQL Server,无论您使用什么。 (您目前没有将应用程序的数据放入文件系统中吗?如果是这样,那么这是一个严重的性能问题,您需要通过在考虑与缓存有关的任何事情之前将其移动到适当的数据库来解决。)
    • 我正在使用 MySQL。所以你是说,在性能方面,在我的数据库中的表中存储缓存数据比在文件系统中存储缓存数据(例如在 tmp/cache 中)更好。
    【解决方案2】:

    file_store 将缓存文件系统中文件中的内容。

    如果该文件系统对您的 Web 服务器是本地的,那么显然,它只会与该特定 Web 服务器相关,因此当缓存实体存在于一台服务器上而不是另一台服务器上时,您将失去缓存命中率。

    您有多少个网络服务器? 2? 10? 100?

    用于缓存的 file_store 无法正确扩展,并且会降低您在共享存储(例如 memcached 存储)上的命中率。

    使用 memcached 的目的是让 Web 服务器池可以访问单个缓存(即使它可以拆分到多个物理服务器上)。使用 file_store 不会(除非它是一个网络文件系统,而且几乎肯定会充满它自己的问题)。

    始终测量任何缓存的缓存命中率;如果您没有获得高命中率,那么通常不值得。请务必在您的监控中随时间变化趋势。

    【讨论】:

    • 现在我只有一个网络服务器,可能需要在明年的任何时候扩展到新的服务器......所以我认为文件系统的东西可能是我最好的选择运行得更快,直到我可以得到一个单独的内存缓存服务器设置。
    • 基于文件的缓存在多服务器设置中仍然可以工作,但是您拥有的服务器越多,它的命中率就会越来越低,直到它变得无用;确切的时间我无法预测。
    猜你喜欢
    • 1970-01-01
    • 2020-01-16
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 2020-04-05
    • 2021-10-22
    • 1970-01-01
    相关资源
    最近更新 更多