使用mongodb服务器的memcache

时间:2012-10-23 10:30:52

标签: mongodb memcached

我试图了解mongo的内部缓存是如何工作的,以及它是否确实消除了使用memcache。我们的数据库大小约为200G,索引适合内存但在索引后服务器上剩余的可用内存不多。

我的一位同事说mongo的内部缓存与memcache一样快,所以不需要使用memcache来引入另一个复杂程度。

我头脑中的场景是当我们从db读取数据时,它保存在memcache中,下次直接从缓存中读取而不是返回到db服务器。如果数据已更改且需要保存/更新,则会在memcache服务器和数据库服务器上完成。

我一直在读这个但是还不能说服自己。所以,如果有人能够对此有所了解,我真的很感激。

1 个答案:

答案 0 :(得分:1)

首先,缓存存储与数据库不同。因此,与Memcache相比,MongoDB和SQL在目的和用途上有所不同。

Memcache非常擅长降低查询的工作集大小。例如:想象一个带有子选择和CASE语句的大型聚合查询以及SQL中没有的内容(想想最复杂的查询),一直实时执行此查询可能会导致计算机“捶打“(更不用说客户方面的问题)。

然而,众所周知,您只需要将此查询汇总到另一个集合/表,以便立即更快。 memcache的真正速度来自于它是内存键值存储的事实。这是MongoDB速度失败的地方,因为它不是内存存储,它是内存映射但不存储。

MongoDB没有自我缓存,只要查询“热”并且在LRU中(这是您的工作集进入的地方),您不应该注意到响应时间的差异。确保查询“热”的一个好方法是运行它。有些人有一个他们运行的最大查询的脚本来预热缓存。

正如我所说,memcache是​​一个缓存层,这就是原因:

  

如果数据已更改且需要保存/更新,则会在memcache服务器和数据库服务器上完成。

让我内心死一点。许多人会模糊数据库和缓存层之间的界限。