Mongo cursorFinalizerEnabled性能效果
Mongo cursorFinalizerEnabled performance effect
我正在使用 Spring Boot with Mongo 3.4(在 MongoS 集群中)
mongo 客户端选项配置具有选项 cursorFinalizerEnabled.
根据文档,此标志允许:
Mongo Template closes the cursors. Making this true, spawns a thread
on every new MongoClient.
Attempts to clean up DBCursors that are not
closed.
MongoClientOptions options = MongoClientOptions.builder()
.cursorFinalizerEnabled(false)
.build();
最佳做法是什么?对或错?演出效果?
cursorFinalizerEnabled
的默认值为 true
(参见 MongoClientOptions)。因此,除非您选择不这样做,否则您的 MongoClient 将生成此线程(并应用此行为)。
此功能为(或可能)随意处理游标的客户端代码提供了一个安全网。因此,根据您对待游标的方式,它可能有用,也可能无用。
标准建议是:如果您的客户端代码确保始终调用 DBCursor
的关闭方法,那么您可以将其设置为 false。否则,接受默认值即可。
至于性能影响;很难衡量。如果您的客户端代码没有留下任何打开的、未使用的游标,那么它是一个空操作,但如果您的客户端代码确实留下打开的、未使用的游标,那么这个标志将有助于减少对共享资源的影响。将单个线程生成到 运行 这个收割器似乎成本很低,所以如果您完全不确定您的客户端代码如何处理游标,那么启用它是值得的。
当然,与所有性能问题一样;确定性能影响(如果有的话)的最可靠方法是使用和不使用此标志进行测试,然后进行比较:)
我正在使用 Spring Boot with Mongo 3.4(在 MongoS 集群中) mongo 客户端选项配置具有选项 cursorFinalizerEnabled.
根据文档,此标志允许:
Mongo Template closes the cursors. Making this true, spawns a thread on every new MongoClient.
Attempts to clean up DBCursors that are not closed.
MongoClientOptions options = MongoClientOptions.builder()
.cursorFinalizerEnabled(false)
.build();
最佳做法是什么?对或错?演出效果?
cursorFinalizerEnabled
的默认值为 true
(参见 MongoClientOptions)。因此,除非您选择不这样做,否则您的 MongoClient 将生成此线程(并应用此行为)。
此功能为(或可能)随意处理游标的客户端代码提供了一个安全网。因此,根据您对待游标的方式,它可能有用,也可能无用。
标准建议是:如果您的客户端代码确保始终调用 DBCursor
的关闭方法,那么您可以将其设置为 false。否则,接受默认值即可。
至于性能影响;很难衡量。如果您的客户端代码没有留下任何打开的、未使用的游标,那么它是一个空操作,但如果您的客户端代码确实留下打开的、未使用的游标,那么这个标志将有助于减少对共享资源的影响。将单个线程生成到 运行 这个收割器似乎成本很低,所以如果您完全不确定您的客户端代码如何处理游标,那么启用它是值得的。
当然,与所有性能问题一样;确定性能影响(如果有的话)的最可靠方法是使用和不使用此标志进行测试,然后进行比较:)