【问题标题】:Experiencing delay when fetching 100th row获取第 100 行时遇到延迟
【发布时间】:2012-12-17 10:36:23
【问题描述】:

我正在从集合中获取所有行,并在第 100 行遇到延迟。我知道 find 方法返回游标,并不是所有的数据都预先并且在某些时候需要获取更多数据。但是第 100 行是唯一的延迟。

Checking images 99
Checking image 100
*pause*
Checking image 101

然后在 100 000 张图像中没有可见的延迟。

使用 ruby​​ 脚本:

require 'mongo'

time_start = Time.now

mongo = Mongo::MongoClient.new("localhost", 27017)

db = mongo["pics"]

images = db["images"]
albums = db["albums"]

orphans = []

images.find().each do |row|
    puts "Checking image #{row['_id']}"
end

# puts orphans
time_end = Time.now
puts "Total time taken: #{time_end - time_start}"

Used images collection (json)

mongoimport --db pics --collection images file_name

问题是:

  • 初始光标是否有一些数据?
  • 为什么只有第 100 行有延迟?也许我错过了一些东西,但那时我什至没有看到 IO 读取

谢谢

【问题讨论】:

    标签: mongodb mongodb-ruby


    【解决方案1】:

    MongoDB 游标的默认“批量大小”是 100 个对象。意味着 MongoDB 在获取下一批之前获取 100 个对象……这就是您看到延迟的原因。所有驱动程序都应该在光标对象上提供一个方法“batch_size()”或类似的方法来设置和检索批量大小。

    【讨论】:

    • 你是对的。将 batch_size 设置为 500 使其平滑。 images.find().batch_size(500).each。同样使用mongostat,我检查了默认情况下在第 100 行它会向我发送 3mb 的数据,这是导致打嗝的原因。
    猜你喜欢
    • 1970-01-01
    • 2021-11-01
    • 2023-02-06
    • 2021-12-03
    • 2022-01-23
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多