Thứ ba, 19/03/2019 | 00:00 GMT+7

SQLite vs MySQL vs PostgreSQL: So sánh các hệ thống quản lý database quan hệ

Mô hình dữ liệu quan hệ , 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ó nhiều mô hình dữ liệu khác, bao gồm NoSQLNewSQL , nhưng hệ quản trị database quan hệ (RDBMS) 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 và đối chiếu ba trong số các RDBMS open-souce được triển khai rộng rãi nhất: SQLite , MySQLPostgreSQL . Cụ thể, nó 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.

Một chút 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 thường được gọi là “cơ sở dữ liệu”, hai thuật ngữ này không thể thay thế cho nhau. Database có thể là bất kỳ bộ sưu tậ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ệ . 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 phương ngữ SQL cụ thể 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 tiêu chuẩn.

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” hoặc “chuẩn SQL”, nó đề 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 lõi đầ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 những tiêu chuẩn khác.

Mỗi cột được gán một kiểu dữ liệu cho phép loại mục nhập 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ể swap 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ể được ký kết, nghĩa là họ có thể đại diện cho cả tích cực lẫn tiêu cực số, hoặc unsigned, nghĩa là họ chỉ có thể đại diện cho các số dương. 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, trong 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 đối 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ể, nhưng 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 mục nhập nào trong cột đó giống hệt nhau.
  • NOT NULL : Ràng buộc này đảm bảo một cột không có bất kỳ mục 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ó mục nhập nào trong cột là NULL và mọi mục nhập đều khác biệt.
  • 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 mục nhập vào cột FOREIGN KEY phải tồn tại trong cột PRIMARY KEY mẹ để quá trình ghi 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 mục 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ề 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 và hoàn toàn đượ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 , ngay cả trong trường hợp hệ thống gặp sự cố hoặc mất điện.

Trang web của dự án SQLite mô tả nó như một database “không có server ”. Hầu hết các công cụ database quan hệ được thực hiện như một quy trình server trong đó các chương trình giao tiếp với server lưu trữ thông qua giao tiếp liên quá trình chuyển tiếp các yêu cầu. Tuy nhiên, 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 đĩa database . Điều này đơn giản hóa quy trình cài đặt của SQLite, vì nó loại bỏ mọi nhu cầu cấu hình quy trình server . 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ì chúng cần là quyền truy cập vào đĩa.

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 trình
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” được coi là có thể swap cho 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

  • Dấu chân nhỏ : 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.
  • Thân thiện với user : 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 quy 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.
  • Di động : 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 một loạt lớn các file riêng biệt, toàn bộ database SQLite được lưu trữ trong một file duy nhất. Tệp này có thể được đặt ở bất kỳ đâu trong hệ thống phân cấp folder và có thể được chia sẻ qua phương tiện di động hoặc giao thức truyền file .

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

  • Đồng thời hạn chế : Mặc dù nhiều quy trình có thể truy cập và truy vấn database SQLite cùng một lúc, nhưng chỉ một quy trình có thể áp dụng các thay đổi đối với database tại bất kỳ thời điểm nào. Điều này nghĩa là SQLite hỗ trợ tính đồng thời lớn hơn hầu hết các hệ thống quản lý database nhúng khác, nhưng không nhiều như các RDBMS client / server như MySQL hoặc PostgreSQL.
  • Không có user quản lý : Hệ thống database thường đi kèm với 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 đĩa 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 điển hình 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 như SQLite. Ví dụ, con trỏ lạc trong client không thể làm hỏng bộ nhớ trên server . Ngoài ra, vì server là một quá trình liên tục duy nhất, database client - server có thể kiểm soát quyền truy cập dữ liệu với độ chính xác cao hơn so với database không server , cho phép khóa chi tiết hơn và đồng thời tốt hơn.

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 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.
  • Kiểm tra : Đối với nhiều ứng dụng, có thể quá mức cần thiết để kiểm tra chức năng của chúng bằng DBMS sử dụng một quy trình server bổ sung.SQLite có chế độ trong bộ nhớ được dùng để chạy các bài kiểm tra một cách nhanh chóng mà không cần thực hiện các hoạt động database thực tế, làm cho nó trở thành một lựa chọn lý tưởng để kiểm tra.

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

  • Làm việc với nhiều dữ liệu : Về mặt kỹ thuật, SQLite 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 client - server 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ể thông lượng của nó. Nếu ứng dụng của bạn yêu cầu nhiều thao tác ghi hoặc nhiều người viết đồng thời, SQLite có thể không đáp ứng được nhu cầu của bạn.
  • 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ó. Quyền truy cập này được tích hợp sẵn trong ứng dụng, vì vậy nếu dữ liệu trong SQLite được đặt trên một máy riêng biệt với ứng dụng, nó sẽ yêu cầu liên kết động cơ với đĩa băng thông cao trên toàn mạng. Đây là một giải pháp đắt tiền, không hiệu quả và trong những trường hợp như vậy, DBMS client - server có thể là lựa chọn tốt hơn.

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 thiết kế cho tốc độ và độ tin cậy, với chi phí tuân theo hoàn toàn 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, nhưng nó vẫn bị tụt hậu so với các triển khai SQL khác. Tuy nhiên, nó đi kèm với các chế độ SQL và phần mở rộng khác nhau để đưa nó đến gần hơn với sự tuân theo . 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 đã truyền cảm hứng cho 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 lớn: kiểu số, kiểu ngày và giờ và kiểu chuỗi.

