A (3.8M ドキュメント) と B (1.7M ドキュメント) の 2 つのコレクションがあります。
シェルから実行する PHP スクリプトがあります。
- A の各レコードをループします
- ~60% の確率で、B で findOne を実行します (_id を使用)
- いくつかの基本的な計算を行い、php 配列を作成します
a 内のすべてのドキュメントのループが完了すると、次のようになります。
4) php 配列をループする
5) コレクション C に upsert
(1) の間、私は一貫して次のように取得します: PHP Fatal error: Uncaught exception 'MongoCursorException' with message 'Cursor not found' 最後に処理されたアイテムは #8187/3872494 でした。
real 1m25.478s
user 0m0.076s
sys 0m0.064s
コードを変更せずに再度実行すると、アイテム#19826 / 3872495で例外がスローされました
real 3m19.144s
user 0m0.120s
sys 0m0.072s
繰り返しますが、#8181 / 387249
real 1m31.110s
user 0m0.036s
sys 0m0.048s
はい、私は例外をキャッチできる (そしておそらくキャッチすべき) ことを認識しています...しかし...なぜスローされているのでしょうか? 特に、データベースへのこのような異なる経過時間/深さで。
それが役立つ場合、私のセットアップは 3 ノードのレプリカ セット (2+arb) です。セカンダリをオフラインにして、プライマリのみを実行してみました。同じ結果 (処理された結果の数と時間は異なりますが、常に Cursor Not Found 例外がスローされます)。