Xem thêm

System Design Cơ Bản – Sql vs. Nosql

Huy Erick
SQL và NoSQL: Hai Giải Pháp Khác Biệt Được cho phép bởi tác giả Edward Thiên Hoàng. Trong thế giới Cơ sở dữ liệu (CSDL) hiện nay, chúng ta có hai loại giải pháp chính:...

SQL và NoSQL: Hai Giải Pháp Khác Biệt

Được cho phép bởi tác giả Edward Thiên Hoàng.

Trong thế giới Cơ sở dữ liệu (CSDL) hiện nay, chúng ta có hai loại giải pháp chính: SQL và NoSQL (cơ sở dữ liệu quan hệ và cơ sở dữ liệu phi quan hệ). Mỗi loại có những khác biệt đáng kể về cách chúng được xây dựng, các loại dữ liệu mà chúng lưu trữ và cách chúng lưu trữ dữ liệu. CSDL Quan hệ lưu trữ dữ liệu có cấu trúc rõ ràng, ví dụ như danh bạ điện thoại sẽ chứa thông tin tên và số điện thoại của mỗi người.

Trong khi đó, CSDL phi quan hệ lưu trữ dữ liệu không có cấu trúc, với cấu trúc động và phân tán. Ví dụ, nó có thể chứa tệp tài liệu (document) về người dùng như số điện thoại, địa chỉ hoặc các hoạt động của họ trên Facebook hoặc các trang mua sắm trực tuyến. Dữ liệu này thường có dạng key-value trong định dạng JSON, và các document có thể được tạo ra mà không cần xác định trước cấu trúc.

SQL: Cơ Sở Dữ Liệu Quan Hệ

CSDL Quan hệ lưu trữ dữ liệu dưới dạng hàng (rows) và cột (columns). Mỗi hàng chứa thông tin về dữ liệu và mỗi cột chứa các thuộc tính của dữ liệu. Các bảng có thể liên kết với nhau qua khóa ngoại (foreign key). Một số CSDL Quan hệ phổ biến là MySQL, Oracle, MS SQL Server, SQLite, Postgres, MariaDB và IMB D2.

NoSQL: Các Loại Cơ Sở Dữ Liệu Phi Quan Hệ

CSDL phi quan hệ được chia thành 4 loại chính:

Key-Value Stores:

Dữ liệu được lưu trữ dưới dạng cặp key-value, với "key" là thuộc tính duy nhất để liên kết với giá trị (value) của nó. Các cửa hàng Key-Value nổi tiếng bao gồm Redis và Amazon DynamoDB.

System Design Cơ Bản - Sql vs. Nosql Hình ảnh minh họa: So sánh cơ sở dữ liệu quan hệ và phi quan hệ

Document Databases:

Là CSDL chứa dữ liệu thành tệp tài liệu (document) để thay thế cho hàng và cột trong bảng, và nhiều tài liệu được tổng hợp thành một Collection. Khác với bảng, mỗi tài liệu có thể chứa các cấu trúc khác nhau. Ví dụ, trong MongoDB, mỗi tài liệu có dạng JSON. Các CSDL tài liệu phổ biến hiện nay là MongoDB và CouchDB.

System Design Cơ Bản - Sql vs. Nosql Hình ảnh minh họa: So sánh cơ sở dữ liệu quan hệ và phi quan hệ

Wide-Column Databases:

Wide-Column hay còn được gọi là Big-Table, là mô hình dữ liệu lưu trữ dữ liệu với mỗi hàng chứa nhiều cột, mỗi cột là một cặp key-value. Số lượng cột có thể tùy chỉnh cho mỗi hàng, tức là số lượng cột ở mỗi hàng có thể khác nhau. Nó giống như kiểu key-value hai chiều, trong đó mỗi khoá chứa nhiều cặp key-value bên trong. Các CSDL Wide-Column nổi tiếng bao gồm Cassandra và HBase.

System Design Cơ Bản - Sql vs. Nosql Hình ảnh minh họa: So sánh cơ sở dữ liệu quan hệ và phi quan hệ

