将“工作集”放入MongoDB的RAM中意味着什么?

MongoDB是快速的,但只有当你的工作集或索引可以适应内存。 所以如果我的服务器有16G内存,那么这是否意味着我所有的集合的大小需要小于或等于16G? 一个人怎么说“好的,这是我的工作集,其余的可以”存档?

“工作集”基本上是您的系统正在使用/正在使用的数据和索引的数量。

举个例子,假设你有一年的数据。 为了简单起见,每个月都涉及到1GB的数据,共计12GB,为了覆盖每个月的数据,您还有1GB的指标,总共12GB。

如果您总是访问最近12个月的数据,那么您的工作集是:12GB(数据)+ 12GB(索引)= 24GB。

但是,如果您实际上只访问最近3个月的数据,那么您的工作集为:3GB(数据)+ 3GB(索引)= 6GB。 在这种情况下,如果你有8GB内存,然后你开始定期访问过去6个月的数据,那么你的工作集将开始超过你的可用内存,并对性能产生影响。

但是一般来说,如果你有足够的RAM来覆盖你期望经常访问的数据/索引的数量,那么你会没事的。

编辑:在评论中回答问题
我不确定我是否遵守,但我会去接听。 首先,工作组的计算是“球场图”。 其次,如果你在user_id上有一个(例如)1GB的索引,那么只有那个被普遍访问的索引部分需要在RAM中(例如,假设有50%的用户是不活跃的,那么0.5GB的索引会更频繁RAM中需要/需要)。 一般来说,你拥有的内存越多,尤其是随着使用率的增加,工作集可能会随着时间而增长。 这是分片进来的地方 – 将数据分成多个节点,并且可以有效地向外扩展。 然后你的工作集被分成多个机器,这意味着更多的可以保存在RAM中。 需要更多的内存? 将另一台机器添加到碎片。

工作集基本上是你最常用的东西。 如果您使用索引A作为集合B来search文档的子集,那么您可以考虑您的工作集。 只要这些结构中最常用的部分能够适应记忆,事情将会非常快速。 由于零件不再适合您的工作集,就像许多文档那样会减慢速度。 如果你的索引超出你的记忆,通常事情会变得更慢。

是的,您可以拥有大量数据,其中大部分数据是“归档”的,在不影响应用程序性能或影响工作集(不包括归档数据)的情况下很less使用。

我知道索引是一棵B树。 如果数据超出了可以适应内存的大小,为什么这么重要呢? B-Tree速度相当快,在很大程度上减less了磁盘访问。 为什么要担心?