2012-03-18 103 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