sql >> データベース >  >> NoSQL >> MongoDB

mongodbオープン接続の問題

    MongoClientには内部接続プールがあります。接続の最大数を構成できます(デフォルトは100)。 MongoClientOptionsを使用して設定できます このように:

    MongoClientOptions options = MongoClientOptions.builder()
                    .connectionsPerHost(100)
                    .autoConnectRetry(true)
                    .build();
    

    次に、これらのオプションをMongoClientに渡します(Mongo Java API v2.11.1でチェックしました)。プール内の接続は開いたままになり(接続の開閉は通常、コストのかかる操作です)、後で再利用できるようにします。

    また、enumを使用してMongoDBクライアントのシングルトンをリファクタリングします たとえば、synchronizedを回避するため この方法で。

    これが私の言いたいことのスケッチです:

    public enum MongoDB {
        INSTANCE;
    
        private static final String MONGO_DB_HOST = "some.mongohost.com";
        private Mongo mongo;
        private DB someDB;
    
        MongoDB() {
    
            MongoClientOptions options = MongoClientOptions.builder()
                    .connectionsPerHost(100)
                    .autoConnectRetry(true)
                    .readPreference(ReadPreference.secondaryPreferred())
                    .build();
    
            try {
                mongo = new MongoClient(MONGO_DB_HOST, options);
            } catch (UnknownHostException e) {
                e.printStackTrace();
            }
    
            someDB = mongo.getDB("someDB");
             //authenticate if needed
             //boolean auth = someDB.authenticate("username", "password".toCharArray());
             //if(!auth){
             //     System.out.println("Error Connecting To DB");
             //}        
        }
    
        public DB getSomeDB() {
            return someDB;
        }
    
        //call it on your shutdown hook for example 
        public void close(){
            mongo.close();
        }
    }
    

    次に、

    を介してデータベースにアクセスできます。
    MongoDB.INSTANCE.getSomeDB().getCollection("someCollection").count();
    



    1. mongodbJavaドライバー-複数のフィールドを持つ$group

    2. MongoDB C#ドライバー:挿入時にプロパティを無視する

    3. MongoDBは完全に一致する配列を検索しますが、順序は重要ではありません

    4. Redisは認証にユーザー名を使用しますか?