約 3,000 万のドキュメントを含む MongoDB データベースがあります。単一のマルチプロセッサ コンピューター (144 GB RAM、CentOS 7.1 を実行) から提供され、シャーディングされていません。Python 3.4 を使用して、pymongo 3.2.2 でクエリを実行します。データベースはあまり使用されておらず、少数のライターが現在レコードを更新しています。find
が一貫した結果を返さない状況は次のとおりです。
count = 0
for entry in mycollection.find({'fork': {'parent': None, 'root': None}}, {'_id': 1}):
count += 1
print(count)
複数回実行すると、このコードは 72 を出力することもあれば、はるかに大きな数 (2874400 を超える) を出力することもあります。数値が大きいほど常に同じとは限りません。私のデータから知る限り、数値が大きいほど正しい可能性が高くなります。それでも、72 を出力することがある理由を説明するには途方に暮れています。
この一貫性のない動作の潜在的な原因は何ですか?
(注: はい、count(...)
一致するドキュメントの数をカウントするために演算子を使用できることはわかっています。上記のコードは、一致するドキュメントをカウントする効率的な方法を提示するためではなく、矛盾を説明するためのフラグメントです。)