gpt4 book ai didi

mongodb - 是否可以为单个选择更改套接字超时?

转载 作者:行者123 更新时间:2023-12-02 16:01:27 24 4
gpt4 key购买 nike

我们的项目使用mongodb来存储其文档。我们在DataSource.groovy文件中将其配置为socketTimeout为60000。我们的大多数查询都无法获得接近该阈值的任何值,但是我假设只有这样,以防万一出错。

无论如何,现在我正在处理一个被称为长时间运行的查询。进行表空间扫描是非常有保证的,我们知道并且目前还可以。问题是在随机情况下,我们当前拥有的数据量导致其超过了套接字超时。另外,我们希望将来的数据量会大大增加。

所以我的问题是,是否可以增加/删除单个mongodb select的套接字超时?我发现以下内容:

grailsApplication.mainContext.getBean('mongoDatastore').mongo.mongoOptions.socketTimeout = 0

这似乎可行,但同时也改变了我假定的所有应用程序范围的套接字超时,我们不希望这样做。救命!

更新:经过大量的试验和错误,我找到了一种方法来打开另一个mongo连接,该连接可以重用配置,但是省去了socketTimeout并可以正常工作。
class MongoService {
def grailsApplication

def openMongoClientWithoutSocketTimeout() {
def datastore = grailsApplication.mainContext.getBean('mongoDatastore')
def config = grailsApplication.config.grails.mongo
def credentials = MongoCredential.createCredential(config.username, config.databaseName, config.password.toCharArray())
def options = MongoClientOptions.builder()
.autoConnectRetry(config.options.autoConnectRetry)
.connectTimeout(config.options.connectTimeout)
.build()

new MongoClient(datastore.mongo.getAllAddress(), [credentials, credentials], options)
}

def selectCollection(mongoClient, collection) {
def mongoConfig = grailsApplication.config.grails.mongo
mongoClient.getDB(mongoConfig.databaseName).getCollection(collection)
}
}

不确定这是否是最简单的解决方案...

最佳答案

您使用什么版本的mongo? maxTimeMS可能对您有帮助吗?
从文档页面:

    db.collection.find({description: /August [0-9]+, 1969/}).maxTimeMS(50)

关于mongodb - 是否可以为单个选择更改套接字超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30400501/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com