2012-03-18 106 views
0

我想为读写配置不同的socketTimeout。如果写入速度很慢,但读取速度应该非常快,否则我希望它失败。 我知道我可以配置这里面MongoOptions如下:mongodb读取和写入连接超时

MongoOptions mongoOptions = new MongoOptions(); 
mongoOptions.connectionsPerHost = 20; 
mongoOptions.threadsAllowedToBlockForConnectionMultiplier = 100; 
mongoOptions.maxWaitTime = 1000; 
mongoOptions.connectTimeout = 3000; 
mongoOptions.socketTimeout = 3000; 
mongo = new Mongo(parseServerAddresses("localhost:27017"), mongoOptions); 

但在这种情况下,我必须创建两个蒙戈对象 - 一个用于读取,一个用于写入操作。

我只是没有在查询级别找到这个配置,或者对于集合级别,但是分开读写的定义。

在此先感谢

+0

你是对的 - 你需要两个不同的Mongo实例来做到这一点。没有办法在options参数中传递套接字超时。 – Barrie 2012-03-27 18:05:58

回答

-1

我只是没有发现在查询级这个配置。

设置此特定的查询而言,Java驱动程序对find()方法here以下签名:

find(DBObject query, DBObject fields, int numToSkip, int batchSize, int options) 

options设置应允许您设置的查询选项,如插座特定查询超时。

上面的方法标记为已弃用,但您也可以设置options on a specific cursor

我想为读写配置不同的socketTimeout。如果写入速度很慢,但读取速度应该非常快,否则我希望它失败。

请注意,读取可能会在套接字上产生多次读取。文件是从服务器批量返回的。所以你可能会得到你的前100个结果真的很快,但是你可能会在接下来的100个结果中超时。

如果您的查询涉及大量文件回来,您应该知道这一点。

+0

我看到了这样的选项,但是它们的常量是什么?例如对于使用slaveOk我使用db.getCollection(“someColl”)。addOption(Bytes.QUERYOPTION_SLAVEOK)。我没有找到查询常量,我如何更新几个选项? – Julias 2012-03-18 11:46:01

+0

你能举一个这样的查询的例子,通过设置establishConnectionTimeout和socketTimeout – Julias 2012-03-18 13:48:02