Skip links

Chọn lựa giữa hệ cơ sở dữ liệu SQL hay No SQL

Nhắc lại một chút, Database là một cơ sở dữ liệu, có thể chứa các bảng, hàng, cột để lưu trữ dữ liệu của một hệ thống, hoặc ứng dụng. Những thứ chúng tôi sẽ nhắc đến trong bài như: MySQL, Microsoft SQL server, MongoDB, .. là hệ quản trị cơ sở dữ liệu. Các bạn đừng nhầm lẫn 2 khái niệm này.

Ngôn ngữ truy vấn SQL

Thật ra, SQL không phải là cơ sơ dữ liệu, cũng không phải là hệ quản trị Cơ Sở Dữ Liệu (CSDL). Nó là viết tắt của Structure Query Language (Ngôn ngữ truy vấn cấu trúc). Ngôn ngữ này truy vấn trên nền một hệ quản trị CSDL quan hệ (Relationship data management system – RDMS) . Đây là thứ các bạn sinh viên được dạy trong môn “Cơ sở dữ liệu”.

Trong hệ quản trị CSDL quan hệ, dữ liệu được lưu vào nhiều bảng. Mỗi bảng sẽ có nhiều cột, nhiều row. Ta sử dụng SQL để truy vấn như sau:

SELECT Name, Age FROM Students WHERE Score >= 8

Hệ quản trị CSDL (MySQL, Microsoft SQL Server, Oracle, …) được sử dụng rất rộng rãi, trong hầu hết các ứng dụng, vì một số lý do sau:

  1. Tính ACID (Atomicity, Consistency, Isolation, Durability) của một transaction được đảm bảo.
  2. Với database chuẩn 3, dữ liệu được đảm bảo tính đồng nhất và toàn vẹn (consistency).
  3. Có rất nhiều driver cho mọi ngôn ngữ: Java, C#, PHP.
  4. Số lượng lập trình viên biết và dùng SQL rất nhiều.

Một số khuyết điểm của hệ quản trị CSDL quan hệ

Tuy nhiên, hệ quản trị CSDL vẫn còn một số khuyết điểm:

  1. Việc mapping giữa các bảng trong database với các object trong code khá rắc rối và phức tạp. (Mặc dù 1 số ORM như Entity Framework, Hibernate đã đơn giản hóa chuyện này).
  2. Performance sẽ bị chậm khi phải join nhiều bảng để lấy dữ liệu (Đó là lý do ta sử dụng “giảm chuẩn” để tăng hiệu suất cho hệ quản trị CSDL quan hệ).
  3. Việc thay đổi cấu trúc dữ liệu (Thêm/xóa bảng hoặc thêm/xóa một field) rất mệt mỏi, kéo theo vô số thay đổi trên code.
  4. Không làm việc được với dữ liệu không có cấu trúc (un-structure).
  5. Hệ quản trị CSDL quan hệ được thiết kế để chạy trên một máy chủ. Khi muốn mở rộng, nó khó chạy trên nhiều máy (clustering).
Dữ liệu được lưu thành nhiều bảng trong RDBMS, khi query ta phải join lại rất khó khăn

Sự ra đời của No SQL

NoSQL Database ra đời, giải quyết được những khuyết điểm của Hệ quản trị CSDL quan hệ:

  • Dữ liệu trong NoSQL DB được lưu dưới dạng document, object. Truy vấn dễ dàng và nhanh hơn Hệ quản trị CSDL quan hệ nhiều.
  • NoSQL có thể làm việc hoàn toàn ok với dữ liệu dạng không có cấu trúc.
  • Việc đổi cấu trúc dữ liệu (Thêm, xóa trường hoặc bảng) rất dễ dàng và nhanh gọn trong NoSQL.
  • Vì không đặt nặng tính ACID của transactions và tính nhất quán của dữ liệu, NoSQL DB có thể mở rộng, chạy trên nhiều máy một cách dễ dàng.

Tổng kết

Tóm lại, NoSQL database chỉ là một kiểu database có cách lưu trữ, truy vấn dữ liệu hoàn toàn khác so với hệ quản trị CSDL quan hệ và SQL.

NoSQL bỏ qua tính toàn vẹn của dữ liệu và transaction để đổi lấy hiệu suất nhanh và khả năng mở rộng (scalability). Với những ưu điểm trên, NoSQL đang được sử dụng nhiều trong các dự án Big Data, các dự án Real-time, số lượng dữ liệu nhiều.

Liệu NoSQL có thay thế được hoàn toàn hệ quản trị CSDL quan hệ và SQL được không? Câu trả lời là KHÔNG. Trong tương lai, RDBMS vẫn sẽ giữ được chỗ đứng của mình. Một ứng dụng không chỉ sử dụng một database duy nhất, và có thể kết hợp cả SQL lẫn NoSQL.