目前我通过在 pymongo 中迭代游标来获取文档,例如:
for d in db.docs.find():
mylist.append(d)
作为参考,对同一组数据(700 万条记录)执行 fetchall 大约需要 20 秒,而上述方法需要几分钟。
有没有更快的方法在 mongo 中读取批量数据?抱歉,我是 mongo 新手,如果需要更多信息,请告诉我。
使用 $natural 排序将绕过索引并按照文档存储在磁盘上的顺序返回文档,这意味着 mongo 不必在磁盘上进行随机读取。
https://docs.mongodb.com/manual/reference/method/cursor.sort/#return-natural-order https://docs.mongodb.com/manual/reference/method/cursor.sort/#return-natural-order
如果您想使用查询,性能会严重下降。您永远不应该依赖 FIFO 排序。 Mongo 允许自己在其存储层内移动文档。如果您不关心顺序,那就这样吧。
此排序是内部实现功能,您应该
不依赖于 i 中的任何特定结构
for d in db.docs.find().sort( { $natural: 1 } ):
mylist.append(d)
在 python 中,你还想使用EXHAUST游标类型,告诉 mongo 服务器流回结果,而无需等待 pymongo 驱动程序确认每个批次
https://api.mongodb.com/python/current/api/pymongo/cursor.html#pymongo.cursor.Cursor类型.EXHAUST https://api.mongodb.com/python/current/api/pymongo/cursor.html#pymongo.cursor.CursorType.EXHAUST
请注意,它永远不会像 shell 一样快。在 mongo/bson->pymongo->you 之间移动数据最慢的方面是 python 中的 UTF8 字符串解码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)