这是否可以使用mongoengine(python)对数据库进行延迟查询?

2024-10-02 02:38:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我对mongoengine(python)有内存问题。在

假设我有大量的自定义文档(几千个)。 我想把它们都处理成这样:

for item in custom_documents.objects():
    process(item)

问题是custom_documents.objects()加载内存中的每个对象,而我的应用程序使用了几个GB。。。在

我该怎么做才能让它更具记忆性呢? 有没有办法让mongoengine懒洋洋地查询数据库(当我们在queryset上迭代时它会请求对象)?在


Tags: 对象内存in文档应用程序forobjectscustom
2条回答

根据docs(和我的经验),集合.objects返回lazyQuerySet。您的第一个问题可能是调用了objects属性,而不是仅仅将其用作iterable。我觉得你的应用程序使用这么多内存肯定还有其他原因,也许process(object)以某种方式存储了对它的引用?请尝试以下代码并检查应用程序的内存使用情况:

queryset = custom_documents.objects
print queryset.count()

由于QuerySets是懒惰的,您也可以做类似custom_documents.limit(100).skip(500)的操作,以便只返回对象500-600。在

我想您应该看看querysets—这是MongoEngine游标包装器:

http://mongoengine.org/docs/v0.4/apireference.html#querying

它们允许您控制返回的对象的数量,基本上负责批处理大小设置等,这些设置可以直接在pymongo驱动程序中设置:

http://api.mongodb.org/python/current/api/pymongo/cursor.html

默认情况下,游标通常是这样设置的,您必须尝试让它们一次性返回所有内容,即使在本机mongodb shell中也是如此。在

相关问题 更多 >

    热门问题