Loại số :

Loại dữ liệu Giải trình
tinyint Một số nguyên rất nhỏ. 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 Một số nguyên nhỏ. 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. Phạm vi có dấu cho kiểu dữ liệu số này là -8388608 đến 8388607, trong khi phạm vi 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 Một số dấu phẩy động nhỏ (chính xác một lần).
double , double precision , hoặc real Một số dấu phẩy động có kích thước bình thường (độ chính xác kép).
dec , decimal , fixed , hoặc numeric Một số điểm cố định được đóng gói. Độ dài hiển thị của các mục nhập cho kiểu dữ liệu này được xác định khi cột được tạo và mọi mục nhập tuân theo độ dài đó.
bool hoặc boolean Boolean là một kiểu dữ liệu chỉ có hai giá trị khả dĩ, thường là true hoặc false .
bit Loại giá trị bit mà bạn có thể chỉ định số bit cho mỗi giá trị, từ 1 đến 64.

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

Loại dữ liệu Giải trình
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 Dấu thời gian cho biết lượng thời gian kể từ kỷ nguyên Unix (00:00:00 ngày 1 tháng 1 năm 1970).
time Một thời gian trong ngày, được hiển thị dưới dạng HH:MM:SS .
year Một năm được thể hiện ở đị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 trình
char Một chuỗi có độ dài cố định; các mục nhập loại này được đệm ở bên phải với khoảng trống để đáp ứng độ dài được chỉ định khi lưu trữ.
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 có độ dài được chỉ định chứ không phải là một chuỗi ký tự không binary .
varbinary Tương tự như kiểu varchar , nhưng là một chuỗi byte binary có độ dài thay đổi chứ không phải là một chuỗi ký tự không binary .
blob Một chuỗi binary 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 Cột text có độ dài tối đa là 255 (2 ^ 8 - 1) ký tự.
mediumtext Cột text có độ dài tối đa là 16777215 (2 ^ 24 - 1) ký tự.
longtext Cột 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ó 0 hoặc nhiều giá trị hơn, mỗi giá trị 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 administrator database có kinh nghiệm làm việc với MySQL. Tương tự như vậy, có rất nhiều tài liệu in ấn và trực tuyến về cách cài đặt và quản lý database MySQL, cũng như một số công cụ của bên thứ ba - chẳng hạn như phpMyAdmin - nhằm mục đích đơn giản hóa quá trình bắt đầu với 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 gốc , 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ả user . Ngoài ra, không giống như SQLite, MySQL hỗ trợ quản lý user và cho phép bạn cấp các 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 rằng 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 việc cài đặt giải pháp backup database hoặc mở rộng database theo chiều ngang .

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 nhất định. Ví dụ, nó thiếu hỗ trợ cho các mệnh đề FULL JOIN .
  • Cấp phép 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ợ sao chép của MySQL làm cho nó trở thành lựa chọn tuyệt vời cho các cài đặt database phân tán như kiến trúc chính-phụ hoặc chính-chính .
  • 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 và 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ợ nhân rộng của MySQL có thể giúp tạo điều kiện mở rộng theo chiều ngang. 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 horizontal partitioning khác.

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

  • Tuân theo SQL là cần thiết : Vì MySQL không cố gắng triển khai tiêu chuẩn SQL đầy đủ nên 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 đối với 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.
  • Đồng thời và data volumes lớn : Mặc dù MySQL nói chung 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 mình là “cơ sở dữ liệu quan hệ open-souce tiên tiến nhất trên thế giới”. Nó được tạo ra với mục tiêu có 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 - thường được liên kết với cơ sở dữ liệu đố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 điểm được gọi là đồng thời . Nó đạt được điều này mà không cần khóa đọc nhờ vào việc triển khai Kiểm soát đồng thời đa phiên bản trụ (MVCC) , đảm bảo tính nguyên tử, nhất quán, cách ly và độ bền của các giao dịch của nó, còn gọi là tuân theo ACID.

