【发布时间】:2014-09-24 23:38:04
【问题描述】:
我需要将 2.000.000 行数据逐行插入到 Mongodb 中,但是当它达到 200.000 时插入它变得非常慢,我正在使用 Mongoid,我不知道我是否可以使用批量插入我们我需要数据验证在插入之前。我怎样才能加快这个过程? 非常感谢您的帮助!
【问题讨论】:
我需要将 2.000.000 行数据逐行插入到 Mongodb 中,但是当它达到 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 模型验证。
【讨论】: