MongoDB中的MemoryError

时间:2014-12-18 02:14:31

标签: python mongodb ubuntu

我使用python库'mongoengine'来查询MongoDB。 这是代码:

mblog_list = MicroBlog.objects(omid__exists=False) # MicroBlog is a class I defined using mongoengine
data = []
for mblog in mblog_list:
    weibo_created = mblog.created

请注意mblog_list中有大约30000个项目,它使用大约2.5 G的磁盘空间。在上面的代码中,for循环运行了几次并引发了“MemoryError”。

MongoDB服务器没有显示错误消息,但表示已关闭一个连接。

我也使用官方的js解释器发出相同的查询,它工作正常。

运行'ulimit -a'命令,我得到:

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 31723
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 31723
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

MongoDB版本:2.4.12

操作系统:Ubuntu 12.04

1 个答案:

答案 0 :(得分:1)

这不是MongoDB问题,而是库mongoengine

默认情况下,在迭代返回的查询集时,mongoengine会将所有返回的doc保留在内存中以供将来重用!

所以更改这样的代码将解决这个问题:

mblog_list = MicroBlog.objects(omid__exists=False).non_cache() # this should be the default behavior

谢谢!