mongodb - 获取第 100 行时出现延迟

标签 mongodb mongodb-ruby

我正在从集合中获取所有行并在第 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 游标的默认“批量大小”是 100 个对象。意味着 MongoDB 在获取下一批之前获取 100 个对象……这就是您看到延迟的原因。所有驱动程序都应在游标对象上提供方法“batch_size()”或类似方法,用于设置和检索批量大小。

关于mongodb - 获取第 100 行时出现延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13912470/

相关文章:

mongodb - mongodb上不区分大小写的查询

ruby-on-rails - 在 mongo ruby​​ 驱动程序中使用 DBRef:(#<Mongo::DBRef:0x0056466ed55e48> 的未定义方法 `bson_type')

ruby - 获取 MongoDB 中列的最高值

ruby-on-rails-3.1 - Mongoid order_by bool 值

javascript - MongoDB 的集合构造函数是否仅在集合尚不存在时才创建该集合?

javascript - Mongoose .findOne 错误返回找到的模型?

mongodb用户认证

linux - 暂时将 fork 的 mongod 进程的 stdout/stderr 路由到控制台

ruby - Mongoid 3.1.4 调用 'has_key?' 时未定义方法 'Document.create'

mongodb - Mongoid:检索其 _id 存在于另一个集合中的文档