nof*_*all 6 mongodb wiredtiger
我正在使用Java驱动程序,虽然这个问题不是特定于语言的,但是要编写对mongodb文档的部分更新,因为使用MMAPv1存储引擎可以在适当的位置编辑文档(在内存中),这样可以提供更好的性能.这确实增加了相当大的开发复杂性,因为我可以立即保存整个文档,而不用担心确切更新的细节.在更新到WiredTiger之后,我了解到这个较新的存储引擎不会编辑文档(在内存中),而是为每次写入分配新的内存(不清楚这是否意味着文档的完整副本或只是差异).这是否意味着无论是完整文档写入还是部分文档写入,它都没有性能差异?
\n\n\n更新到 WiredTiger 后,我了解到这个较新的存储引擎不会就地(在内存中)编辑文档,而是为每次写入分配新的内存(不清楚这是否意味着文档的完整副本或只是比较)。
\n
WiredTiger 使用多版本并发控制 (MVCC)在读者的生命周期内维护多个数据视图。WiredTiger\xe2\x80\x99s 内存格式与磁盘格式不同:它在内存中存储文档的差异,但作为定期检查点的一部分刷新到数据文件时会构建文档的完整版本。
\n\n\n\n\n这是否意味着无论我进行完整文档写入还是部分文档写入,性能都没有差异?
\n
无论不同的 MongoDB 存储引擎如何处理磁盘的持久更新,在可能的情况下使用部分更新而不是完整更新仍然具有性能优势(特别是如果您设置的字段值相对于整个文档大小较小)。
\n\n例如,考虑:
\n\n如果您每次都发送完整的文档更新,您还会创建这样的场景:即使更改可能针对不同的字段集,更新到达服务器的顺序也很重要。您可以添加其他应用程序逻辑(例如乐观版本控制),以确保您不会意外覆盖字段值,但这可能会增加不必要的复杂性,具体取决于您的用例。
\n