【问题标题】:MongoDB index/RAM relationshipMongoDB 索引/RAM 关系
【发布时间】:2011-02-18 04:07:13
【问题描述】:

我即将在一个新项目中采用 MongoDB,我选择它是为了灵活性,而不是可扩展性,因此将在一台机器上运行它。从文档和网络帖子中,我一直在阅读所有索引都在 RAM 中。这对我来说没有意义,因为我的索引很容易大于可用 RAM 的数量。

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

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    MongoDB 将尽可能多的索引保留在 RAM 中。它们将在 LRU 的基础上被换掉。您经常会看到建议您应该将“工作集”保存在内存中的文档:如果您实际访问的索引部分适合内存,那么您会没事的。

    【讨论】:

    • 要精确计算working set,假设我有一个集合。然后,运行db.collection.stats()filesizedatasize 会指示我的“工作集”吗?
    【解决方案2】:

    它是工作集大小加上 MongoDB 的索引,理想情况下应该始终驻留在 RAM 中,即理想情况下,可用 RAM 的数量应该至少是工作集大小加上索引的大小加上操作系统的其余部分(操作System) 和其他软件需要在同一台机器上运行。如果可用 RAM 小于这个值,就会发生 LRUing,因此我们可能会显着减速。 要记住的一件事是,在索引中,btree 存储桶被缓存,而不是单个索引键,即如果我们在索引中均匀分布键(包括历史数据),那么与我们在 RAM 中的索引相比,我们可能需要更多的索引。准时有一个复合索引加上其他东西。对于后者,同一 btree 桶中的密钥通常来自同一时代,因此不会发生这种警告。 另外,我们应该记住,我们在 BSON 中的字段名称存储在记录中(而不是索引),所以如果我们处于内存压力之下,它们应该保持简短。

    对MongoDB目前的虚拟内存使用(当然也和RAM有关)感兴趣的可以看看mongod的状态。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-13
      • 1970-01-01
      • 1970-01-01
      • 2012-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多