mongodb - 将 "working set"放入 MongoDB 的 RAM 是什么意思?

MongoDB 速度很快,但前提是您的工作集或索引可以放入 RAM。那么如果我的服务器有 16G 的 RAM,这是否意味着我所有集合的大小都需要小于或等于 16G?怎么说“好的,这是我的工作集,其余的可以“存档?”

最佳答案

“工作集”基本上是您的系统将处于事件状态/正在使用的数据量和索引。

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

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

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

但一般来说,如果您有足够的 RAM 来覆盖您希望经常访问的数据/索引量,那么您就可以了。

编辑:在评论中回复问题
我不确定我是否完全遵循,但我会尝试回答。首先,工作集的计算是一个“球场图”。其次,如果您在 user_id 上有一个(例如)1GB 索引,那么只有该索引中经常访问的部分需要在 RAM 中(例如,假设 50% 的用户处于非事件状态,那么 0.5GB 的索引将更频繁RAM 中需要/需要)。通常,您拥有的 RAM 越多越好,尤其是由于使用量的增加,工作集可能会随着时间的推移而增长。这就是分片的用武之地——将数据拆分到多个节点上,您可以经济高效地进行横向扩展。然后你的工作集被划分到多台机器上,这意味着更多的机器可以保存在 RAM 中。需要更多内存?添加另一台机器进行分片。

关于mongodb - 将 "working set"放入 MongoDB 的 RAM 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6453584/

相关文章:

node.js - TypeError : db. 集合不是函数

mongodb - MongoDB 数据库中的数据如何存储在磁盘上?

javascript - 在 MongoDB 和 Mongoose 中执行全文搜索的最佳方法

mongodb - 更新 MongoDB 中精确元素数组中的字段

java - “字段需要一个无法找到的 bean。”使用mongodb的错误spring restf

javascript - 如何将参数传递给 Mongo 脚本

mongodb - 检查当前与 MongoDb 的连接数

node.js - Mongodb的僧侣vs Mongoose

mongodb - 存储在 MongoDB 中的数组是否保持顺序?

mongodb - MongoDB 3.0 中的“无法取消链接套接字文件”错误