PostgreSQL không được sử dụng rộng rãi như 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 việc 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à các mục 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 trình
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 đơn 4 byte.
smallint Một số nguyên 2 byte có dấu.
smallserial Một số nguyên 2 byte tự động cộng gộp.
serial Một số nguyên 4 byte tự động cộng gộp.

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

Loại dữ liệu Giải trình
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 trình
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 trình
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 trình
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 trình
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 trình
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 trình
json Dữ liệu JSON dạng văn bản.
jsonb Dữ liệu JSON binary đã phân rã.

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

Loại dữ liệu Giải trình
boolean Một 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 .
money Một lượng tiền tệ.
pg_lsn Số thứ tự log PostgreSQL.
txid_snapshot Ảnh chụp nhanh 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 mục đích 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 lõi đầy đủ, ngoài một danh sách dài các tính năng tùy chọn.
  • Mã nguồn mở 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 theo lập trình và nhanh chóng thông qua hoạt động theo hướng danh mục và sử dụng tải động . Người ta có thể chỉ định một file mã đối tượng, chẳng hạn như một thư viện được chia sẻ và PostgreSQL sẽ tải nó khi cần thiết.

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 trong lịch sử vẫn tụt hậu so với MySQL về mức độ phổ biến. Một hậu quả của điều này là 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 administrator 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 đa phiên bản đồng thời đảm bảo dữ liệu vẫn nhất quán, khiến nó trở thành một lựa chọn mạnh mẽ của RDBMS 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ì với 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 : Đối với tốc độ, PostgreSQL được thiết kế với khả năng mở rộng và khả năng tương thích. 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à tuân theo mạnh mẽ SQL tiêu 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.
  • Sao chép phức tạp : Mặc dù PostgreSQL cung cấp hỗ trợ mạnh mẽ cho việc sao chép, 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 chính-chính - chỉ khả thi với các phần mở rộng. Nhân bản là một tính năng hoàn thiện hơn trên MySQL và nhiều user thấy việc nhân bản của MySQL dễ thực hiện hơn, đặc biệt đối với những người thiếu kinh nghiệm quản trị hệ thống và database cần thiết.

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 tính năng và hạn chế riêng của nó, và vượt trội trong các tình huống cụ thể. Có khá nhiều biến số khi quyết định một RDBMS và sự lựa chọn hiếm khi đơn giản như chọn một cái nhanh nhất hoặc cái có nhiều tính năng nhất.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 của bạn.

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ệ, ta khuyến khích bạn tham khảo Cheat sheets Cách quản lý database SQL . Mặt khác, 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 .

Người giới thiệu


Tags:

Các tin liên quan

Làm thế nào và khi nào sử dụng Sqlite
2013-10-31