Mongo cursorFinalizerEnabled表现效果

问题描述 投票:4回答:1

我正在使用Spring Boot和Mongo 3.4(在与MongoS的集群中)mongo客户端选项配置有选项cursorFinalizerEnabled。

根据文档,此标志允许:

Mongo Template关闭游标。如果这样做,就会在每个新的MongoClient上产生一个线程。

尝试清理未关闭的DBCursor。

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

什么是最佳做法?对或错?表现效果?

mongodb mongo-java mongo-java-driver
1个回答
3
投票

cursorFinalizerEnabled的默认值是true(参见MongoClientOptions)。因此,除非您选择不这样做,否则您的MongoClient将生成此线程(并应用此行为)。

此功能为客户端代码提供了一个安全网,它可以(或可能)随意处理游标。因此,根据您对游标的处理方式,它可能有用,也可能是无操作。

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.