Является ли connectionPoolSetting для одного экземпляра Mongos или всего кластера? - PullRequest
0 голосов
/ 17 февраля 2020

Я разработчик на стороне сервера, работающий над проектом, в котором в качестве постоянной базы данных используется кластер mon go.

У меня вопрос к https://mongodb.github.io/mongo-java-driver/3.8/javadoc/com/mongodb/connection/ConnectionPoolSettings.html

Он сказал to a MongoDB server Но что, если у меня есть строка подключения, например, следующая за

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

Кластер mongodb с 6 экземплярами монго.

Вопрос: относится ли ConnectionPoolSetting к один монг сервер? или относится ко всем серверам mongos?

Например, если у нас в этом параметре maxSize = 10, означает ли это, что у одного клиента максимальный пул подключений = 10 для одного сервера mongos (максимальный пул = 60 для моего кластера 6 mongos) ? Или максимальный пул соединений = 10 для всего кластера, независимо от того, сколько у нас серверов mongos?

Ответы [ 2 ]

0 голосов
/ 18 февраля 2020

Пн go Клиент

com.mongodb.client.MongoClient интерфейс :

Клиентское представление кластера MongoDB. Экземпляры могут представлять собой автономный экземпляр MongoDB, набор реплик или сегментированный кластер. Экземпляр этого класса отвечает за поддержание современного состояния кластера и, возможно, связанных с этим ресурсов кэширования, включая фоновые потоки для мониторинга и пулы соединений.

MongoClient объект используется для получения доступа к базе данных с использованием метода getDatebase() и работы с коллекциями и документами в ней.

Из документации :

Экземпляр MongoClient представляет пул соединений с базой данных; вам понадобится только один экземпляр класса MongoClient даже с несколькими потоками.

ВАЖНО Как правило, вы создаете только один экземпляр MongoClient для данного развертывания MongoDB (например, автономный, набор реплик или сегментированный кластер) и используете его в своем применение. Тем не менее, если вы создаете несколько экземпляров:

Все ограничения использования ресурсов (например, максимальное количество соединений и т. Д. c.) Применяются к экземпляру MongoClient.
Чтобы избавиться от экземпляра, вызовите MongoClient.close () для очистки ресурсов.

Следующий код создает объект подключения клиента MongoDB с пулом подключений для подключения к экземпляру MongoDB.

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

MongoClients.create() stati c метод создает объект подключения, указанный хостом по умолчанию (localhost) и портом (27017). Вы можете явно указать другие параметры с помощью MongoClientSettings, который задает различные параметры для управления поведением MongoClient.

MongoClient mongoClient = MongoClients.create(MongoClientSettings settings)


Параметры пула подключений:

Объект ConnectionPoolSettings указывает все параметры, которые относятся к пулу соединений с сервером MongoDB. Приложение создает этот пул соединений при создании объекта клиента. Это создание пула соединений определяется драйвером c.

ConnectionPoolSettings.Builder является компоновщиком для ConnectionPoolSettings имеет методы для указания свойств пула соединений. Например, maxSize​(int maxSize): максимально допустимое количество подключений. По умолчанию 100. Другие методы включают minSize, maxConnectionIdleTime, et c.

Код для создания MongoClient с настройками пула соединений:

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()



Вопрос: Связан ли ConnectionPoolSetting с одним сервером mongos? или относится ко всем серверам mongos?

Клиент или приложение подключаются к изолированному кластеру (включая все его сегменты) через маршрутизатор mongos. Клиентская программа указывает строку подключения URL-адреса и другие параметры подключения. В изолированном кластере клиент может подключиться через набор mongos s или один mongos, или несколько клиентов могут подключиться через один mongos, et c.,; это зависит от архитектуры вашего приложения.

Если вы подключаетесь через один mongos, вы можете указать mongos хост, порт, пользователя / пароль и т. д. c., в соединении строка. Если это несколько mongos, то несколько значений хост / порт. Независимо от количества mongos клиентская программа подключается к кластеру только через один mongos.

. Настройка пула подключений только для одного mongos маршрутизатора, поскольку приложение подключается к одному mongos независимо от количества mongos s, указанных в строке подключения.

0 голосов
/ 17 февраля 2020

макс. Пул соединений = 10 означает, что в пуле клиентов будет не более 10 соединений, независимо от того, сколько серверов входит в ваш кластер.

...