Trang chủ / Chuyên đề / So sánh SQLite , MySQL , PostgreSQL
Thứ ba, 19/03/2019 | 00:00 GMT+7

So sánh SQLite , MySQL , PostgreSQL

Mô hình dữ liệu quan hệ (relational data model) tổ chức dữ liệu trong bảng hàng và cột, chiếm ưu thế trong các công cụ quản lý database. Ngày nay có các mô hình dữ liệu khác, bao gồm NoSQL và NewSQL , nhưng hệ thống quản lý database quan hệ (RDBMS - relational database management systems) vẫn chiếm ưu thế trong việc lưu trữ và quản lý dữ liệu trên toàn thế giới.

Bài viết này so sánh ba trong số các RDBMS nguồn mở được triển khai rộng rãi nhất: SQLite , MySQLPostgreSQL . Ta sẽ khám phá các kiểu dữ liệu mà mỗi RDBMS sử dụng, ưu nhược điểm của chúng và các tình huống mà chúng được tối ưu hóa tốt nhất.

Sơ bộ về hệ thống quản lý database

Database là các cụm thông tin hoặc dữ liệu được mô hình hóa một cách logic. Mặt khác, hệ quản trị database (DBMS) là một chương trình máy tính tương tác với database. DBMS cho phép bạn kiểm soát quyền truy cập vào database, ghi dữ liệu, chạy truy vấn và thực hiện bất kỳ tác vụ nào khác liên quan đến quản lý database. Mặc dù hệ quản trị database vẫn hay được gọi là “database”, hai thuật ngữ này không thể thay thế cho nhau. Database có thể là bất kỳ tập hợp dữ liệu nào, không chỉ được lưu trữ trên máy tính, trong khi DBMS là phần mềm cho phép bạn tương tác với database.

Tất cả các hệ quản trị database đều có một mô hình cơ bản cấu trúc cách dữ liệu được lưu trữ và truy cập. Hệ quản trị database quan hệ là một DBMS sử dụng mô hình dữ liệu quan hệ. Trong mô hình này, dữ liệu được tổ chức thành các bảng, trong ngữ cảnh của RDBMS được gọi chính thức hơn là các quan hệ (relations). Mối quan hệ là một tập hợp các bộ giá trị hoặc các hàng trong một bảng, với mỗi bộ giá trị chia sẻ một tập hợp các thuộc tính hoặc các cột:

Ví dụ về sơ đồ cho thấy quan hệ, bộ giá trị và thuộc tính liên quan với nhau như thế nào

Hầu hết các database quan hệ sử dụng ngôn ngữ truy vấn có cấu trúc (SQL) để quản lý và truy vấn dữ liệu. Tuy nhiên, nhiều RDBMS sử dụng thêm bộ lệnh SQL của riêng họ, có thể có một số hạn chế hoặc phần mở rộng nhất định. Các phần mở rộng này thường bao gồm các tính năng bổ sung cho phép user thực hiện các hoạt động phức tạp hơn so với những gì họ có thể làm với SQL chuẩn (standard SQL). 

Lưu ý: Thuật ngữ "SQL chuẩn" xuất hiện nhiều lần trong suốt hướng dẫn này. Các tiêu chuẩn SQL được Viện Tiêu chuẩn Quốc gia USA (ANSI) , Tổ chức Tiêu chuẩn hóa Quốc tế (ISO)Ủy ban Kỹ thuật Điện Quốc tế (IEC) đồng duy trì. Khi nào bài viết này đề cập đến “chuẩn SQL” , là đề cập đến version hiện tại của tiêu chuẩn SQL được xuất bản bởi các cơ quan này.

Cần lưu ý tiêu chuẩn SQL đầy đủ rất lớn và phức tạp: tuân theo SQL:2011 đầy đủ yêu cầu 179 tính năng. Do đó, hầu hết các RDBMS không hỗ trợ toàn bộ tiêu chuẩn, mặc dù một số đã tiến gần đến việc tuân theo đầy đủ hơn.

Mỗi cột được gán một kiểu dữ liệu cho phép loại dữ liệu nào được phép trong cột đó. Các RDBMS khác nhau triển khai các kiểu dữ liệu khác nhau, không phải lúc nào cũng có thể hoán đổi trực tiếp cho nhau. Một số kiểu dữ liệu phổ biến bao gồm ngày, chuỗi, số nguyên và Boolean.

