0

mongodb グローバル タイムアウトなどを試しても、PHP スクリプトの find() クエリでは無視されます。findOne({...}) または find({...}) ルックアップが必要で、タイムアウトする前に DB サーバーを最大 20 ミリ秒待ちます。

PHP がこの設定をソフト制限として使用しないようにするにはどうすればよいですか? 5秒後でも無視され、回答が処理されます。

これは PHP mongo ドライバーのバグですか?

例:

MongoCursor::$timeout=20;
$nosql_server=new Mongo('mongodb://user:pw@'.implode(",",$arr_replicas).'',array("replicaSet" => "gmt","timeout"=>10)) OR troubles("too slow to connect");
$nosql_db=$nosql_server->selectDB('aDB');
$nosql_collection_mcol=$nosql_db->mcol;
$testFind=$nosql_collection_mcol->find(array('crit'=>123));
//If PHP considered the MongoCursor::$timeout, I'd expect the prev. line to be skipped or throwing a mongo/timeout exception if DB does not return the find result cursor ready within 20ms.
//However, I arrive with this line after seconds, without exception whenever the DB has some lock or delay, without skipping previous line.
4

3 に答える 3

0

$timeoutの PHP ドキュメントでは、カーソルのタイムアウトについて次のように説明されています。

クエリが指定されたミリ秒数より長くかかる場合、結果を取得するメソッドが MongoCursorTimeoutException をスローするようにします。

タイムアウトは、カーソル で実行されgetNext()た操作を参照していると思います(例)。

于 2013-11-05T13:05:06.593 に答える
0

readPreference 属性に注意してください。可能な値は次のとおりです。

MongoClient::RP_PRIMARY
MongoClient::RP_PRIMARY_PREFERRED    
MongoClient::RP_SECONDARY
MongoClient::RP_SECONDARY_PREFERRED 
MongoClient::RP_NEAREST
于 2015-09-25T20:07:18.807 に答える