【问题标题】:Using memcache infront of a mongodb server在 mongodb 服务器前使用 memcached
【发布时间】:2012-10-23 10:30:51
【问题描述】:

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

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

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

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

【问题讨论】:

  • 这取决于您的工作集大小,如果剩余的 ram 非常适合工作集,那么额外的层可能是不必要的复杂性。

标签: mongodb memcached


【解决方案1】:

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

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 2013-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多