我正在使用pymongo
向MongoDB
gridFS
+一些数据插入大量的jsons。
前段时间我注意到MongoDB在使用单一连接时消耗了大量的RAM。一旦我关闭此连接,它就会释放它。
连接内RAM总量为10-12GB,没有200MB。收集的实际大小实际为~300MB,存储量为10-18GB gridFS
。
为什么会这样?对于任何庞大的操作而言,打开新连接如何能够比使用单个连接完成所有内容的资源更少? 它与日记有什么关系吗?
答案 0 :(得分:2)
为了便于理解,我将不得不将此问题分解为多个较小的问题:
fs.chunks
中,并将相应的元数据存储在fs.files
中。存储在GridFS中的文件被拆分为每个256KB的块。当您通过打开连接读取GridFS数据时,属于文件的块必须从磁盘加载到RAM中(如果它尚未存在于RAM中)。因此,RAM的使用与存储的数据量成正比,并且重要的是 GridFS数据访问的频率。只是为了重新迭代GridFS数据,如果查询引用它,就会被拉入RAM。
如果您有大量GridFS数据的活动连接,那么您应该期望大量使用RAM。但是如果你的查询频率很低(只是写,但很少读),那么RAM的使用率会相对较低。如果你主要是写数据,那么确保在完成操作后关闭连接。
注意:GridFS还支持分片,这将有助于解决RAM使用率过高的问题。
希望这澄清。