1

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

我的一位同事说 mongo 的内部缓存将与 memcache 一样快,因此无需使用 memcache 引入另一个级别的复杂性。

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

我一直在读这个,但还不能说服自己。因此,如果有人能对此有所了解,我将不胜感激。

4

1 回答 1

1

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

Memcache 非常擅长降低查询的工作集大小。例如:想象一个带有子选择和CASE语句的巨大聚合查询以及 SQL 中没有的东西(想想你能想到的最复杂的查询),一直实时执行此查询可能会导致计算机“抖动”(而不是提到客户端的问题)。

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

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

正如我所说,memcache 是一个缓存层,这就是为什么:

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

让我死在里面。许多确实模糊了数据库和缓存层之间的界限。

于 2012-10-23T14:11:00.100 回答