我需要逐行向Mongodb插入2.000.000行数据但是它达到200.000插入它变得非常慢,我使用Mongoid而且我不知道我是否可以使用批量插入我们需要数据验证在插入之前。我怎样才能加快这个过程? 非常感谢您的帮助!
答案 0 :(得分:0)
为了显着提升性能,您应该通过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
如果您可以截取" raw"中的导入数据非Mongoid模型形式,你可以通过插入哈希数组来绕过一些开销,但是你必须编写自己的自定义验证,而不能使用Mongoid模型验证。