【问题标题】:Which is faster/better for caching, File System or Memcached?对于缓存、文件系统或 Memcached,哪个更快/更好?
【发布时间】:2011-03-10 01:13:15
【问题描述】:

我认为我还不清楚,从文件或 memcached 中读取内容是否更快?为什么?

【问题讨论】:

  • 您将不得不更具体,您的数据集和访问模式是什么,这是本地 memchaced 服务器还是分布式服务器?网络访问成本是多少?您存储的信息有多大?你在运行什么磁盘?
  • 这类问题更适合superuser.com
  • 我不太了解细节,我猜是基本术语:简单的设置、简单的应用程序、1 个内存缓存服务器、100 个文件......

标签: performance caching filesystems memcached


【解决方案1】:

Memcached 速度更快,但内存有限。硬盘很大,但与内存相比,I/O 很慢。你应该把最热门的东西放到memcached所有其他的可以去缓存文件
(或者像these guys一样,投入一些钱来增加内存:)

有关一些基准,请参阅:Cache Performance Comparison (File, Memcached, Query Cache, APC)

理论上:

Read 1 MB sequentially from memory       250,000 ns
Disk seek                             10,000,000 ns

http://www.cs.cornell.edu/projects/ladis2009/talks/dean-keynote-ladis2009.pdf

【讨论】:

  • 您链接的基准测试显示与您的陈述完全相反 - Memcached 比从本地磁盘读取要慢。你能澄清这些差异吗?
  • 在我的具有快速 SSD 的系统上,文件缓存比 memcached 快,但比内存存储稍慢。使用文件存储时,磁盘速度将是一个因素。与 HDD 相比,SSD 非常擅长以极快的寻道时间访问大量小文件。
【解决方案2】:

有很多不同的方面可能有利于其中一个:

  • 您是否需要/想要在多个服务器之间共享此数据?文件系统是本地的,memcached 是通过网络访问的。
  • 您缓存的项目有多大?文件系统可能更适合大型对象。
  • 每页可能有多少个 memcached 请求?与本地计算机上的简单文件系统 stat() 相比,TCP 连接和拆除可能需要更多时间。

我建议您查看您的用例并对这两种方法进行一些分析。如果您可以摆脱使用文件系统,那么我会的。添加 memcached 会增加另一层复杂性和潜在故障点(memcached 客户端/服务器)。

其他 cmets 关于磁盘与内存性能的价值可能只是学术性的,好像文件系统数据被定期访问,那么它很可能无论如何都位于操作系统或磁盘缓存内存中。

【讨论】:

    【解决方案3】:

    “更快”不能在没有上下文的情况下使用。 例如,由于网络延迟,访问远程服务器上 memcached 中的数据可能会“更慢”。另一方面,通过 10Gb 网络从远程服务器内存读取数据可能比从本地磁盘读取相同数据“更快”。

    在文件系统上缓存和使用 memcached 的主要区别在于 memcached 是一个完整的缓存解决方案。所以有 LRU 列表、过期概念(数据新鲜度)、一些高级操作,如 cas/inc/dec/append/prepend/replace。

    Memcached 易于部署和监控(我们如何区分文件系统上的“缓存”工作负载和内核?我们可以计算缓存数据的总量吗?数据分布?容量规划?等等)。

    还有一些混合系统,比如cachelot 基本上,它是可以直接嵌入到应用程序中的 memcached,因此无需任何系统调用或网络 IO 即可访问缓存。

    【讨论】:

      【解决方案4】:

      其实,并不是说从内存读取比从硬盘读取快很多那么简单。如您所知,Memcached 是基于 tcp 连接的,如果您每次想要获取某项或设置某项到 memcached 服务器时都建立连接(这是大多数程序员所做的),它的性能比使用文件缓存要差。您应该使用静态 Memcached 对象,并重用该对象。其次,现代操作系统会缓存经常使用的文件,这使得文件缓存可能比实际上是 TCP 连接的 memcache 更快。

      【讨论】:

        【解决方案5】:

        缓存类型 |缓存获取/秒
        数组缓存 | 365000
        APC 缓存 | 98000
        文件缓存 | 27000 Memcached 缓存 (TCP/IP) | 12200
        MySQL 查询缓存 (TCP/IP) | 9900
        MySQL 查询缓存 (Unix Socket) | 13500
        从表中选择 (TCP/IP) | 5100
        从表中选择 (Unix Socket) | 7400

        来源:
        https://surniaulula.com/os/unix/memcached-vs-disk-cache/

        我的来源:)
        https://www.percona.com/blog/2006/08/09/cache-performance-comparison/

        【讨论】:

          【解决方案6】:

          你在细节上太笼统了。而且我相信您要寻找的答案取决于情况。据我所知,很少有事情总是比其他事情更好。

          显然读取文件系统的内容不会更快(假设它是硬盘驱动器)。即使是 SDD 也会明显比内存读取慢。原因是 HDD/FileSystem 是为容量而不是速度而构建的,而 DDR 内存因此特别快。

          良好的缓存意味着将经常访问的部分保存在内存中,将不常访问的部分保存在磁盘上(持久存储)。这样,您的缓存实现将大大改善正常情况。那是你的目标。确保您对理想的缓存策略有充分的了解。这将需要大量的基准测试和测试。

          【讨论】:

            【解决方案7】:

            这取决于缓存是否存储在本地。 Memcache 可以跨网络存储数据,不一定比本地磁盘快。

            【讨论】:

            【解决方案8】:

            如果该文件存储在磁盘中,并且经常访问,那么很有可能在 RAM 中找到它(作为最近访问的文件),或者我在这里遗漏了什么? 是的,第一次读取将来自非常慢的磁盘,但是后续读取(假设文件很热并且读取很多)应该比 memcached 更快,因为这是纯 RAM 读取

            【讨论】:

              猜你喜欢
              • 2011-11-14
              • 2011-04-02
              • 2011-05-28
              • 2015-08-03
              • 2011-11-04
              • 1970-01-01
              • 2013-01-08
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多