Керування підключеннями до бази даних

Запити до бази даних PostgreSQL у Java

Miller Trujillo

Staff Software Engineer

Чому важливе керування підключеннями?

$$

  • Кожне підключення відкриває мережевий сокет
  • Потребує автентифікації та ресурсів
  • Незакриті підключення витікають ресурси
  • Нові підключення можуть не вдатися

Схема, де накопичуються численні підключення до бази даних, частина позначена як «зомбі» — відкриті, але не використовуються

Запити до бази даних PostgreSQL у Java

try-with-resources

String sql = "SELECT COUNT(*) FROM books";


try (Connection conn = DriverManager.getConnection(url, user, password); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql)) {
if (rs.next()) { System.out.println("Total books: " + rs.getInt(1)); } }
  • Підключення закриваються автоматично
Запити до бази даних PostgreSQL у Java

Пулінг підключень

  • Нові підключення щоразу мають дорогий старт
  • Пулінг перевикористовує наявні підключення
  • Після роботи підключення повертаються в пул

Аналогія з чергою таксі

Схема пулу підключень із кількома попередньо встановленими підключеннями; стрілки показують взяття та повернення підключень

Запити до бази даних PostgreSQL у Java

Приклад HikariCP

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;


HikariConfig config = new HikariConfig(); config.setJdbcUrl("jdbc:postgresql://localhost:5432/library"); config.setUsername("postgres"); config.setPassword("secret");
HikariDataSource ds = new HikariDataSource(config);
try (Connection conn = ds.getConnection()) { System.out.println("Connected with HikariCP!"); }
Запити до бази даних PostgreSQL у Java

Логи консолі HikariCP

[main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting...
[main] INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - 
    Added connection org.postgresql.jdbc.PgConnection@ID
[main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed.
Запити до бази даних PostgreSQL у Java

Давайте потренуємось!

Запити до бази даних PostgreSQL у Java

Preparing Video For Download...