Loại dữ liệu số hoặc có thể là có dấu signed hoặc không dấu unsigned. Ví dụ, kiểu dữ liệu tinyint của MySQL có thể chứa 8 bit dữ liệu, tương đương với 256 giá trị có thể. Phạm vi có dấu của kiểu dữ liệu này là từ -128 đến 127,  khi phạm vi không có dấu là từ 0 đến 255.

Đôi khi, người quản trị database sẽ áp đặt một ràng buộc (constraint) với một bảng để giới hạn những giá trị nào có thể được nhập vào đó. Một ràng buộc thường áp dụng cho một cột cụ thể, một số ràng buộc cũng có thể áp dụng cho toàn bộ bảng. Dưới đây là một số ràng buộc thường được sử dụng trong SQL:

  • UNIQUE : Áp dụng ràng buộc này cho một cột đảm bảo không có hai giá trị nhập nào trong cột đó giống nhau.
  • NOT NULL : Ràng buộc này đảm bảo một cột không có giá trị NULL nào.
  • PRIMARY KEY : Là sự kết hợp của UNIQUENOT NULL , ràng buộc PRIMARY KEY đảm bảo không có giá trị nhập nào trong cột là NULL và mọi giá trị nhập đều khác nhau.
  • FOREIGN KEY : FOREIGN KEY FOREIGN KEY là một cột trong một bảng đề cập đến PRIMARY KEY của một bảng khác. Ràng buộc này được sử dụng để liên kết hai bảng với nhau: các giá trị nhập vào cột FOREIGN KEY phải tồn tại trong cột PRIMARY KEY mẹ để quá trình nhập thành công.
  • CHECK : Ràng buộc này giới hạn phạm vi giá trị có thể được nhập vào một cột. Ví dụ: nếu ứng dụng của bạn chỉ dành cho cư dân Alaska, bạn có thể thêm ràng buộc CHECK trên cột mã ZIP để chỉ cho phép các giá trị nhập từ 99501 đến 99950.

Nếu bạn muốn tìm hiểu thêm về hệ quản trị database, hãy xem bài viết về Tìm hiểu database SQL và NoSQL và các mô hình database khác nhau .

Bây giờ ta đã đề cập đến hệ thống quản lý database quan hệ nói chung, hãy chuyển sang phần đầu tiên trong ba database quan hệ nguồn mở mà bài viết này sẽ đề cập: SQLite.

SQLite

SQLite là một RDBMS open-souce độc lập, dựa trên file (so với  Mysql, Postgre là dựa trên server phục vụ, cho các client truy cập) và được biết đến với tính di động, độ tin cậy và hiệu suất mạnh mẽ ngay cả trong môi trường bộ nhớ thấp. Các giao dịch của nó tuân theo ACID - một tiêu chuẩn về Database.

Trang web của dự án SQLite mô tả nó như một database “không có server”. Với SQLite, bất kỳ quá trình nào truy cập vào database đều đọc và ghi trực tiếp vào file database. Điều này đơn giản hóa quy trình cài đặt của SQLite. Tương tự như vậy, không cần cấu hình cho các chương trình sẽ sử dụng database SQLite: tất cả những gì cần là quyền truy cập vào file.

SQLite là phần mềm open-souce và miễn phí, không cần có giấy phép đặc biệt để sử dụng. Tuy nhiên, dự án cung cấp một số tiện ích mở rộng - mỗi tiện ích trả phí một lần - giúp nén và mã hóa. Ngoài ra, dự án còn cung cấp các gói hỗ trợ thương mại khác nhau, mỗi gói tính phí hàng năm.

Các kiểu dữ liệu được hỗ trợ của SQLite

SQLite cho phép nhiều kiểu dữ liệu khác nhau, được tổ chức thành các lớp lưu trữ sau:

Loại dữ liệu Giải thích
null Bao gồm bất kỳ giá trị NULL nào.
integer Số nguyên có dấu, được lưu trữ trong 1, 2, 3, 4, 6 hoặc 8 byte tùy thuộc vào độ lớn của giá trị.
real Số thực hoặc giá trị dấu phẩy động, được lưu trữ dưới dạng số dấu phẩy động 8 byte.
text Chuỗi văn bản được lưu trữ bằng cách sử dụng mã hóa database, có thể là UTF-8, UTF-16BE hoặc UTF-16LE.
blob Bất kỳ khối dữ liệu nào, với mỗi khối được lưu trữ chính xác như đầu vào.

