cursorFinalizerEnabled

cursorFinalizerEnabled

我在Mongo3.4中使用SpringBoot(在Mongos的集群中)
Mongo客户端选项配置启用了cursorfinalizerenabled选项。
根据文档,此标志允许:
mongo模板关闭游标。使之成为现实,产生一条线索
在每个新的Mongoclient上。
尝试清除
关闭。

MongoClientOptions options = MongoClientOptions.builder()
    .cursorFinalizerEnabled(false)
    .build();

什么是最佳实践?对还是错?性能影响?

最佳答案

cursorFinalizerEnabled的默认值为true(请参见MongoClientOptions)。所以,你的Mongoclient将产生这个线程(并应用这个行为),除非你选择不这样做。
这个特性为客户端代码提供了一个安全网,对于处理游标来说,这个安全网是(或者可能是)随意的。所以,取决于你如何对待你的光标,它可能是有用的,也可能是一个禁止的。
标准建议是:如果您的客户机代码确保始终调用DBCursor的close方法,则可以将其设置为false。否则,就接受默认值。
至于绩效影响,很难衡量。如果您的客户机代码没有留下任何打开的、未使用的游标,则这是一个禁止操作,但如果您的客户机代码没有留下打开的、未使用的游标,则此标志将有助于减少对共享资源的影响。生成一个线程来运行这个harvester似乎成本很低,因此如果您完全不确定客户端代码如何处理游标,那么启用它是值得的。
当然,和所有性能问题一样;判断性能效果(如果有的话)最可靠的方法是使用和不使用此标志进行测试,然后进行比较:)

09-19 07:06