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。否则,接受默认值即可。

至于性能影响;很难衡量。如果您的客户端代码没有留下任何打开的、未使用的游标,那么它是一个空操作,但如果您的客户端代码确实留下打开的、未使用的游标,那么这个标志将有助于减少对共享资源的影响。将单个线程生成到 运行 这个收割器似乎成本很低,所以如果您完全不确定您的客户端代码如何处理游标,那么启用它是值得的。

当然,与所有性能问题一样;确定性能影响(如果有的话)的最可靠方法是使用和不使用此标志进行测试,然后进行比较:)