การจัดการการเชื่อมต่อฐานข้อมูล

การคิวรีฐานข้อมูล PostgreSQL ด้วย Java

Miller Trujillo

Staff Software Engineer

ทำไมการจัดการการเชื่อมต่อจึงสำคัญ?

$$

  • การเชื่อมต่อแต่ละครั้งจะเปิด network socket
  • ต้องมีการพิสูจน์ตัวตนและจัดสรรทรัพยากร
  • การเชื่อมต่อที่ไม่ถูกปิดทำให้เกิด resource leak
  • การเชื่อมต่อใหม่อาจล้มเหลว

ไดอะแกรมแสดงการเชื่อมต่อฐานข้อมูลที่สะสมเพิ่มขึ้น โดยบางรายการถูกทำเครื่องหมายว่าเป็นการเชื่อมต่อ "zombie" ที่เปิดอยู่แต่ไม่ได้ใช้งาน

การคิวรีฐานข้อมูล 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

Connection pooling

  • การเปิดการเชื่อมต่อใหม่ทุกครั้งมีค่าใช้จ่ายสูง
  • การใช้ pooling ช่วยนำการเชื่อมต่อที่มีอยู่กลับมาใช้ใหม่
  • เมื่อใช้งานเสร็จ การเชื่อมต่อจะถูกคืนสู่ pool

การเปรียบเทียบกับแท็กซี่จอดรอ

ไดอะแกรมแสดง connection pool ที่มีการเชื่อมต่อที่เตรียมไว้ล่วงหน้าหลายรายการ พร้อมลูกศรแสดงการยืมและคืนการเชื่อมต่อ

การคิวรีฐานข้อมูล 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

การแสดง Log ของ 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...