9

WindowsでMongoDBを実行しています。コレクションを削除して再作成するスレッドが1つ以上あります。

このコマンドを使用mongo.exeするshow collections()と、同じ名前のコレクションが複数表示されます(同じ名前のコレクションが1,000をはるかに超えています!)。

検証を実行すると、次のようになります。

> db.MY_COLLECTION.validate()

私は得る:

{ "errmsg" : "ns not found", "ok" : 0, "valid" : false }

このsize()コマンドは0をfind()返し、何も返しません。

私の質問は:MongoDBスレッドは安全ですか?次の質問は、「これを正しく実行していますか(ドロップして再作成)、またはコレクションのコンテンツ全体を更新するためのより良い方法はありますか?」のようなものになります。

4

2 に答える 2

7

mongodb のドキュメントから:

スレッドセーフ

C# ドライバー クラスの一部のみがスレッド セーフです。その中には、MongoServer、MongoDatabase、MongoCollection、および MongoGridFS があります。スレッド セーフではないよく使用する一般的なクラスには、MongoCursor と、BSON ライブラリのすべてのクラス (スレッド セーフである BsonSymbolTable を除く) が含まれます。スレッド セーフであると明確に文書化されていない限り、クラスはスレッド セーフではありません。

すべてのクラスのすべての静的プロパティとメソッドはスレッド セーフです。

このページで「スレッド」という単語を検索できます。

http://mongodb.onconfluence.com/pages/viewpage.action?pageId=18907708&navigatingVersions=true#CSharpDriverTutorial-Threadsafety

于 2011-07-04T17:47:48.823 に答える
5

バージョン 2.2 で変更されました。

MongoDB では、複数のクライアントがロック システムを使用して 1 つのデータ コーパスを読み書きできるため、すべてのクライアントがデータの一貫したビューを確実に受け取り、複数のアプリケーションがまったく同じデータを同時に変更することを防止できます。ロックは、1 つのドキュメントへのすべての書き込みが完全に発生するか、まったく発生しないことを保証するのに役立ちます。

http://docs.mongodb.org/manual/faq/concurrency/

于 2012-12-27T05:14:44.763 に答える