【问题标题】:Returning full results in MongoDB find()在 MongoDB find() 中返回完整结果
【发布时间】:2014-11-18 01:34:22
【问题描述】:

我一直在做一个项目来评估 mongodb 与其他数据存储相比的速度。为此,我正在尝试对我制作的收藏进行全面扫描。我发现了探查器,所以我启用了它并设置为记录每个查询。我有一百万个对象的集合,我正在尝试计算扫描集合需要多长时间。不幸的是,当我跑步时

db.sampledata.find()

它立即将光标返回到 1000 个左右的对象。所以我写了一个python脚本来遍历游标来处理all结果。这里是:

from pymongo import MongoClient

client = MongoClient()

db = client.argocompdb
data = db.sampledata

count = 0
my_info = data.find()

for row in my_info:
    count += 1

print count

这似乎花费了必要的时间。但是,当我检查分析器时,没有完整查询时间的总量,它只是一整套“getmore”操作,每个操作需要 3-6 毫秒。有什么方法可以使用分析器而不是在 python 中计时来做我想做的事情吗?我基本上只是想:

  1. 能够执行查询并让它返回所有结果,而不是 只是光标中的几个。
  2. 在探查器中获取“完整查询”的时间。获得所有结果所花费的时间。

我想做的事情可行吗?

我对 MongoDB 很陌生,所以如果之前有人问过这个问题,我很抱歉,但我在上面找不到任何东西。

【问题讨论】:

    标签: python mongodb


    【解决方案1】:

    分析器正在测量正确的东西。 Mongo 驱动程序不会立即返回集合中的所有记录;它首先给你一个光标,然后在你遍历光标时一个一个地输入文档。因此,分析器正在准确测量正在执行的操作。

    我认为这是一个比您正在寻找的更正确的指标,我相信这是将所有文档实际读入您的客户所需的时间。您实际上不希望 Mongo 驱动程序在返回之前将所有文档读入内存。如果以这种方式编写,任何应用程序都不会表现良好,除非是最小的集合。客户端按需读取文档要快得多,因此需要最小的总内存占用。

    另外,你把这个和什么比较?如果您要与关系数据库进行比较,那么关系数据库中的模式以及 Mongo 中的集合和文档的外观非常重要。当然,每个索引的索引方式。不同的选择会产生非常不同的性能结果,这与数据库引擎无关。

    Mongo 中最简单也是最快的操作可能是查找由其id 检索到的微小文档,该文档始终被索引:db.collection.find({id: ...})。但是如果你真的想测量线性扫描,那么文档越小,扫描速度就越快。但实际上,这并不是很有用,因为它基本上只是衡量服务器从磁盘读取数据的速度。

    【讨论】:

    • 很公平。我正在使用特定基准复制论文的结果。我有所有必要的架构和索引,但这篇论文对于它如何实际衡量它的性能非常模糊。感谢您的洞察力
    猜你喜欢
    • 1970-01-01
    • 2015-05-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    相关资源
    最近更新 更多