Pymongo - 循环遍历具有大数据的游标的有效方法
Pymongo - Efficient way to loop through cursor having large data
在 Pymongo 中循环遍历游标对象的最有效方法是什么?
目前,这就是我正在做的事情:
list(my_db.my_collection.find())
它将光标转换为列表对象,以便我可以遍历每个元素。如果 find() 查询 return 的数据量很小,这就可以正常工作。但是,当我将数据库扩展到 return 1000 万个文档时,游标到列表的转换将永远进行下去。我没有将数据库结果(游标)转换为列表,而是尝试将游标转换为数据框,如下所示:
pd.Dataframe(my_db.my_collection.find())
这并没有给我带来任何性能提升。
在 python 中遍历游标对象的最有效方法是什么?
到目前为止我还没有使用过 pymongo。
但是有一件事我可以肯定地说,如果你通过
获取大量数据
list(my_db.my_collection.find())
那么你必须使用 generator
.
因为,这里使用 list 会显着增加内存使用量,如果超出允许值,可能会引入 MemoryError
。
def get_data():
yield(my_db.my_collection.find())
尝试使用不会占用太多内存的方法。
pymongo 给你的游标对象已经是延迟加载对象了,不需要做任何其他事情。
for doc in my_db.my_collection.find():
#process doc
您可以迭代的方法find()
returns a Cursor
for match in my_db.my_collection.find():
# do something
pass
在 Pymongo 中循环遍历游标对象的最有效方法是什么? 目前,这就是我正在做的事情:
list(my_db.my_collection.find())
它将光标转换为列表对象,以便我可以遍历每个元素。如果 find() 查询 return 的数据量很小,这就可以正常工作。但是,当我将数据库扩展到 return 1000 万个文档时,游标到列表的转换将永远进行下去。我没有将数据库结果(游标)转换为列表,而是尝试将游标转换为数据框,如下所示:
pd.Dataframe(my_db.my_collection.find())
这并没有给我带来任何性能提升。
在 python 中遍历游标对象的最有效方法是什么?
到目前为止我还没有使用过 pymongo。
但是有一件事我可以肯定地说,如果你通过
list(my_db.my_collection.find())
那么你必须使用 generator
.
因为,这里使用 list 会显着增加内存使用量,如果超出允许值,可能会引入 MemoryError
。
def get_data():
yield(my_db.my_collection.find())
尝试使用不会占用太多内存的方法。
pymongo 给你的游标对象已经是延迟加载对象了,不需要做任何其他事情。
for doc in my_db.my_collection.find():
#process doc
您可以迭代的方法find()
returns a Cursor
for match in my_db.my_collection.find():
# do something
pass