关于 db.collection.find() 查询返回 cursor 的一个疑问

2013-08-28 18:37:11 +08:00
 amyangfei
来自MongoDB文档的一句话:db.collection.find() RETURNS A cursor to the documents that match the query criteria. When the find() method “returns documents,” the method is actually returning a cursor to the documents.

举一个例子,假设collection中的数据量很大很大,那么db.collection.find(<criteria>, limit=40)的效率和cursor = db.collection.find(<criteria>),然后for x in cursor 这种方法的效率比起来,后一种方法的效率会低么,具体的差别有多大?

实际的应用场景是通过 db.collection.find(<criteria>) 返回一个cursor,由于业务的需要,从结果集中取出的结果数量是不定的,通过迭代器选取一些结果满足需求之后就会终止迭代。
4801 次点击
所在节点    MongoDB
1 条回复
hepochen
2013-10-18 11:31:28 +08:00
一般情况下,性能差距不大。直接遍历find获得cursor,实际上(pymongo)会获取一些数据,等这些数据不够用了,然后再去获取。跟limit产生的信息流实际上是一样的。

归根结底是在于应用场景的索引是如何建的?如果数据都属于热数据,find or limit,没有什么差别,基本上可以认为是从内存中取的。

但不管怎么样,这种场景下,不建议直接用find这个cursor,设一个最大的limit值也好(一般情况下)。如果你自己不小心手滑,没有终止迭代,并且collection的数据量很大……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/80536

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX