Spec-Zone.ru › MySQL Connectors 1.0

2.2.3 Подключение к одному серверу MySQL с использованием пула соединений

X DevAPI поддерживает пулы соединений, что может уменьшить нагрузку для приложений, открывающих много соединений с сервером MySQL. Соединения управляются как пул объектом Client. При открытии новой сессии с помощью объекта Client, перед открытием нового сетевого соединения, производится попытка извлечь из пула существующее и в настоящее время неиспользуемое соединение, которое затем сбрасывается и используется повторно.

Пул соединений настраивается с помощью одной пары ключ-значение (см. ) содержащей один ключ, названный pooling. Значение для ключа pooling представляет собой другой набор пар ключ-значение, содержащий любую комбинацию ключей, описанных в следующей таблице:

Таблица 2.1 Параметры для настройки пула соединений

Таблица 2.1 Параметры для настройки пула соединений
Параметр Значение По умолчанию
enabled Включить пул соединений. Если параметр установлен в значение false, возвращается обычное, непульное соединение, и другие параметры пула соединений, перечисленные ниже, игнорируются. true
maxSize Максимальное количество соединений, разрешенных в пуле 25
maxIdleTime Максимальное количество миллисекунд, которое соединение может простаивать в очереди перед закрытием. Значение 0 означает бесконечное время. 0
queueTimeout Максимальное количество миллисекунд, которое запрос может ожидать, пока соединение не станет доступным. Значение 0 означает бесконечное время 0

Закрытие сессии помечает базовое соединение как неиспользуемое и возвращает его в пул соединений объекта Client.

Закрытие объекта Client закрывает все управляемые им соединения, делает недействительными все сессии, созданные клиентом, и уничтожает управляемый пул.

Примечание

Пулы соединений не поддерживаются MySQL Shell.

Код Node.js JavaScript

var mysqlx = require('@mysql/xdevapi');
var client = mysqlx.getClient(
  { user: 'user', host: 'localhost', port: 33060 },
  { pooling: { enabled: true, maxIdleTime: 30000, maxSize: 25, queueTimeout: 10000 } }
);
client.getSession()
  .then(session => {
    console.log(session.inspect())
    return session.close() // the connection becomes idle in the client pool
  })
  .then(() => {
    return client.getSession()
  })
  .then(session => {
    console.log(session.inspect())
    return client.close() // closes all connections and destroys the pool
  })

Код C#

using (Client client = MySQLX.GetClient("server=localhost;user=user:port=33060;",
  new { pooling = new { Enabled = true, MaxSize = 100, MaxIdleTime=30000, QueueTimeout = 10000 } }))
   {
      using (Session session = client.GetSession())
      {
         foreach (Collection coll in session.Schema.GetCollections())
         {
            Console.WriteLine(coll.Name);
         }
      } // session.Dispose() is called and the session becomes idle in the pool
   } // client.Dispose() is called then all sessions are closed and pool is destroyed

Код Python

connection_string = {
    'host': 'localhost',
    'port': 37210,
    'user': 'user',
    'password': 'password'
}
client_options = {
    'pooling': {
        "max_size": 10,
        "max_idle_time": 30000
    }
}
client = mysqlx.get_client(connection_string, client_options)
session1 = client.get_session()
session2 = client.get_session()

# closing all the sessions
client.close()

Код Java

//Obtain new ClientFactory
ClientFactory cf = new ClientFactory();

//Obtain Client from ClientFactory
Client cli = cf.getClient(this.baseUrl, "{\"pooling\":{\"enabled\":true, \"maxSize\":8,
  \"maxIdleTime\":30000, \"queueTimeout\":10000} }");
Session sess = cli.getSession();

//Use Session as usual

//Close Client after use
cli.close();

		

Код C++

using namespace mysqlx;

Client cli("user:password@host_name/db_name", ClientOption::POOL_MAX_SIZE, 7);
Session sess = cli.getSession();

// use Session sess as usual

cli.close();  // close all Sessions

Код Connector/C++ с использованием X DevAPI для C

char error_buf[255];
int  error_code;

mysqlx_client_t *cli
 = mysqlx_get_client_from_url(
     "user:password@host_name/db_name", "{ \"maxSize\": 7 }", error_buf, &error_code
   );
mysqlx_session_t *sess = mysqlx_get_session_from_client(cli);

// use sess as before

mysqlx_close_client(cli);  // close session sess

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/x-devapi-userguide-en/connecting-connection-pool.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API