连接上的MongoDB RAM消耗

时间:2014-11-05 21:36:51

标签: mongodb connection pymongo ram gridfs

我正在使用pymongoMongoDB gridFS +一些数据插入大量的jsons。 前段时间我注意到MongoDB在使用单一连接时消耗了大量的RAM。一旦我关闭此连接,它就会释放它。 连接内RAM总量为10-12GB,没有200MB。收集的实际大小实际为~300MB,存储量为10-18GB gridFS

为什么会这样?对于任何庞大的操作而言,打开新连接如何能够比使用单个连接完成所有内容的资源更少? 它与日记有什么关系吗?

1 个答案:

答案 0 :(得分:2)

为了便于理解,我将不得不将此问题分解为多个较小的问题:

  1. 众所周知,MongoDB是RAM饥饿的,它会尽量使用尽可能多的RAM。
  2. GridFS倾向于将文件存储在集合fs.chunks中,并将相应的元数据存储在fs.files中。存储在GridFS中的文件被拆分为每个256KB的块。
  3. 当您通过打开连接读取GridFS数据时,属于文件的块必须从磁盘加载到RAM中(如果它尚未存在于RAM中)。因此,RAM的使用与存储的数据量成正比,并且重要的是 GridFS数据访问的频率。只是为了重新迭代GridFS数据,如果查询引用它,就会被拉入RAM。

    如果您有大量GridFS数据的活动连接,那么您应该期望大量使用RAM。但是如果你的查询频率很低(只是写,但很少读),那么RAM的使用率会相对较低。如果你主要是写数据,那么确保在完成操作后关闭连接。

    1. 打开的连接数越多,您的RAM使用量就会增加。
    2. 这与日记无关。
    3. 注意:GridFS还支持分片,这将有助于解决RAM使用率过高的问题。

      希望这澄清。