Mongodb Mongo CursorEnabled性能效果

Mongodb Mongo CursorEnabled性能效果,mongodb,mongo-java,mongo-java-driver,Mongodb,Mongo Java,Mongo Java Driver,我在Mongo3.4中使用SpringBoot(在MongoS集群中) mongo客户端选项配置具有选项cursorFinalizerEnabled 根据文件,此标志允许: Mongo模板关闭游标。如果这是真的,就会产生一个线程 在每个新的MongoClient上 尝试清除不可用的DBCursors 关闭 最佳做法是什么?对还是错?性能影响?启用的游标finalizerEnabled的默认值为true(请参阅)。因此,除非您选择不这样做,否则您的MongoClient将生成此线程(并应用此行为)

我在Mongo3.4中使用SpringBoot(在MongoS集群中) mongo客户端选项配置具有选项cursorFinalizerEnabled

根据文件,此标志允许:

Mongo模板关闭游标。如果这是真的,就会产生一个线程 在每个新的MongoClient上

尝试清除不可用的DBCursors 关闭


最佳做法是什么?对还是错?性能影响?

启用的
游标finalizerEnabled
的默认值为
true
(请参阅)。因此,除非您选择不这样做,否则您的MongoClient将生成此线程(并应用此行为)

该特性为客户端代码提供了一个安全网,这些代码在处理游标时是(或可能是)随意的。所以,这取决于你如何对待你的游标,它可能是有用的,也可能是不可操作的

标准建议是:如果客户端代码确保始终调用
DBCursor
的close方法,则可以将其设置为false。否则,只接受默认值

至于对表现的影响;这很难衡量。如果您的客户端代码没有留下任何打开的、未使用的游标,那么这是一个no-op,但是如果您的客户端代码没有留下打开的、未使用的游标,那么这个标志将有助于减少对共享资源的影响。生成一个线程来运行这个harvester看起来成本很低,所以如果您根本不确定客户端代码如何处理游标,那么启用它是值得的

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

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