Trong ngữ cảnh của SQLite, các thuật ngữ “lớp lưu trữ” và “kiểu dữ liệu” (“storage class” and “data type”) được coi như nhau. Nếu bạn muốn tìm hiểu thêm về các kiểu dữ liệu của SQLite và mối quan hệ với kiểu SQLite, hãy xem tài liệu chính thức của SQLite về chủ đề này.

Ưu điểm của SQLite

  • Small footprint : Như tên gọi của nó, thư viện SQLite rất nhẹ. Mặc dù không gian mà nó sử dụng khác nhau tùy thuộc vào hệ thống mà nó được cài đặt, nó có thể chiếm ít hơn 600KiB dung lượng. Ngoài ra, nó hoàn toàn độc lập, nghĩa là không có bất kỳ phụ thuộc bên ngoài nào mà bạn phải cài đặt trên hệ thống của bạn để SQLite hoạt động.
  • User-friendly : SQLite đôi khi được mô tả như một database “không cấu hình” sẵn sàng để sử dụng. SQLite không chạy như một tiến trình server, nghĩa là nó không bao giờ cần phải dừng, khởi động hoặc khởi động lại và không đi kèm với các file cấu hình nào cần được quản lý. Các tính năng này giúp sắp xếp hợp lý đường dẫn từ cài đặt SQLite đến tích hợp nó với một ứng dụng.
  • Portable : Không giống như các hệ quản trị database khác, thường lưu trữ dữ liệu dưới dạng các file riêng biệt, toàn bộ database SQLite được lưu trữ trong một file duy nhất. File này có thể được đặt ở bất kỳ đâu trên các folder và có thể được chia sẻ qua phương tiện di động...

Nhược điểm của SQLite

  • Limited concurrency : Mặc dù nhiều chương trình có thể truy cập và truy vấn database SQLite cùng một lúc, nhưng chỉ một chương trình có thể áp dụng các thay đổi đối với database tại 1 thời điểm. SQLite hỗ trợ việc truy cập đồng thời lớn hơn hầu hết các hệ thống quản lý database NHÚNG (embed) khác, nhưng không bằng các RDBMS như MySQL hoặc PostgreSQL.
  • Không có quản lý user: Hệ thống database thường đi kèm với sự hỗ trợ cho user , hoặc các kết nối được quản lý với các quyền truy cập được định nghĩa vào database và bảng. Bởi vì SQLite đọc và ghi trực tiếp vào một file thông thường, các quyền truy cập áp dụng duy nhất là các quyền truy cập file của hệ điều hành cơ bản. Điều này làm cho SQLite trở thành một lựa chọn tồi cho các ứng dụng yêu cầu nhiều user với các quyền truy cập đặc biệt.
  • Bảo mật : Công cụ database sử dụng server, trong một số trường hợp, có thể cung cấp khả năng bảo vệ khỏi các lỗi trong ứng dụng client tốt hơn so với database không có server và chỉ dựa trên file như SQLite.

Khi nào sử dụng SQLite

  • Ứng dụng nhúng : SQLite là lựa chọn database tuyệt vời cho các ứng dụng cần tính di động và không yêu cầu mở rộng lớn trong tương lai. Ví dụ bao gồm các ứng dụng local dành cho một user và các ứng dụng hoặc trò chơi dành cho thiết bị di động.
  • Thay thế quyền truy cập đĩa : Trong trường hợp ứng dụng cần đọc và ghi file trực tiếp vào đĩa, có thể có lợi khi sử dụng SQLite để có thêm chức năng và sự đơn giản đi kèm với việc sử dụng SQL.

Khi nào không sử dụng SQLite

  • Làm việc với nhiều dữ liệu : SQLite về mặt kỹ thuật có thể hỗ trợ database có kích thước lên đến 140TB, miễn là ổ đĩa và hệ thống file cũng hỗ trợ các yêu cầu về kích thước của database. Tuy nhiên, trang web SQLite khuyến nghị rằng bất kỳ database nào đạt đến 1TB nên được lưu trữ trên database server-client tập trung, vì database SQLite có kích thước đó hoặc lớn hơn sẽ khó quản lý.
  • Dung lượng ghi cao : SQLite chỉ cho phép một thao tác ghi diễn ra tại bất kỳ thời điểm nào, điều này hạn chế đáng kể tốc độ của nó. Nếu ứng dụng của bạn yêu cầu nhiều thao tác ghi đồng thời, SQLite có thể không đáp ứng được nhu cầu.
  • Cần có quyền truy cập mạng : Vì SQLite là database không có server nên nó không cung cấp quyền truy cập mạng trực tiếp vào dữ liệu của nó. DBMS client-server là lựa chọn tốt hơn với ứng dụng client-server.

