Mongodb Mongoid のデータ挿入速度の向上
概要
MongoDB に 2,000,000 行のデータを 1 行ずつ挿入する必要がありますが、挿入数が 200,000 に達すると非常に遅くなります。Mongoid を使用していますが、挿入前にデータ検証が必要なので一括挿入を使用できるかどうかわかりません。このプロセスを高速化するにはどうすればよいですか? 助けてくれて本当にありがとう!
解決策
パフォーマンスを大幅に向上させるには、Moped::Collection#insert によるバッチ挿入を試してください。 #valid? を明示的に呼び出す必要があります。あなた自身。 data_rows が Mongoid モデルの MyModel オブジェクトの配列であると仮定して、次のようなことを試してください。
slice_size = 1000
data_rows.each_slice(slice_size) do |slice|
slice.each{|data_row| raise "validation error" unless data_row.valid?}
MyModel.collection.insert(slice.collect{|data_row| data_row.serializable_hash})
end
インポート データを「生の」非 Mongoid モデル形式でインターセプトできる場合は、ハッシュの配列を挿入することで一部のオーバーヘッドを回避できますが、その場合は独自のカスタム検証をプログラムする必要があり、Mongoid モデル検証を使用できなくなります。