将Mongo的上限集合用于内存缓存是否切合实际?

时间:2011-09-30 18:54:13

标签: mongodb

使用Mongo的上限集合作为穷人的memcache是​​否可行,假设它大部分时间都会保存在内存中?

3 个答案:

答案 0 :(得分:12)

您绝对可以使用上限集合来实现此目的。但了解基本限制很重要。

  1. 数据将根据插入顺序到期而不是到期时间
  2. 经常访问的数据可能仍会被推出内存
  3. _id列默认情况下未在Capped Collections上定义,您需要确保这些索引。
  4. 无法以更改对象大小的方式修改对象。例如,可以递增现有整数,但无法添加字段或修改条目上的字符串值。
  5. 加盖的集合cannot be sharded
  6. 因为#1& #4& #5,你肯定会失去一些核心的Memcache功能。

    TTL-based capped collections有一张长期出色的JIRA票,这可能正是你想要的。

    当然,整个辩论中的一个重要问题是“哪里有额外的RAM”。许多使用MongoDB作为主存储的人只需删除Memcache。如果你有一堆额外的RAM,为什么不用它来存储实际数据而不是那些数据的副本?

答案 1 :(得分:2)

是。这是MongoDB上限集合的完全可接受的用法。我假设你将有更多的读取而不是写入,所以请确保你也使用索引。

MongoDB Capped Collections: Applications

答案 2 :(得分:1)

正如盖茨副总裁所说,上限集合可用且易于管理。但是,如果您:

,也可以使用非上限集合
  • 为“穷人的内存”提供专用服务器
  • 有很多数据,这些数据无法放在一台服务器上(或者您想要快速查询)
  • 可以自己处理TTL(只需添加一个字段)

MongoDB缓存(类Unix系统上的mmap)将提供“无限”的内存缓存,缓存频繁访问的值。 正如mongo FAQ页面上所述:

  

目标是使Mongo成为ORM / memcached / mysql堆栈的替代