MySQL

Theo Xếp hạng DB-Engines , MySQL là RDBMS nguồn mở phổ biến nhất kể từ khi trang web bắt đầu theo dõi mức độ phổ biến của database vào năm 2012. Đây là một sản phẩm giàu tính năng cung cấp cho nhiều trang web và ứng dụng lớn nhất thế giới, bao gồm Twitter, Facebook. , Netflix và Spotify. Bắt đầu với MySQL tương đối đơn giản, phần lớn nhờ vào tài liệu đầy đủ của nó và cộng đồng lớn các nhà phát triển , cũng như sự phong phú của các tài nguyên trực tuyến liên quan đến MySQL.

MySQL có tốc độ và độ tin cậy cao, tuân theo SQL tiêu chuẩn. Các nhà phát triển MySQL liên tục làm việc hướng tới việc tuân theo chặt chẽ hơn SQL tiêu chuẩn, dù có thể là chậm hơn chuẩn mới ra. Không giống như các ứng dụng sử dụng SQLite, các ứng dụng sử dụng database MySQL truy cập nó thông qua một quy trình daemon riêng biệt. Bởi vì tiến trình server nằm giữa database và các ứng dụng khác, nó cho phép kiểm soát tốt hơn ai có quyền truy cập vào database.

MySQL đã thúc đẩy vô số ứng dụng, công cụ và thư viện tích hợp của bên thứ ba nhằm mở rộng chức năng của nó và giúp làm việc dễ dàng hơn. Một số công cụ của bên thứ ba được sử dụng rộng rãi hơn là phpMyAdmin , DBeaverHeidiSQL .

Các kiểu dữ liệu được hỗ trợ của MySQL

Các kiểu dữ liệu của MySQL có thể được tổ chức thành ba loại chính: kiểu số, kiểu ngày và giờ và kiểu chuỗi.

Loại số :

Loại dữ liệu Giải thích
tinyint Số nguyên. Phạm vi có dấu cho kiểu dữ liệu số này là -128 đến 127, trong khi phạm vi không dấu là 0 đến 255.
smallint Số nguyên . Dải có dấu cho kiểu số này là -32768 đến 32767, trong khi dải không dấu là 0 đến 65535.
mediumint Một số nguyên cỡ vừa. Dải có dấu cho kiểu dữ liệu số này là -8388608 đến 8388607, trong khi dải không dấu là 0 đến 16777215.
int hoặc integer Một số nguyên có kích thước bình thường. Phạm vi có dấu cho kiểu dữ liệu số này là -2147483648 đến 2147483647, trong khi phạm vi không dấu là 0 đến 4294967295.
bigint Một số nguyên lớn. Dải có dấu cho kiểu dữ liệu số này là -9223372036854775808 đến 9223372036854775807, trong khi dải không dấu là 0 đến 18446744073709551615.
float Số dấu phẩy động (thập phân).
double , double precision , hoặc real Số dấu phẩy động (thập phân) dài hơn.
dec , decimal , fixed , hoặc numeric Số cố định, độ dài cho kiểu dữ liệu này được xác định khi cột được tạo và mọi giá trị nhập theo độ dài đó.
bool hoặc boolean Boolean - kiểu dữ liệu chỉ có hai giá trị là true hoặc false .
bit giá trị bit mà ta có thể chỉ định số bit từ 1 đến 64.

Các loại ngày và giờ :

Loại dữ liệu Giải thích
date Ngày, được biểu thị là YYYY-MM-DD .
datetime Dấu thời gian hiển thị ngày và giờ, được hiển thị là YYYY-MM-DD HH:MM:SS .
timestamp Số thời gian cho biết số giây (seconds) kể từ Start Unix Time (00:00:00 ngày 1 tháng 1 năm 1970).
time Thời gian trong ngày, được hiển thị dưới dạng HH:MM:SS .
year Năm, định dạng 2 hoặc 4 chữ số, với 4 chữ số là mặc định.

Các loại chuỗi :

