1

mongoデータベースに接続するためのチュートリアルに基づいて、次のコードを使用しています。mongodb接続スレッドの安全性

私が設計に関するいくつかの疑問を持っている:

  1. は、それは同時に複数のスレッドからMongoConnection.getDB()関数を呼び出しても大丈夫ですか?
  2. そうでない場合は、同期させる必要がありますか?
  3. デザインに問題がある場合、どのような望ましくない影響を与えることができますか?

私はmongodbを初めて使っているので、私の質問は少し素朴に聞こえるかもしれません。 docsから

public class MongoConnection { 

    private static MongoClient mongoClient = null; 

    private static String IP = "mongodb://user:[email protected]:27017/?authSource=demodb&authMechanism=SCRAM-SHA-1"; 
    private static String DATABASE = "demodb"; 

    static { 
     mongoClient = new MongoClient(new MongoClientURI(IP)); 
    } 

    private MongoConnection() { 

    } 

    public static DB getDB() { 
     return mongoClient.getDB(DATABASE); 
    } 
} 

答えて

1

MongoClientインスタンスがデータベースへの接続のプールを表します。 MongoClientクラスのインスタンスは、複数のスレッドでも必要になります。

そしてprevious versions' quick start guidesから

MongoClientクラスはスレッドセーフとスレッド間で共有できるように設計されて

。通常、あなたが与えられたデータベースクラスタのための唯一の1インスタンスを作成し、application.`

だから、全体でそれを使用する、MongoClient.getDb(..)

+0

は、引用のように見える、スレッド間のいずれかの問題があってはなりません。あなたは引用を使用するときにソースを指定することになっています。基本的に**データベース接続自体を共有しようとしない**厳密な強調**が必要です。これは、データベース接続や一般的な「ステートフルな」ネットワーク接続でかなり古くなっています。これらのスレッドをフォークまたは生成しないでください。 –

+0

URLを添付しようとしている間に編集されましたが、それは引用であるはずなので、\ '\'です。 – ialex

+1

実際には "引用"は '>'を使用し、他の目盛は "コード"のためのものです。見る。編集されました。 –