MongoDB很快,但只有当你的工作集或索引适合RAM时。因此,如果我的服务器有16G的RAM,这是否意味着我所有收藏的大小需要小于或等于16G?如何说“好吧这是我的工作集,其余的可以”存档?“
答案 0 :(得分:69)
“工作集”基本上是系统将激活/使用的数据和索引的数量。
例如,假设您有1年的数据。为简单起见,每个月与1GB的数据相关,共计12GB,并且为了覆盖每个月的数据,您可以再获得1GB的索引,总计12GB的数据。
如果您总是访问过去12个月的数据,那么您的工作集是:12GB(数据)+ 12GB(索引)= 24GB。
但是,如果您实际只访问过去3个月的数据,那么您的工作集是:3GB(数据)+ 3GB(索引)= 6GB。在这种情况下,如果您有8GB RAM,然后您开始定期访问过去6个月的数据,那么您的工作集将开始超过可用RAM,并对性能产生影响。
但一般来说,如果你有足够的内存来覆盖你希望经常访问的数据/索引数量,那么你就可以了。
修改:回复评论中的问题
我不确定我会非常关注,但我会回答一下。首先,工作集的计算是“球场图”。其次,如果你在user_id上有一个(例如)1GB的索引,那么只有那个常用的索引部分需要在RAM中(例如,假设有50%的用户处于非活动状态,那么0.5GB的索引会更频繁RAM中需要/需要的)。一般来说,你拥有的内存越多,特别是因为使用量增加,工作集可能会随着时间的推移而增长。这就是分片的用武之地 - 在多个节点上分割数据,您可以经济有效地向外扩展。然后,您的工作集将分为多台计算机,这意味着可以将更多内容保存在RAM中。需要更多内存?将另一台机器添加到shard上。
答案 1 :(得分:6)
工作集基本上是你最常使用的东西(经常)。如果您使用集合B的索引A来搜索文档的子集,那么您可以考虑使用您的工作集。只要这些结构中最常用的部分可以适合记忆,那么事情就会非常快。由于部件不再适合您的工作装置,因此许多文件可能会变慢。一般情况下,如果你的索引超过你的记忆,事情就会变慢。
是的,您可以拥有大量数据,其中大部分数据都已“存档”,很少使用而不会影响应用程序的性能或影响您的工作集(不包括存档数据)。