Loại dữ liệu Giải thích
char Một chuỗi có độ dài cố định
varchar Một chuỗi có độ dài thay đổi
binary Tương tự như kiểu char , nhưng là một chuỗi byte binary (nhị-phân) có độ dài được chỉ định
varbinary Tương tự như kiểu varchar , nhưng là một chuỗi byte binary (nhị-phân) có độ dài thay đổi
blob Một chuỗi binary (nhị-phân) có độ dài tối đa là 65535 (2 ^ 16 - 1) byte dữ liệu.
tinyblob Một cột blob có độ dài tối đa là 255 (2 ^ 8 - 1) byte dữ liệu.
mediumblob Một cột blob có độ dài tối đa là 16777215 (2 ^ 24 - 1) byte dữ liệu.
longblob Một cột blob có độ dài tối đa là 4294967295 (2 ^ 32 - 1) byte dữ liệu.
text Một chuỗi có độ dài tối đa là 65535 (2 ^ 16 - 1) ký tự.
tinytext text có độ dài tối đa là 255 (2 ^ 8 - 1) ký tự.
mediumtext text có độ dài tối đa là 16777215 (2 ^ 24 - 1) ký tự.
longtext text có độ dài tối đa là 4294967295 (2 ^ 32 - 1) ký tự.
enum Một kiểu liệt kê, là một đối tượng chuỗi lấy một giá trị duy nhất từ danh sách các giá trị được khai báo khi bảng được tạo.
set Tương tự như kiểu liệt kê, một đối tượng chuỗi có thể có không hoặc nhiều giá trị, mỗi giá trị trong số đó phải được chọn từ danh sách các giá trị được phép được chỉ định khi tạo bảng.

Ưu điểm của MySQL

  • Tính phổ biến và dễ sử dụng : Là một trong những hệ thống database phổ biến nhất thế giới, không thiếu những quản trị viên database có kinh nghiệm làm việc với MySQL. Tương tự, có rất nhiều tài liệu database MySQL, cũng như công cụ của bên thứ ba - chẳng hạn như phpMyAdmin - nhằm đơn giản hóa sử dụng database.
  • Bảo mật : MySQL được cài đặt với một tập lệnh giúp bạn cải thiện tính bảo mật của database của bạn bằng cách đặt cấp độ bảo mật password của cài đặt, xác định password cho user root , xóa account ẩn danh và xóa database thử nghiệm, theo mặc định, có thể truy cập được tất cả người sử dụng. Ngoài ra, không giống như SQLite, MySQL hỗ trợ quản lý user và cho phép bạn cấp quyền truy cập trên cơ sở từng user.
  • Tốc độ : Bằng cách chọn không triển khai các tính năng nhất định của SQL, các nhà phát triển MySQL đã có thể ưu tiên tốc độ. Trong khi các bài kiểm tra điểm chuẩn gần đây hơn cho thấy các RDBMS khác như PostgreSQL có thể phù hợp hoặc ít nhất là gần với MySQL về tốc độ, MySQL vẫn giữ danh tiếng là một giải pháp database cực kỳ nhanh.
  • Nhân rộng : MySQL hỗ trợ một số kiểu sao chép khác nhau, đó là thực hành chia sẻ thông tin trên hai hoặc nhiều server để giúp cải thiện độ tin cậy, tính khả dụng và khả năng chịu lỗi. Điều này rất hữu ích cho sao lưu hoặc mở rộng database theo chiều ngang (horizontally scaling).

Nhược điểm của MySQL

  • Các hạn chế đã biết : Vì MySQL được thiết kế cho tốc độ và dễ sử dụng hơn là tuân theo SQL đầy đủ, nên nó có một số hạn chế về chức năng. Ví dụ, nó thiếu hỗ trợ cho các mệnh đề FULL JOIN .
  • Giấy phép sử dụng và các tính năng độc quyền : MySQL là phần mềm được cấp phép kép , với version cộng đồng nguồn mở và miễn phí được cấp phép theo GPLv2 và một số version thương mại trả phí được phát hành theo giấy phép độc quyền. Do đó, một số tính năng và plugin chỉ có sẵn cho các version độc quyền.
  • Phát triển chậm lại : Kể từ khi dự án MySQL được mua lại bởi Sun Microsystems vào năm 2008 và sau đó là Tập đoàn Oracle vào năm 2009, đã có những phàn nàn từ user rằng quá trình phát triển cho DBMS đã chậm lại đáng kể, vì cộng đồng không còn cơ quan để phản ứng nhanh với các vấn đề và áp dụng các thay đổi.

