我正在使用java中的功能,其中必须使用mongoDb进行BulkWriteOperation。在这里,我遇到了两种BulkWriteOperation:


initializeUnorderedBulkOperation()
initializeOrderedBulkOperation()


对于上述两种情况,我都引用了this
在性能方面的确切区别是什么,应该选择哪个?

我还想在例外情况下记录重复记录,以便日志文件将包含重复记录,并可以稍后对其进行分析。

最佳答案

“精确”差异的一部分在于方法的命名方式,一个是“有序的”,另一个是“无序的”。但是,不仅限于此。


Orderred:当然会按创建时的顺序执行批处理中的语句。如果任何语句失败,则批处理将在此时停止(不是回滚),并在WriteResult中返回错误。
Un-Orderred:不预先批处理中创建的顺序执行,并且可以按任何顺序并行处理。如果发生任何情况,则不会在WriteResponse中返回异常结果,而是将错误简单报告为Write响应中的列表。


因此,"Orderred"将保持秩序,并在发生任何错误时失败,而"UnOrderred"将提交所有批处理的操作,但仅在响应中报告错误。

UnOrderred可能由于不依赖顺序执行而返回得更快。但是,如果您需要按一定顺序执行批处理操作,则Orderred是正确的方法。

07-24 18:27