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

オブジェクト指向としてのJavaでのMongodb接続の管理

    アプリケーションでは、単一のMongoClient 接続プールを使用して、必要な数の接続を持つオブジェクト 、この場合は機能します。 100の接続プールのデフォルト値 、および必要に応じて変更(または構成)できます。

    mongoクライアントオブジェクトは、アプリケーションの開始時に作成でき、アプリケーションが閉じられたときにのみ閉じられます。これにより、各コレクションアクセスクラスのmongoクライアントオブジェクトとの接続の作成に関連するリソースが節約されます。

    同じmongoクライアントオブジェクトをアプリケーション全体で使用できます。 シングルトン クラス(mongoクライアントオブジェクトの1つのインスタンスを維持する)には、MongoDBデータベースサーバーへの接続を必要とするアプリケーション内の他のオブジェクトからアクセスできます。

    接続プールとは何ですか?

    サンプルコード:

    /*
     * Manages the MongoClient object and its settings like host, port, connection pool, etc.
     */
    public class DBAccess {
    
      private static MongoClient mongoClient;
      private static DBAccess dbAccess;
    
      // MongoClient with default settings
      // NOTE: the code will have only one of the constructors
      //private DBAccess() {
      //    final String connectionString = "mongodb://localhost:27017";
      //    this.mongoClient = MongoClients.create(connectionString);
      //}
    
      // MongoClient with custom settings.
      // Private constructor, so that the class can be instantiated outside this class.
      // NOTE: the code will have only one of the constructors
      private DBAccess() {
    
          MongoClientSettings settings =
              MongoClientSettings.builder()
                  .applyToConnectionPoolSettings(builder ->
                       builder.maxSize(40).minSize(10))
                 .applyToClusterSettings(builder ->
                       builder.hosts(Arrays.asList(new ServerAddress("localhost", 27017))))
                .build();
    
          mongoClient = MongoClients.create(settings);
      }
    
      public static MongoClient getConnection() {
    
          if (dbAccess == null) {
               dbAccess = new DBAccess();   
          }
    
          return mongoClient;
      }
    
      public static void closeDatabase() {
          mongoClient.close();
      }
    }
    
    /*
     * Class manages a collection.
     */
    public class CollectionOneAccess {
    
      public static String COLLECTION_ONE = "collection_one";
      private MongoCollection<Document> collection;
    
      public CollectionOneAccess(MongoDatabase db) {    
          collection = db.getCollection(COLLECTION_ONE);
      }
    
      public void printOneDocument() {
          Document myDoc = collection.find().first();
          System.out.println(myDoc.toJson());
      }
    
      // other CRUD operations ...
    
    }
    
    
    // Usage of DBAcess and CollectionOneAccess classes:
    
    private static final String APP_DATABASE = "abc_db";
    
    public static void main(String [] args) {
        MongoDatabase database = DBAccess.getConnection().getDatabase(APP_DATABASE);
        CollectionOneAccess one = new CollectionOneAccess(database);
        one.printOneDocument();
        // ...
    }
    

    Mongoクライアント

    MongoClient オブジェクトは、MongoDBサーバーに接続し、getDatebase()を使用してデータベースにアクセスするために使用されます 方法とコレクションの操作。

    com.mongodb.client.MongoClient インターフェース:

    MongoDBJavaドキュメント> :

    MongoClientインスタンスは、データベースへの接続のプールを表します。複数のスレッドがある場合でも、クラスMongoClientのインスタンスは1つだけ必要です。

    次のコードは、ホスト( "localhost")やポート(27017などのデフォルト設定でMongoDBクライアント接続オブジェクトを作成します )、接続プーリングなど、MongoDBインスタンスに接続し、testDBにアクセスします。 データベース。

    MongoClient mongoClient = MongoClients.create();
    MongoDatabase database = mongoClient.getDatabase("testDB");
    

    Mongoクライアント設定:

    MongoClientSettingsを使用して、他の設定を明示的に指定できます MongoClientの動作を制御します 。

    MongoClient mongoClient = MongoClients.create(MongoClientSettings settings)
    

    ConnectionPoolSettings オブジェクトは、MongoDBサーバーへの接続プールに関連するすべての設定を指定します。クライアントオブジェクトが作成されると、アプリケーションはこの接続プールを作成します。 ConnectionPoolSettings.Builder ConnectionPoolSettingsのビルダーです 、接続プールのプロパティを指定するメソッドがあります。例:maxSize​(int maxSize) :許可される接続の最大数(デフォルトは100 )。他のメソッドには、minSizeが含まれます 、maxConnectionIdleTime 、など。

    MongoClientをインスタンス化するコード 接続プール設定あり:

    MongoClientSettings settings = MongoClientSettings.builder()
                                       .applyToConnectionPoolSettings(builder -> 
                                           builder.maxSize(20))
                                       .build();
    MongoClient mongoClient = MongoClients.create(settings);
    // ...
    // Verify the connection pool settings 
    System.out.println("Pool size: " + 
        settings.getConnectionPoolSettings().getMaxSize());
    


    1. MongoDBAtlasを使用してクラウドにデータベースクラスターを作成する

    2. ドキュメントデータベース:冗長データ、参照など(特にMongoDB)

    3. $ lookupの外部フィールドは、ネストされたドキュメントのフィールドである可能性がありますか?

    4. FacebookAPIからMeteorにデータを挿入します