postgresql
Blog

PostgreSQL là gì? So sánh mySQL và PostgreSQL trong lập trình

PostgreSQL được mệnh danh là cơ sở dữ liệu tiên tiến nhất hiện nay. Tuy nhiên, không phải ai cũng hiểu rõ PostgreSQL là gì, vai trò, tính năng của PostgreSQL ra sao? So với các cơ sở khác như MySQL thì như thế nào? Bài viết dưới đây sẽ đưa ra một số thông tin về PostgreSQL và so sánh đôi chút về MySQL và PostgreSQL để đọc giả hiểu rõ hơn.

PostgreSQL là gì?

PostgreSQL là một hệ quản trị cơ sở dữ liệu quan hệ – đối tượng, được phát triển bởi Khoa Điện toán, Đại học California – Hoa Kỳ dựa trên Postgres bản 4.2. Chương trình này đã mở đường cho nhiều khái niệm về hệ quản trị dữ liệu thương mại sau này. 

Ban đầu, hệ quản trị được thiết kế để chạy trên các nền tảng tương tự như Unix. Sau này, PostgreSQL được điều chỉnh trở nên linh động và chạy trên nhiều nền tảng khác nhau như Windows, Mac OS X, Solaris với nhiều tính năng và đặc điểm nổi bật.

PostgreSQL là mã nguồn mở miễn phí, được xây dựng theo chuẩn SQL99. Người dùng có thể tự do sử dụng, chỉnh sửa và phân bổ PostgreSQL theo nhiều hình thức khác nhau. 

So với nhiều hệ quản trị cơ sở dữ liệu khác, PostgreSQL không quá yêu cầu về công tác bảo trì bởi tính ổn định cao, có thể phát triển nhiều ứng dụng khác nhau với chi phí tương đối thấp.

Xem thêm: Top 10 hệ quản trị cơ sở dữ liệu

Các tính năng của PostgreSQL

Tính năng của postgresql
Tính năng của postgresql có nhiều điểm nổi bật

PostgreSQL cung cấp cho người dùng nhiều tính năng hiện đại hỗ trợ các nhà phát triển xây dựng ứng dụng như:

  • Kiểu dữ liệu: nguyên hàm (các nguyên số, boolean, số, chuỗi); cấu trúc (UUID, Phạm vi, Array, Date/time); Hình học; Tùy chỉnh; Document.
  • Toàn vẹn dữ liệu: Ràng buộc loại từ, Primary Keys, Foreign Keys, UNIQUE, NOT NULL, Khóa khuyến nghị/ Advisory Locks, Khóa hàm số/ Explicit Locks,…
  • Hiệu suất, đồng quy: Tính năng lập danh mục,  lập danh mục nâng cao, trình lập kế hoạch, trình tối ưu hóa truy cập phức tạp, thống kê số liệu trên nhiều cột, quét index – only, giao tác – giao tác dạng test, điều khiển đồng thời nhiều phiên bản (MVCC), phân vùng bảng, truy vấn đọc song song, độ tin cậy, phục hồi sau thảm họa, nhật ký ghi trước (Write-ahead Logging – WAL), replication, khôi phục điểm – thời gian, bảng
  • Chức năng bảo mật: Bảo mật, xác thực (SCRAM-SHA-256, SSPI, LDAP, GSSAPI, Certificate và các hình thức khác), hệ thống kiểm soát truy cập mạnh mẽ, bảo mật cấp độ cột – hàng.
  • Khả năng mở rộng: phương pháp lưu trữ, ngôn ngữ thủ tục (PL / PGSQL, Python, Perl, và nhiều ngôn ngữ khác), PostGIS, tính năng kết nối cơ sở dữ liệu hoặc luồng khác với giao diện SQL chuẩn, cùng nhiều tính năng mở rộng khác.
  • Tìm kiếm văn bản: Tìm kiếm văn bản đầy đủ, hệ thống các bộ ký tự quốc tế (thông qua ICU collations).
  • Tính năng khác: Khả năng quản lý số lượng người dùng đang thao tác cùng lúc, phù hợp với môi trường sản xuất quản lý nhiều terabyte và petabyte.