Khi nào sử dụng MySQL

  • Hoạt động phân tán : Hỗ trợ phân tán (replication) của MySQL làm cho nó trở thành một lựa chọn tuyệt vời cho các  database phân tán như kiến trúc primary-secondary hoặc primary-primary .
  • Trang web và ứng dụng web : MySQL hỗ trợ nhiều trang web và ứng dụng trên internet. Điều này phần lớn là nhờ vào việc dễ dàng cài đặt database MySQL, cũng như tốc độ tổng thể và khả năng mở rộng của nó trong thời gian dài.
  • Dự kiến tăng trưởng trong tương lai : Hỗ trợ replication  của MySQL có thể giúp tạo điều kiện mở rộng theo chiều ngang (horizontal scaling). Ngoài ra, đây là một quá trình tương đối đơn giản để nâng cấp lên một sản phẩm MySQL thương mại, như MySQL Cluster, hỗ trợ phân bổ tự động, một quy trình mở rộng ngang khác.

Khi nào không sử dụng MySQL

  • Khi cần tuân thủ hoàn toàn chuẩn SQL: Vì MySQL không cố gắng triển khai tiêu chuẩn SQL đầy đủ, công cụ này không hoàn toàn tuân theo SQL. Nếu việc tuân theo SQL hoàn chỉnh hoặc thậm chí gần như hoàn chỉnh là điều bắt buộc cho trường hợp sử dụng của bạn, bạn có thể cần sử dụng một DBMS tuân theo đầy đủ hơn.
  • Hỗ trợ đồng thời lớn và lượng dữ liệu lớn : Mặc dù MySQL thường hoạt động tốt với các hoạt động đọc nhiều nhưng việc đọc-ghi đồng thời có thể có vấn đề. Nếu ứng dụng của bạn có nhiều user ghi dữ liệu vào nó cùng một lúc, một RDBMS khác như PostgreSQL có thể là lựa chọn database tốt hơn.

PostgreSQL

PostgreSQL, còn gọi là Postgres, tự nhận là “database quan hệ open-souce tiên tiến nhất trên thế giới”. Nó được tạo ra với khả năng mở rộng cao và tuân theo các tiêu chuẩn. PostgreSQL là một database quan hệ đối tượng, nghĩa là mặc dù nó chủ yếu là một database quan hệ nhưng nó cũng bao gồm các tính năng - như kế thừa bảng và nạp chồng hàm (table inheritance and function overloading) - thường được liên kết với database đối tượng .

Postgres có khả năng xử lý hiệu quả nhiều tác vụ cùng lúc, một đặc tính được gọi là concurrency (đồng thời). Nó đạt được điều này mà không cần khóa việc đọc (read lock) nhờ vào việc triển khai Điều khiển đồng thời đa phiên bản (MVCC  -  Multiversion Concurrency Control) , đảm bảo tính toàn vẹn, nhất quán và độ ổn định của các giao dịch, còn gọi là tuân theo ACID.

PostgreSQL không được sử dụng rộng rãi bằng MySQL, nhưng vẫn có một số công cụ và thư viện của bên thứ ba được thiết kế để đơn giản hóa làm việc với PostgreSQL, bao gồm pgAdminPostbird .

Các kiểu dữ liệu được hỗ trợ của PostgreSQL

PostgreSQL hỗ trợ các kiểu dữ liệu số, chuỗi và ngày giờ như MySQL. Ngoài ra, nó hỗ trợ các kiểu dữ liệu cho các hình dạng hình học, địa chỉ mạng, chuỗi bit, tìm kiếm văn bản và JSON, cũng như một số kiểu dữ liệu mang phong cách riêng.

Loại số :

Loại dữ liệu Giải thích
bigint Một số nguyên 8 byte có dấu.
bigserial Một số nguyên 8 byte tự động cộng gộp.
double precision Số dấu phẩy động chính xác kép 8 byte.
integer Một số nguyên 4 byte có dấu.
numeric hoặc decimal Một số độ chính xác có thể lựa chọn, được khuyến khích sử dụng trong những trường hợp mà độ chính xác là quan trọng, chẳng hạn như số tiền.
real Một số dấu phẩy động chính xác 4 byte.
smallint Một số nguyên 2 byte có dấu.
smallserial Một số nguyên 2 byte tự động tăng.
serial Một số nguyên 4 byte tự động tăng.

Các loại nhân vật :