Graph Databases

CSDL đồ thị lưu trữ dữ liệu dưới dạng các đối tượng đồ thị để biểu thị mối quan hệ giữa các đối tượng. Dữ liệu được lưu trữ dưới dạng các nodes (entities) và thuộc tính của các nodes, và các liên kết giữa các nodes được thực hiện qua các lines. Các CSDL đồ thị phổ biến bao gồm Neo4J và InfiniteGraph.

System Design Cơ Bản - Sql vs. Nosql Hình ảnh minh họa: Biểu đồ quan hệ trên Facebook của người dùng sử dụng CSDL đồ thị

Sự Khác Biệt Giữa SQL Và NoSQL

Lưu Trữ:

  • SQL lưu trữ dữ liệu trong các bảng, với mỗi hàng đại diện cho một thực thể dữ liệu và mỗi cột chứa các thuộc tính của thực thể đó. Ví dụ, nếu ta lưu trữ dữ liệu về thực thể "xe hơi", chúng ta sẽ tạo một bảng dữ liệu với nhiều cột đại diện cho các đặc điểm của chiếc xe như "màu sắc", "nhãn hiệu", "hãng sản xuất"...

  • NoSQL lưu trữ dữ liệu trong nhiều loại cấu trúc khác nhau như đã đề cập ở trên, như key-value, document hay đồ thị.

Lược Đồ Dữ Liệu:

  • Trong SQL, lược đồ dữ liệu của mỗi bản ghi là cố định. Tức là mỗi cột trong bảng phải được định nghĩa trước khi tạo bảng, và khi thêm dữ liệu vào một hàng, các cột đó phải có giá trị (có thể chấp nhận giá trị NULL). Lược đồ có thể được thay đổi sau đó (alter table), nhưng sự thay đổi này phải được thực hiện bởi cơ sở dữ liệu và khi đó, cơ sở dữ liệu sẽ tạm ngừng hoạt động một thời gian.

  • Trong NoSQL, lược đồ là động, tức là không cần phải định nghĩa trước một lược đồ cụ thể. Thay vào đó, lược đồ sẽ dựa vào cấu trúc dữ liệu được gửi vào.

Truy Vấn:

  • SQL truy vấn thông qua ngôn ngữ truy vấn có cấu trúc gọi là Structured Query Language (SQL). SQL là một ngôn ngữ rất mạnh mẽ và đã tồn tại từ lâu, là ngôn ngữ biểu diễn cho tất cả các hệ quản trị cơ sở dữ liệu quan hệ (RDBMS).

  • NoSQL thường có các ngôn ngữ truy vấn riêng, thường gọi là UnSQL (Unstructured Query Language). Mỗi loại NoSQL có cú pháp truy vấn khác nhau để truy xuất dữ liệu (collection, key-value, node...).

Khả Năng Mở Rộng:

  • Trong hầu hết các hệ quản trị cơ sở dữ liệu quan hệ (RDBMS), khả năng mở rộng theo chiều ngang (horizontal scalability) chỉ có thể thực hiện bằng cách tăng cường phần cứng của máy chủ hiện tại (tăng CPU, RAM...). Tuy nhiên, cách làm này tốn kém và thời gian, và luôn có một giới hạn cụ thể.

  • Còn với NoSQL, hỗ trợ mở rộng theo chiều dọc (vertical scalability) rất tốt. Điều này đơn giản là thêm máy chủ vào các node hiện có, và việc này được thực hiện tự động. Việc triển khai và mở rộng cơ sở dữ liệu NoSQL rất dễ dàng.

Độ Tin Cậy:

  • Hầu hết các hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) tuân theo các thuộc tính ACID (atomicity, consistency, isolation và durability), đảm bảo tính tin cậy và bảo toàn dữ liệu.

  • Trong khi đó, nhiều hệ quản trị cơ sở dữ liệu phi quan hệ (NoSQL) không tuân theo ACID để đánh đổi hiệu suất và khả năng mở rộng.

