将“工作集”安装到 MongoDB 的 RAM 中意味着什么?

MongoDB 是快速的,但只有当您的工作集或索引可以放入 RAM 时才可以。因此,如果我的服务器有16G 内存,这是否意味着我所有集合的大小需要小于或等于16G?如何说“ OK,这是我的工作集,其余的可以“存档?”

20518 次浏览

工作集基本上就是你使用最频繁的东西。如果您使用集合 B 的索引 A 来搜索文档的子集,那么您可以认为您的工作集。只要这些结构中最常用的部分可以放入内存,那么事情就会变得非常快。由于部件不再适合您的工作集,像许多文档那样,可以放慢速度。一般来说,如果你的索引超过了你的记忆,事情会变得很慢。

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

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

例如,假设你有一年的数据。为简单起见,每个月涉及1GB 的数据,总共12GB,为了覆盖每个月的数据,您又有1GB 的索引,总共12GB。

如果您总是访问过去12个月的数据值,那么您的工作集是: 12 GB (data) + 12 GB (index) = 24 GB。

但是,如果您实际上只访问过去3个月的数据值,那么您的工作集是: 3 GB (data) + 3 GB (index) = 6 GB。在这个场景中,如果您有8 GB 内存,然后您开始定期访问过去6个月的数据,那么您的工作集将开始超过您可用的内存,并对性能产生影响。

但是一般来说,如果您有足够的 RAM 来覆盖您希望频繁访问的数据/索引的数量,那么就没有问题。

编辑: 回应评论中的问题
我不太明白你的意思,不过我会试着回答的。首先,工作装置的计算是一个“球场图”。其次,如果 user _ id 上有1GB 的索引,那么只有通常访问的那部分索引需要在 RAM 中(例如,假设50% 的用户不活动,那么在 RAM 中需要/需要0.5 GB 的索引)。一般来说,内存越多,工作集就越好,特别是随着使用量的增加,工作集可能会随着时间的推移而增长。这就是进行分片的地方——在多个节点上分割数据,这样可以有效地扩展成本。然后将工作集划分到多台机器上,这意味着可以将更多的工作集保存在 RAM 中。需要更多内存吗?将另一台机器添加到切片上。