3

コレクションからすべての行を取得していますが、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}"

使用画像集(json)

mongoimport --db pics --collection images file_name

質問は次のとおりです。

  • いくつかのデータは最初のカーソルと一緒に来ますか?
  • なぜ100行目の唯一の遅延なのですか? 多分私は何かを逃したかもしれませんが、その時点でIOの読み取りさえ見られません

ありがとうございました

4

1 に答える 1

4

MongoDB カーソルのデフォルトの「バッチ サイズ」は 100 オブジェクトです。次のバッチをフェッチする前に、MongoDB が 100 個のオブジェクトをフェッチすることを意味します。これが、遅延が発生する理由です。すべてのドライバーは、バッチ サイズを設定および取得するために、カーソル オブジェクトで "batch_size()" などのメソッドを提供する必要があります。

于 2012-12-17T10:48:05.843 に答える