Mongodb 是否可以为单个选择更改插座timout?
我们的项目使用mongodb来存储文档。我们在DataSource.groovy文件中配置了它,socketTimeout为60000。我们的大多数查询都没有接近该阈值的任何位置,但我假设我们有它,以防出现问题 无论如何,现在我正在处理一个被称为长时间运行的查询。我们几乎可以保证正在进行表空间扫描,我们承认这一点,目前还可以接受。问题是我们当前拥有的数据量导致随机情况下超过套接字超时。另外一个问题是,我们预计未来的数据量将大幅增长 所以我的问题是,是否可以增加/删除单个mongodb select的套接字超时?我发现了以下几点:Mongodb 是否可以为单个选择更改插座timout?,mongodb,grails,Mongodb,Grails,我们的项目使用mongodb来存储文档。我们在DataSource.groovy文件中配置了它,socketTimeout为60000。我们的大多数查询都没有接近该阈值的任何位置,但我假设我们有它,以防出现问题 无论如何,现在我正在处理一个被称为长时间运行的查询。我们几乎可以保证正在进行表空间扫描,我们承认这一点,目前还可以接受。问题是我们当前拥有的数据量导致随机情况下超过套接字超时。另外一个问题是,我们预计未来的数据量将大幅增长 所以我的问题是,是否可以增加/删除单个mongodb selec
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版本是什么?可能的话我能帮你吗? 从文档页面:
db.collection.find({description: /August [0-9]+, 1969/}).maxTimeMS(50)
2.13我看不到maxTimeMS选项。只有一个maxTime()选项,我们尝试过,但没有覆盖配置中的socketTimeout选项。它从2.6版开始提供,似乎您没有更多选项。