Loại dữ liệu Giải thích
character Một chuỗi ký tự có độ dài cố định được chỉ định.
character varying hoặc varchar Một chuỗi ký tự có độ dài thay đổi nhưng có giới hạn.
text Một chuỗi ký tự có độ dài thay đổi, không giới hạn.

Các loại ngày và giờ :

Loại dữ liệu Giải thích
date Lịch ngày bao gồm ngày, tháng và năm.
interval Một khoảng thời gian.
time hoặc time without time zone Một thời gian trong ngày, không bao gồm múi giờ.
time with time zone Một thời gian trong ngày, bao gồm cả múi giờ.
timestamp hoặc timestamp without time zone Ngày và giờ, không bao gồm múi giờ.
timestamp with time zone Ngày và giờ, bao gồm cả múi giờ.

Các loại hình học :

Loại dữ liệu Giải thích
box Một hình hộp chữ nhật trên một mặt phẳng.
circle Một vòng tròn trên một mặt phẳng.
line Một đường vô hạn trên một mặt phẳng.
lseg Một đoạn thẳng trên một mặt phẳng.
path Một đường hình học trên một mặt phẳng.
point Một điểm hình học trên một mặt phẳng.
polygon Một đường hình học khép kín trên một mặt phẳng.

Các loại địa chỉ mạng :

Loại dữ liệu Giải thích
cidr Địa chỉ mạng IPv4 hoặc IPv6.
inet Địa chỉ server IPv4 hoặc IPv6.
macaddr Địa chỉ Kiểm soát Truy cập Phương tiện (MAC).

Các loại chuỗi bit :

Loại dữ liệu Giải thích
bit Một chuỗi bit có độ dài cố định.
bit varying Một chuỗi bit có độ dài thay đổi.

Các kiểu tìm kiếm văn bản :

Loại dữ liệu Giải thích
tsquery Một truy vấn tìm kiếm văn bản.
tsvector Một tài liệu tìm kiếm văn bản.

Các loại JSON :

Loại dữ liệu Giải thích
json Dữ liệu JSON dạng văn bản.
jsonb Dữ liệu JSON binary (nhị-phân).

Các kiểu dữ liệu khác :

Loại dữ liệu Giải thích
boolean Boolean logic, đại diện cho true hoặc false .
bytea Viết tắt của "mảng byte", kiểu này được sử dụng cho dữ liệu binary (nhị-phân).
money lượng tiền tệ.
pg_lsn Số thứ tự log PostgreSQL.
txid_snapshot Ảnh chụp ID giao dịch cấp user.
uuid Một số nhận dạng duy nhất trên phạm vi global.
xml Dữ liệu XML.

Ưu điểm của PostgreSQL

  • Tuân theo SQL : Hơn SQLite hoặc MySQL, PostgreSQL nhắm tới tuân theo chặt chẽ các tiêu chuẩn SQL. Theo tài liệu PostgreSQL chính thức , PostgreSQL hỗ trợ 160 trong số 179 tính năng cần thiết để tuân theo SQL: 2011 đầy đủ, ngoài một danh sách dài các tính năng tùy chọn.
  • Open-souce và hướng tới cộng đồng : Là một dự án hoàn toàn open-souce, mã nguồn của PostgreSQL được phát triển bởi một cộng đồng lớn và tận tâm. Tương tự, cộng đồng Postgres duy trì và đóng góp vào nhiều tài nguyên trực tuyến mô tả cách làm việc với DBMS, bao gồm tài liệu chính thức , wiki PostgreSQL và các diễn đàn trực tuyến khác nhau.
  • Có thể mở rộng : User có thể mở rộng PostgreSQL bằng lập trình với các hàm chạy trong nó, tải động khi cần.

Nhược điểm của PostgreSQL

  • Hiệu suất bộ nhớ : Đối với mỗi kết nối client mới, PostgreSQL tạo ra một quy trình mới. Mỗi tiến trình mới được cấp phát khoảng 10MB bộ nhớ, có thể bổ sung nhanh chóng cho database có nhiều kết nối. Theo đó, đối với các hoạt động đọc đơn giản, PostgreSQL thường kém hiệu suất hơn các RDBMS khác, như MySQL.
  • Mức độ phổ biến : Mặc dù được sử dụng rộng rãi hơn trong những năm gần đây, PostgreSQL lịch sử vẫn tụt hậu so với MySQL về mức độ phổ biến. Và vẫn còn ít công cụ của bên thứ ba có thể giúp quản lý database PostgreSQL. Tương tự, không có nhiều quản trị viên database có kinh nghiệm quản lý database Postgres so với những người có kinh nghiệm MySQL.

