代码之家  ›  专栏  ›  技术社区  ›  Kong

MongoDB索引/RAM关系

  •  29
  • Kong  · 技术社区  · 16 年前

    我将在一个新项目中采用MongoDB,我选择它是为了灵活性,而不是可伸缩性,所以将在一台机器上运行它。从文档和Web文章中,我一直在阅读所有索引都在RAM中。这对我来说是没有意义的,因为我的索引很容易超过可用RAM的数量。

    任何人都能分享一些关于索引/RAM关系的见解吗?当单个索引和我的所有索引都超过可用RAM的大小时会发生什么?

    2 回复  |  直到 16 年前
        1
  •  29
  •   kris    16 年前

    MongoDB保留了RAM中的索引。它们将在LRU基础上被淘汰。您经常会看到建议您在内存中保留“工作集”的文档:如果您实际访问的索引部分适合内存,那么您就可以了。

        2
  •  8
  •   bobby    15 年前

    它是工作集大小加上MongoDB的索引,理想情况下,这些索引应始终驻留在RAM中,即可用RAM的数量理想情况下应至少为工作集大小加上索引大小,再加上运行在同一台计算机上的其他OS(操作系统)和其他软件所需的数量。如果可用RAM小于此值,那么会发生lruing,因此我们可能会得到显著的减速。 要记住的一点是,在索引btree存储桶中是缓存的,而不是单个索引键,即,如果索引中的键分布均匀(包括历史数据),那么我们可能需要RAM中的更多索引,而不是按时间加上其他内容的复合索引。对于后者,同一个btree桶中的键通常来自同一个时间段,因此不会发生这种警告。 另外,我们应该记住,我们在bson中的字段名存储在记录中(而不是索引中),所以如果我们处于内存压力下,它们应该保持简短。

    那些对MongoDB当前的虚拟内存使用感兴趣的人(当然还有RAM),可以看看MongoD的状态。

    参见 http://www.markus-gattol.name/ws/mongodb.html#sec7