是单个mongos实例还是整个集群的connectionPoolSetting?

时间:2020-02-17 08:46:12

标签: java mongodb connection-pooling sharding

我是服务器端开发人员,致力于使用mongo群集作为持久数据库的项目。

我对https://mongodb.github.io/mongo-java-driver/3.8/javadoc/com/mongodb/connection/ConnectionPoolSettings.html有疑问

它说to a MongoDB server 但是,如果我有一个跟在后面的connectionString呢?

mongodb://user:pwd@mongos1:port,mongos3:port,mongos3:port,mongos4:port,mongos5:port,mongos6:port/admin?readPreference=secondaryPreferred

具有6个mongos实例的mongodb分片群集。

问题: connectionPoolSetting是否与一台mongos服务器相关?或与所有mongos服务器有关?

例如如果我们在此设置中将maxSize = 10,是否表示单个客户端的单个mongos服务器的最大连接池= 10(我的6个mongos集群的最大池= 60)?或无论我们拥有多少个mongos服务器,整个集群的最大连接池= 10?

2 个答案:

答案 0 :(得分:0)

最大连接池= 10意味着在客户端池中最多将有10个连接,无论集群中有多少服务器。

答案 1 :(得分:0)

Mongo Client

com.mongodb.client.MongoClient 界面

MongoDB集群的客户端表示。实例可以表示独立的MongoDB实例,副本集或分片群集。此类的实例负责维护群集的最新状态,并可能缓存与此相关的资源,包括用于监视的后台线程和连接池。

MongoClient对象用于使用getDatebase()方法访问数据库,并使用其中的集合和文档。

documentation

MongoClient实例表示与 数据库;您甚至只需要一个类MongoClient的实例 有多个线程。

重要 通常,您只为一个服务器创建一个MongoClient实例。 指定的MongoDB部署(例如独立,副本集或分片 群集)并在您的应用程序中使用它。但是,如果您创建 多个实例:

所有资源使用限制(例如,最大连接数等)均适用 MongoClient实例。
要处理实例,请调用MongoClient.close()清理资源。

以下代码使用连接池创建一个MongoDB客户端连接对象,以连接到MongoDB实例。

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

MongoClients.create()静态方法创建由默认主机(localhost)和端口(27017)指定的连接对象。您可以使用MongoClientSettings明确指定其他设置,其中MongoClient指定各种设置来控制MongoClient mongoClient = MongoClients.create(MongoClientSettings settings) 的行为。

ConnectionPoolSettings


连接池设置:

ConnectionPoolSettings.Builder对象指定与MongoDB服务器的连接池有关的所有设置。创建客户端对象时,应用程序将创建此连接池。连接池的这种创建是特定于驱动程序的。

ConnectionPoolSettingsmaxSize​(int maxSize)的构建器,具有指定连接池属性的方法。例如100:允许的最大连接数。默认值为minSize。其他方法包括maxConnectionIdleTimeMongoClient等。

使用连接池设置实例化MongoClientSettings settings = MongoClientSettings.builder() .applyToConnectionPoolSettings(builder -> builder.maxSize(20).minSize(10) .build(); MongoClient mongoClient = MongoClients.create(settings); //... // Verify the connection pool settings max size as settings.getConnectionPoolSettings().getMaxSize() 的代码:

mongos



问题:connectionPoolSetting是否与一台mongos服务器相关? 或与所有mongos服务器有关?

客户端或应用程序通过mongos路由器连接到分片群集(包括其所有分片)。客户端程序指定URL连接字符串和其他连接选项。在分片群集中,客户端可以通过一组mongos或单个mongos连接,或者多个客户端可以通过单个mongos等连接;等等;这取决于您的应用程序体系结构。

如果通过单个mongos连接,则可以在连接字符串中指定mongos的主机,端口,用户/密码等。如果它是多个mongos,则有多个主机/端口值。不论mongos的数量如何,客户端程序仅通过一个mongos连接到群集。

连接池设置仅适用于一个mongos路由器,因为应用程序连接到一个mongos时,与连接字符串中指定的<tr>的数量无关。