Khi Nào Sử Dụng SQL Và NoSQL

SQL và NoSQL đều có tính chất riêng phục vụ cho các yêu cầu đặc biệt khác nhau. Không có cơ sở dữ liệu nào hoàn hảo cho mọi nhu cầu, tùy thuộc vào mục đích của hệ thống.

Lý Do Sử Dụng SQL DB:

  1. Ứng dụng yêu cầu xử lý dữ liệu theo các giao dịch để tuân thủ tính chất ACID, bảo đảm tính nhất quán và toàn vẹn của dữ liệu. Ví dụ, các hệ thống tài chính hoặc thương mại điện tử.

  2. Nếu ứng dụng có cấu trúc dữ liệu được xác định trước và không đòi hỏi khả năng mở rộng trong tương lai, đồng thời đòi hỏi tính nhất quán trong dữ liệu.

Lý Do Sử Dụng NoSQL DB:

  1. Hệ thống yêu cầu lưu trữ lượng dữ liệu lớn từ đầu và tăng dần theo thời gian. Khi đó, NoSQL là lựa chọn tốt nhất vì tính linh hoạt của nó trong kiểu dữ liệu và khả năng mở rộng theo chiều ngang.

  2. Các hệ thống cần phát triển nhanh. NoSQL phù hợp với phát triển nhanh do không yêu cầu chuẩn bị cấu trúc (lược đồ, bảng, cột...). Nếu cần làm việc với hệ thống nghiệp vụ chưa được xác định rõ từ đầu và đòi hỏi linh hoạt thay đổi dạng dữ liệu giữa các sprint mà không ảnh hưởng hoặc làm gián đoạn hệ thống giữa các phiên bản, cơ sở dữ liệu quan hệ sẽ làm chậm quá trình này.

  3. Hệ thống được xây dựng và lưu trữ dữ liệu trên Cloud Computing. Lưu trữ dữ liệu trên Cloud là một giải pháp tiết kiệm chi phí tuyệt vời, nhưng đòi hỏi dữ liệu phải được lưu trữ đồng thời trên nhiều máy chủ để mở rộng quy mô. Đây là điểm mạnh của NoSQL như Cassandra mà không đòi hỏi sự can thiệp thủ công quá nhiều.

(*) Bonus: Trên, tôi đã nhắc đến giao dịch và ACID. Vậy, giao dịch và ACID là gì?

"Một giao dịch là một quá trình xử lý từ khi bắt đầu đến khi kết thúc, tuân thủ bốn tính chất ACID. Bốn chữ này viết tắt của bốn tính chất quan trọng sau:

  • Atomicity: tính "nguyên tử" của giao dịch. Nghĩa là mọi giao dịch chỉ thành công khi tất cả các phần tử của nó đều thành công hoặc không thành công.

  • Consistency: tính nhất quán. Nghĩa là tất cả dữ liệu được xử lý phải tuân thủ các quy tắc và ràng buộc trong toàn bộ quá trình xử lý.

  • Isolation: tính cô lập. Đảm bảo rằng các giao dịch xảy ra cùng một lúc sẽ không tác động lẫn nhau. Ví dụ, hai giao dịch sửa cùng một bảng phải thực hiện tuần tự, giao dịch này hoàn thành trước thì giao dịch kia sau.

  • Durability: tính bền. Nghĩa là kết quả của một giao dịch đã được cam kết (commit) phải đảm bảo, ngay cả khi ứng dụng bị tắt hoặc máy chủ mất điện."

Bài viết gốc được đăng tải tại edwardthienhoang.wordpress.com.

Có thể bạn quan tâm:

  • Vì sao SQL tốt hơn NoSQL? (Phần 1)
  • Full stack developer là gì? Bí kiếp để trở thành một fullstack developer
  • Vì sao SQL tốt hơn NoSQL? (Phần 2)

Xem thêm việc làm IT Jobs for Developer hấp dẫn trên TopDev.

1