Vai trò PostgreSQL?

PostgreSQL là một hệ thống quản trị dữ liệu mở dành cho các doanh nghiệp. Hệ thống quản lý này tương thích với nhiều nền tảng khác nhau, sử dụng được đa dạng ngôn ngữ và phần mềm trung gian phổ biến hiện nay. Bởi vậy, PostgreSQL được áp dụng nhiều trong các ngành dữ liệu GIS của chính phủ, tài chính ngân hàng, sản xuất – kinh doanh, công nghệ web và các công việc thu thập dữ liệu khoa học.

PostgreSQL là mã nguồn mở miễn phí. Bởi vậy, bạn không cần trả bất cứ chi phí gì khi sử dụng dịch vụ này. Tuy nhiên, hệ quản trị cơ sở dữ liệu PostgreSQL lại không thuộc sở hữu của bất kỳ tổ chức nào cũng là một nhược điểm. Người dùng khó khăn khi đưa tên mình ra khỏi đó mặc dù có đủ các tính năng như hệ thống DBMS khác.

So sánh mySQL và PostgreSQL trong lập trình

So sánh Postgresql và mySQL
So sánh Postgresql và mySQL

Lựa chọn hệ quản trị cơ sở dữ liệu nào cho dự án của mình là điều vô cùng quan trọng khiến cho các nhà phát triển phần mềm phải cân nhắc. Bởi nếu không phù hợp với dự án, máy chủ có thể gây ra những phát sinh không đáng có trong quá trình phát triển, vận hành sau này. 

2 hệ thống quản trị cơ sở dữ liệu phổ biến được sử dụng hiện nay phải kể đến đó là MySQL và PostgreSQL. Vậy 2 hệ quản trị này có gì khác nhau, nên sử dụng hệ quản trị nào? Cùng theo dõi phân tích một số tiêu chí quan trọng sau đây:

Đặc điểm MySQL PostgreSQL
Non-blocking trong DDL – Thực thi thao tác nhiều DDL bằng Non – blocking. (Tức là, dù trong transaction nhưng không có block đến bảng.)

– Chức năng Non – Blocking có từ phiên bản MySQL 5.6.

– Trong trường hợp Alter table (thay đổi, điều chỉnh cột, hàng,… trong bảng), chỉ những cột đối tượng cần xử lý thì không tạo bảng từ con số không. Bởi vậy, tốc độ xử lý nhanh, kéo thiểu việc giảm tải cho máy chủ server.

– PostgreSQL sẽ tùy thuộc vào những cậu lệnh thực thi thao tác DDL nào. 

– Thao tác write, chẳng hạn như thêm cột, nó sẽ phát sinh block đến bảng, khiến bạn không thể tham chiếu thêm nữa.

– Có thể thấy, PostgreSQL thao tác DDL là Alter table không phải non – blocking. Để sử dụng được, bạn cần sự hỗ trợ của các tool. Ví dụ như pg_repack, tool này chuyên dùng cho maintain, giúp thực thi các thao tác alter table một phần hoặc tiến hành reindex bằng cách block tối thiểu.

Performance của DML (thao tác dữ liệu) – MySQL có thuật toán sort không tốt bằng PostgreSQL. Bởi vậy MySQL sẽ bị chậm hơn.

– MySQL chuyên về use case. Ví dụ, lấy da 10 hay 100 dữ liệu đầu tiền (như cách của Twitter) sẽ nhanh hơn so với PostgreSQL.

– UPDATE thì performance của MySQL tốt hơn so với PostgreSQL. Bởi MySQL ghi đè đối tượng được update, đúng nghĩa cập nhật.

– MySQL delete chậm do sau khi xóa dữ liệu nó sẽ thực hiện đánh lại secondary index xử lý đồng bộ nên tốn thời gian hơn. Từ phiên bản 5.5 trở lên sẽ cải thiện tình trạng này tốt hơn.

