2017-11-14 7 views
0

私はmongodbに書き込むためにpymongoを使用しています。 パフォーマンスをできるだけ速くしたいので、書き込みの問題をw = 0に設定しました。上記のすべての試み、それがcollection.insert_oneにかかった時間(でpymongoのシングルインサートがWriteConcern(w = 0)にもかかわらず遅すぎる

1.

client = MongoClient(host=HOST, port=PORT, w=0) 
collection = client[DB][COLLECTION] 
collection.insert_one(data) 

2.

client = MongoClient(host=HOST, port=PORT) 
collection = collection.with_options(write_concern=WriteConcern(w=0)) 
collection = client[DB][COLLECTION] 
collection.insert_one(data) 

3.

client = MongoClient(host=HOST, port=PORT) 
collection = client[DB][COLLECTION] 
collection.insert_one(data, bypass_document_validation=True) 

:私は、次の3つの方法を試してみました)〜〜0.5秒(!)

Wまだ長い時間かけて挿入されていますか?

私は、少なくともその時間の約5分の1であるはずであることを理解しています。より多くの場合、 'データ'は多くのデータではなく、わずかなアイテムです。私はmongodb 3.4とpymongo 3.0を使用しています

答えて

1

まず、「どのくらいの速さが十分に速いか」と答える必要があります。

「低速」と「高速」は非常に主観的な用語です。プロビジョニングされたサーバー、使用している言語、挿入しているドキュメント、コレクションで定義したインデックスの数、期待どおりのすべての方法など、多くの要素によって異なります。

「遅い」は> 100msです。他の人にとっては、「遅い」は> 10msです。もちろん、結果が得られる「高速」の方が、サーバーのプロビジョニングのコストが高くなります。

また、Pythonは最速の言語ではありません。 Global Interpreter Lockの使用に関して制限があることはよく知られています。それはまた、解釈言語でもあり、主に読みやすさのために設計されています。

もう1つの方法は、一括挿入を使用し、insert_one()を使用して多くの文書を挿入しようとしないことです。バルクインサートを使用した例については、http://api.mongodb.com/python/current/examples/bulk.html#bulk-insertを参照してください。

+0

ありがとうございます。最も懸念していたのは、insert_one()の実行に要した時間が、書込み問題を追加する前後に非常に似ていたことです。適切な影響を与えられなかったのでしょうか?一括挿入に関しては、各アプリケーションの実行時に少量のdbを書きたいので、問題があります。 –

+0

@ KerenMeronの場合、アプリケーションからデータベースにアクセスするための往復時間は、レプリカセットノード間の遅延またはジャーナルへの書き込みに要した時間よりもはるかに長くなります。 MongoDBは分散データベースであり、時間の影響を受けやすいアプリケーションではネットワークの状況を考慮する必要があることを覚えておいてください。 WriteConcernは物事をより速くすることができますが、あなたのネットワークより速くすることはできません。 –

関連する問題