Khi nào sử dụng PostgreSQL

  • Tính toàn vẹn của dữ liệu là quan trọng : PostgreSQL đã hoàn toàn tuân theo ACID kể từ năm 2001 và thực hiện kiểm soát đảm bảo dữ liệu nhất quán, khiến nó trở thành một lựa chọn khi tính toàn vẹn của dữ liệu là rất quan trọng.
  • Tích hợp với các công cụ khác : PostgreSQL tương thích với nhiều nền tảng và ngôn ngữ lập trình. Điều này nghĩa là nếu bạn cần di chuyển database của bạn sang một hệ điều hành khác hoặc tích hợp nó với một công cụ cụ thể, thì database PostgreSQL sẽ dễ dàng hơn với một DBMS khác.
  • Hoạt động phức tạp : Postgres hỗ trợ các kế hoạch truy vấn có thể sử dụng nhiều CPU để trả lời các truy vấn với tốc độ cao hơn. Điều này, cùng với sự hỗ trợ mạnh mẽ cho nhiều người viết đồng thời, làm cho nó trở thành một lựa chọn tuyệt vời cho các hoạt động phức tạp như lưu trữ dữ liệu và xử lý giao dịch trực tuyến.

Khi nào không sử dụng PostgreSQL

  • Tốc độ là bắt buộc : PostgreSQL được thiết kế với khả năng mở rộng và khả năng tương thích chặt chẽ, chứ không ưu tiên tốc độ. Nếu dự án của bạn yêu cầu các thao tác đọc nhanh nhất có thể, thì PostgreSQL có thể không phải là lựa chọn tốt nhất của DBMS.
  • Cài đặt đơn giản : Do bộ tính năng lớn và sự tuân theo chặt chẽ với SQL chuẩn, Postgres có thể quá mức cần thiết cho các cài đặt database đơn giản. Đối với các hoạt động đọc nhiều đòi hỏi tốc độ, MySQL thường là một lựa chọn thiết thực hơn.
  • Replication phức tạp : Mặc dù PostgreSQL cung cấp hỗ trợ mạnh mẽ cho việc replication, nhưng nó vẫn là một tính năng tương đối mới và một số cấu hình - như kiến trúc primary-primary - chỉ có thể thực hiện được với các phần mở rộng. Replication là một tính năng dễ dùng hơn trên MySQL,  đặc biệt đối với những người thiếu kinh nghiệm quản trị hệ thống và database.

Kết luận

Ngày nay, SQLite, MySQL và PostgreSQL là ba hệ quản trị database quan hệ nguồn mở phổ biến nhất trên thế giới. Mỗi loại đều có các tính năng và hạn chế riêng biệt và vượt trội trong các tình huống cụ thể. Có khá nhiều yếu tố để quyết định một RDBMS, và sự lựa chọn hiếm khi đơn giản. Lần tới khi bạn cần một giải pháp database quan hệ, hãy nhớ nghiên cứu sâu các công cụ này và các công cụ khác để tìm ra giải pháp phù hợp nhất với nhu cầu.

Nếu bạn muốn tìm hiểu thêm về SQL và cách sử dụng nó để quản lý database quan hệ, bạn nên tham khảo ghi chú về Cách quản lý database SQL . Còn nếu bạn muốn tìm hiểu về database không quan hệ (hoặc NoSQL), hãy xem So sánh Hệ thống quản lý database NoSQL .

Tham khảo


Tags: Mysql

Các tin trước

Cài đặt và sử dụng Docker trên Ubuntu 16 2018-10-19

Cài đặt và sử dụng Composer trên Ubuntu 18.04 2018-10-16

Cài đặt WordPress với LAMP trên Ubuntu 18.04 2018-07-06

Chuyển folder dữ liệu Mysql tới vị trí mới trên Ubuntu 18.04 2018-07-06

Cài đặt và Sử dụng Docker với Ubuntu 18.04 2018-07-05

Cài đặt Firewall với UFW trên Ubuntu 18.04 2018-07-05

Tạo chứng chỉ Tự ký cho Apache trên Ubuntu 18-04 2018-07-05

Cài đặt MongoDB trên Ubuntu 18.04 2018-06-07

Cài đặt OpenVPN Server trên Ubuntu 18.04 2018-05-24

Cài đặt LEMP - Linux Nginx MySQL PHP trên Ubuntu 18 04 2018-05-23