initializeUnorderedBulkOperation 和 initializeOrderedBulkOperation 的确切区别和 advantages/disadvantages 是什么?

What is the exact difference and advantages/disadvantages of initializeUnorderedBulkOperation and initializeOrderedBulkOperation?

我正在 java 中开发一项功能,我必须使用 mongoDb 执行 BulkWriteOperation。在这里,我遇到了两种类型的 BulkWriteOperation:

以上两点我都参考了this。 性能方面的确切区别是什么,应该首选哪个?

我也想记录异常中的重复记录,这样日志文件就会包含重复项,以后可以对其进行分析。

部分 "exact" 区别在于方法的命名,一个是 "Orderred",另一个是 "Un-Orderred"。但不仅如此。

  • Orderred:当然会按照创建时的相同顺序执行批处理中的语句。如果任何语句失败,则批处理将停止在那一点(不是回滚)和 return WriteResult 中的错误。

  • Un-Orderred:不保留批处理中的创建顺序执行,可以按任意顺序并行处理。如果发生任何错误,而不是 returnWriteResponse 中的异常结果,错误只是作为 Write 响应中的列表报告

因此 "Orderred" will be in order and fail out at any error, whereas "UnOrderred" 将提交所有批处理操作,但仅在响应中报告错误。

UnOrderred 可能 return 更快,因为它不依赖顺序执行。但是,如果您需要按特定顺序执行批处理操作,则 Orderred 是正确的方法。