Thông thường khi nói đến mô hình cluster, ta thường nghĩ đến mô hình có nhiều server phục vụ chung cho 1 ứng dụng để chia tải, phòng ngừa sự cố, đảm bảo tính sẵn sàng cao v.v…

 

Tuy nhiên khái niệm cluster trong PostgreSQL lại mang ý nghĩa khác. Thực chất cluster database ở đây là 1 tập hợp các database.

 

Khi ta khởi tạo bằng lệnh initdb, ta tạo ra 1 cluster database, dùng chung các tập tin cấu hình như pg_hba.conf, postgresql.conf,… sử dụng chung memory, các process, thư mục lưu trữ, lắng nghe kết nối từ 1 port chung…

 

Chẳng hạn ta sẽ thấy 1 cluster database như sau khi kết nối bằng pgAdmin

 

pg_cluster

 

Như vậy ta thấy, cluster database trong PostgreSQL bao gồm:

  • Các database con
  • Tablespace
  • Role
  • User

 

Điều này có nghĩa là tablespace, role, user là các đối tượng ở mức cluster database. Các database con có thể sử dụng chung các tablespace, hay user có thể được cấp quyền thao tác trên nhiều database con.

 

Với mô hình như trên, ta có thể thiết kế database cho nhiều ứng dụng theo nhiều cách:

  • Tạo nhiều schema trong 1 database con
  • Tạo nhiều database con trong 1 cluster database
  • Tạo nhiều cluster database trong 1 server
  • Có nhiều server, mỗi server 1 cluster database

 

Mỗi cách có ưu nhược điểm khác nhau. Tuy nhiên PostgreSQL bị giới hạn ở chỗ không phân chia được tài nguyên server. Do đó cần cẩn trọng trong trường hợp tạo nhiều database con hay nhiều cluster database trên 1 server, nếu 1 database dùng quá nhiều tài nguyên, các database còn lại sẽ bị ảnh hưởng.