2010-06-30 146 views
19

我不认为这很清楚,从文件或memcached中读取文件是否更快?为什么?对于缓存,文件系统或Memcached,哪个更快/更好?

+0

你将不得不得到更具体的,你有什么数据集和访问模式,这是一个本地memchaced服务器或distibuted?网络访问成本是多少?您存储的信息有多大?你在运行什么磁盘? – 2010-06-30 09:46:44

+0

像这样的问题更适合http://superuser.com/ – 2010-06-30 09:49:47

+0

我对这些细节不太了解,我想用基本的术语来解释:简单设置,简单应用程序,1个memcache服务器,100个文件... – 2010-06-30 09:49:53

回答

23

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

+5

您链接的基准测试结果与您的声明完全相反 - Memcached比从本地磁盘读取要慢。你能澄清这些差异吗? – DOOManiac 2016-04-28 14:17:51

0

你正在对细节进行大胆的评估。我相信你所寻找的答案取决于情况。据我所知,很少有事情总是比其他事情更好。

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

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

11

有相当几个不同的方面,可能会有利于一个或另一个:

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

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

对于什么值得关于磁盘与内存性能的其他评论可能是理论上的,就好像文件系统数据被定期访问那么它可能会坐在操作系统或磁盘缓存中。

0

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

0

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

2

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

缓存文件系统和使用memcached之间的主要区别是memcached是一个完整的缓存解决方案。因此,有LRU列表,到期概念(数据新鲜度)和一些高级操作,如cas/inc/dec/append/prepend/replace。 Memcached易于部署和监视(我们如何区分文件系统上的“缓存”工作负载,比如说内核,我们可以计算缓存数据的总量,数据分布,容量规划等等)。

也有一些混合系统,如cachelot 基本上,它是memcached,可以直接嵌入到应用程序中,因此缓存可以在没有任何系统调用或网络IO的情况下访问。