– Câu SELECT cần phải sort lượng dữ liệu lớn sau khi ORDER BY thì PostgreSQL sẽ làm việc nhanh hơn.

– Chậm hơn

– PostgreSQL khi update sẽ xử lý tương tự như insert. Tức là nó sẽ đánh dấu flag như delete vào dòng trước khi thay đổi, rồi thêm dòng mới có dữ liệu sau khi thay đổi.

– Delete nhanh hơn.

Thuật toán JOIN – MySQL chủ yếu sử dụng thuật toán Support Nested Loop Join, bởi hệ quản trị cơ sở dữ liệu này thiết kế đúng theo tiêu chí thuật toán đơn giản. – PostgreSQL support cả 3 loại Hash Join, Nested Loop Join, Sort Merge Join.

Trong đó:

  • Sử dụng dữ liệu cần join nhiều thì dùng Hash Join và Sort Merge join.
  • Dữ liệu đã được sort thì sử dụng Sort Merge Join.
  • Dữ liệu của các bảng được Join ít hoặc bảng ít bảng nhiều, bạn có thể dùng Nested Loop Join.
Xử lý transaction – MySQL mặc định xử lý transaction là repeatable-read. Phương thức này giúp giữ nguyên dữ liệu đọc, không lo thay đổi, mất ở một transaction khác.

– Trong trường hợp thêm dữ liệu bởi transaction khác sẽ được thấy khi chạy transaction với phantom-read. Để cải thiện tình trạng này, khi sử dụng MySQL cần dùng Next Key Locking.

PostgreSQL có tính năng Read – committed, hình thức này có khả năng xảy ra vấn đề phantom-read hoặc non – repeatable – read (hiện tượng cùng một transaction đọc cùng dữ liệu mà giá trị thay đổi).

– Trường hợp đổi sang Repeatable – read sẽ không có next key locking nên tránh được tình trạng phantom – read. Bởi vậy PostgreSQL dễ tránh conflict ngon hơn MySQL.

Store procedure, Trigger – MySQL chỉ sử dụng được SQL. Trên mỗi SQL không thực thi step của store procedure được.

– Bản MySQL 5.6 có điểm yếu là mỗi một bảng chỉ gán được tối đa 6 trigger. Nếu không thì chúng chỉ có for each row.

– Ngoài SQL, PostgreSQL còn sử dụng được cả procedure bên ngoài như python.
Dạng logic và vật lý của replication – MySQL có replication dạng logic và vật lý. Dạng logic được setting mặc định. Từ phiên bản 5.7 về sau thì dạng vật lý là mặc định. – PostgreSQL chỉ có dạng vật lý ( copy image dòng sau khi thay đổi). Nhưng từ phiên bản release beta version 10 có thể sử dụng được cả dạng logic (copy câu SQL).
Chức năng tiện lợi – MySQL chưa có chức năng này.

– MySQL thì có backup vật online còn Xtrabackup hoặc enterprise backup  không thực hiện được base backup online hay trên remote.

– PostgreSQL có hàm window, có thể apply hàm tổng, hợp thành set kết quả và phân chia thành từng phần.

Mệnh đề With có thể subquery trước khi select. Bởi vậy, chức năng tiện lợi của postgreSQL mạnh hơn.

– Chức năng Query song song giúp tăng tốc độ xử lý bằng cách sử dụng nhiều CPU để chạy query. PostgreSQL có đa dạng các tool từ OSS, PostGIS,…

– Chức năng Pg_basebackup có thể sử dụng online hoặc dùng trên remote đều được.

Ngoài ra, trong quá trình sử dụng 2 hệ quản trị cơ sở dữ liệu này, bạn sẽ thấy được nhiều ưu và nhược điểm khác nhau của chúng tùy vào từng hoàn cảnh và dự án sử dụng khác nhau.

Hi vọng những thông tin về postgreSQL và so sánh về MySQL và PostgreSQL trên sẽ giúp ích nhiều cho bạn.