Top Các Câu Hỏi Phỏng Vấn PostgreSQL - Từ Cơ Bản đến Nâng Cao
Dưới đây là bài viết tổng hợp các câu hỏi phỏng vấn PostgreSQL được chia theo các cấp độ từ cơ bản đến nâng cao, giúp bạn ôn tập lại các khái niệm quan trọng và chuẩn bị tốt hơn cho buổi phỏng vấn.
Top Các Câu Hỏi Phỏng Vấn PostgreSQL: Từ Cơ Bản đến Nâng Cao
Trong quá trình ứng tuyển vào các vị trí liên quan đến quản trị cơ sở dữ liệu hoặc phát triển ứng dụng, PostgreSQL là một trong những công nghệ phổ biến và được đánh giá cao nhờ tính ổn định, linh hoạt và hiệu năng vượt trội. Việc nắm vững các kiến thức liên quan không chỉ giúp bạn tự tin hơn khi tham gia phỏng vấn mà còn thể hiện sự chuyên nghiệp trong công việc. Bài viết dưới đây sẽ giúp bạn ôn tập qua các câu hỏi được chia theo 3 cấp độ: cơ bản, trung cấp và nâng cao, kèm theo một số câu hỏi bổ sung thường gặp.
1. Câu Hỏi Cấp Độ Cơ Bản
PostgreSQL là gì?
PostgreSQL là hệ quản trị cơ sở dữ liệu quan hệ đối tượng mã nguồn mở, nổi tiếng với tính năng mạnh mẽ, hỗ trợ truy vấn phức tạp, giao dịch đồng thời và đảm bảo tính toàn vẹn của dữ liệu.
Các tính năng chính của PostgreSQL
- Giao dịch ACID: Đảm bảo tính nhất quán và an toàn của dữ liệu.
- Các kiểu dữ liệu phong phú: Hỗ trợ nhiều loại dữ liệu khác nhau.
- MVCC (Multi-Version Concurrency Control): Cho phép nhiều giao dịch thực hiện đồng thời mà không bị ảnh hưởng lẫn nhau.
- Chỉ mục (Indexing): Tăng tốc độ truy xuất dữ liệu.
- Tìm kiếm full-text: Hỗ trợ tìm kiếm dữ liệu văn bản.
- Hỗ trợ JSON: Lưu trữ và xử lý dữ liệu JSON hiệu quả.
- Khả năng mở rộng: Cho phép định nghĩa các hàm và kiểu dữ liệu tùy chỉnh.
Bảng, Database và Schema là gì?
- Bảng: Là tập hợp các hàng và cột dùng để lưu trữ dữ liệu có cấu trúc. Mỗi hàng đại diện cho một bản ghi và mỗi cột thể hiện thuộc tính của bản ghi đó.
- Database (Cơ sở dữ liệu): Là container chứa các bảng, view, hàm và các đối tượng khác. Một server PostgreSQL có thể chứa nhiều cơ sở dữ liệu.
- Schema: Là không gian tên chứa các đối tượng của cơ sở dữ liệu như bảng, view và hàm, giúp tổ chức và quản lý dữ liệu một cách hiệu quả.
Các thành phần và công cụ khác
- psql: Giao diện dòng lệnh cho phép người dùng chạy truy vấn và quản lý cơ sở dữ liệu.
- Primary Key: Khóa chính dùng để định danh duy nhất cho mỗi bản ghi, không cho phép giá trị trùng lặp hay NULL.
- Foreign Key: Khóa ngoại tạo liên kết giữa các bảng, đảm bảo tính toàn vẹn của dữ liệu thông qua tham chiếu.
- Index: Cấu trúc dữ liệu giúp tối ưu hóa tốc độ truy xuất thông tin từ bảng.
- View: Bảng ảo được tạo từ một truy vấn, giúp trình bày dữ liệu theo định dạng nhất định mà không cần lưu trữ thêm.
- Sequence: Đối tượng tạo ra chuỗi số duy nhất, thường dùng cho các trường tự tăng như khóa chính.
- pgAdmin: Giao diện quản trị đồ họa, hỗ trợ quản lý cơ sở dữ liệu một cách trực quan.
- VACUUM: Lệnh dọn dẹp các bản ghi đã bị xóa để thu hồi không gian lưu trữ và duy trì hiệu năng của cơ sở dữ liệu.
Kiểu dữ liệu ký tự và giao dịch
- CHAR, VARCHAR và TEXT:
- CHAR: Kiểu ký tự có độ dài cố định.
- VARCHAR: Kiểu ký tự biến động với giới hạn độ dài.
- TEXT: Kiểu ký tự biến động không giới hạn độ dài.
- Transaction (Giao dịch): Chuỗi các lệnh SQL được thực hiện như một đơn vị công việc, đảm bảo tính nhất quán nếu thực hiện thành công hoặc hoàn tác nếu có lỗi xảy ra.
2. Câu Hỏi Cấp Độ Trung
MVCC trong PostgreSQL là gì?
MVCC (Multi-Version Concurrency Control) cho phép xử lý các giao dịch đồng thời bằng cách duy trì nhiều phiên bản của dữ liệu, giúp người dùng đọc dữ liệu nhất quán mà không bị cản trở bởi các thao tác ghi dữ liệu.
EXPLAIN và các loại JOIN
- EXPLAIN: Lệnh dùng để phân tích kế hoạch thực thi của truy vấn, giúp xác định cách PostgreSQL tối ưu hóa truy vấn và tìm ra các điểm cần cải thiện.
- Các loại JOIN:
- INNER JOIN: Trả về các bản ghi khớp ở cả hai bảng.
- LEFT JOIN: Trả về tất cả các bản ghi của bảng bên trái và các bản ghi khớp của bảng bên phải.
- RIGHT JOIN: Ngược lại với LEFT JOIN.
- FULL JOIN: Trả về các bản ghi khi có sự khớp ở bất kỳ bảng nào.
CTE (Common Table Expression) và các khái niệm khác
- CTE: Là tập kết quả tạm thời được định nghĩa bằng lệnh WITH trong một truy vấn, giúp chia nhỏ các truy vấn phức tạp thành các phần dễ quản lý.
- UNION vs. UNION ALL:
- UNION: Kết hợp kết quả của hai truy vấn và loại bỏ các bản ghi trùng lặp.
- UNION ALL: Kết hợp kết quả mà không loại bỏ trùng lặp, thường nhanh hơn.
- json vs. jsonb:
- json: Lưu trữ dữ liệu JSON dưới dạng văn bản.
- jsonb: Lưu trữ ở dạng nhị phân, cho phép chỉ mục và cải thiện hiệu năng.
Stored Procedure, Trigger và Window Function
- Stored Procedure: Tập hợp các lệnh SQL được lưu trữ trên server, giúp thực hiện các tác vụ phức tạp và tái sử dụng mã nguồn.
- Trigger: Hàm tự động kích hoạt trước hoặc sau các thao tác INSERT, UPDATE, DELETE trên bảng.
- Window Function: Hàm tính toán trên tập hợp các hàng liên quan đến hàng hiện tại, hữu ích cho các phép tính tổng lũy kế, trung bình di động, v.v.
Xử lý đồng thời (Concurrency)
PostgreSQL sử dụng cơ chế MVCC kết hợp với khóa cấp độ hàng để cho phép nhiều giao dịch thực hiện đồng thời mà không gây ra xung đột dữ liệu.
3. Câu Hỏi Cấp Độ Nâng Cao
Partitioned Table và replication
- Partitioned Table: Là cấu trúc logic giúp chia một bảng lớn thành các phần nhỏ hơn, nhằm cải thiện hiệu năng truy vấn và quản lý dữ liệu.
- Replication: Cơ chế sao chép dữ liệu từ server chính sang server dự phòng. PostgreSQL hỗ trợ:
- Streaming Replication: Dữ liệu được chuyển liên tục giữa các server.
- Logical Replication: Cho phép sao chép các bảng hoặc đối tượng cụ thể.
Giám sát và quản lý hệ thống
- pg_stat_activity: View hệ thống cung cấp thông tin về các truy vấn và kết nối đang hoạt động, hỗ trợ việc giám sát hiệu năng.
- Tablespace: Vị trí trên ổ đĩa để lưu trữ các file dữ liệu, giúp phân phối và tối ưu hóa không gian lưu trữ.
Tối ưu hóa truy vấn
Các kỹ thuật tối ưu hóa bao gồm:
- Sử dụng chỉ mục phù hợp.
- Phân tích kế hoạch truy vấn với lệnh EXPLAIN.
- Chia nhỏ bảng lớn bằng partitioning.
- Thực hiện VACUUM định kỳ.
- Tận dụng materialized views cho dữ liệu thường xuyên truy xuất.
4. Các Câu Hỏi Bổ Sung
JOIN vs. Subquery
Lựa chọn giữa JOIN và Subquery phụ thuộc vào trường hợp cụ thể:
- JOIN: Thường được ưu tiên khi cần kết hợp dữ liệu từ nhiều bảng nhờ khả năng tối ưu khi có chỉ mục.
- Subquery: Có thể đơn giản hơn khi viết, nhưng nếu xử lý khối lượng dữ liệu lớn có thể làm giảm hiệu năng. Nên đánh giá hiệu quả bằng cách sử dụng EXPLAIN.
Sự khác biệt giữa SERIAL và INTEGER
- SERIAL: Là kiểu số tự tăng, về cơ bản là kiểu INTEGER kết hợp với một sequence tự động tăng giá trị.
- INTEGER: Là kiểu số nguyên thông thường, không tự động tăng giá trị.
Sự khác biệt giữa DATE và TIMESTAMP
- DATE: Chỉ lưu trữ thông tin ngày (năm, tháng, ngày), phù hợp với dữ liệu không cần theo dõi thời gian chi tiết.
- TIMESTAMP: Lưu trữ đầy đủ thông tin ngày và giờ, thích hợp cho các trường hợp cần ghi nhận thời gian chính xác. Cả hai kiểu dữ liệu đều có thể đi kèm với thông tin múi giờ nếu cần.
Sự khác biệt giữa CTE và VIEW
- CTE (Common Table Expression): Tập kết quả tạm thời được định nghĩa trong truy vấn bằng lệnh WITH, chỉ tồn tại trong suốt quá trình thực thi truy vấn đó.
- VIEW: Bảng ảo được lưu trữ trong cơ sở dữ liệu dưới dạng truy vấn, có thể tái sử dụng nhiều lần và cung cấp một lớp trừu tượng bảo vệ dữ liệu.
Kết Luận
Việc chuẩn bị cho phỏng vấn PostgreSQL đòi hỏi sự nắm vững không chỉ các khái niệm cơ bản mà còn cả những kiến thức nâng cao về xử lý dữ liệu, tối ưu hóa truy vấn và quản lý hệ thống. Qua bài viết này, bạn có thể hình dung được một số câu hỏi phổ biến mà nhà tuyển dụng có thể đặt ra, từ đó có thêm cơ sở để ôn tập và chuẩn bị cho buổi phỏng vấn. Hãy thường xuyên thực hành và cập nhật kiến thức để luôn tự tin và sẵn sàng cho những thử thách mới trong công việc.