NoSQL đang dần nổi lên như một thế lực trong giới lập trình. Nhà nhà quảng cáo NoSQL, người người sử dụng NoSQL. MEAN stack (MongoDB, Express, AngularJS, NodeJS) đang dần lấn lướt, thay thế cho LAMP stack (Linux, Apache, MySQL, PHP/Python) đã lỗi thời.


Bài viết này giới thiệu tổng quan về NoSQL, giúp các bạn có thêm kiến thức khi phỏng vấn xin việc hoặc chém gió với nhau lúc trà dư tửu hậu.


nosql-expert


Trước NoSQL, từng có một thứ gọi là … SQL


Nhắc lại một chút, database (DB) là một cơ sở dữ liệu, gồm các bảng, hàng, cột. Những thứ mình sẽ nhắc đến trong bài như: MySQL, Microsoft SQL server, MongoDB, .. là hệ quản trị cơ sở dữ liệu (DBMS). Các bạn đừng nhầm lẫn 2 khái niệm này.


Thật ra, SQL không phải là … DB, cũng không phải là DBMS. 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 RDBMS (Hệ quản trị CSDL quan hệ). Đây là thứ các bạn sinh viên được dạy trong môn “Cơ sở dữ liệu”.


Trong RDBMS, 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


RDBMS (MySQL, Microsoft SQL Server, Oracle, &hellipWink đượ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:


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

sqlserver2012


Sau SQL, có một thứ gọi là … NoSQL


Tuy nhiên, RDBMS vẫn còn một số khuyết điểm:


  • 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).
  • 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 RDBMS).
  • 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.
  • Không làm việc được với dữ liệu không có cấu trúc (un-structure).
  • RDBMS đượ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).

rdbms
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


NoSQL Database (Phải là NoSQL Database nhéWink ra đời, giải quyết được những khuyết điểm của RDBMS:


  • 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 RDBMS 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.


3
Dữ liệu được lưu dưới dạng object. Mặc dù bị trùng nhưng truy vấn rất nhanh và đơn giản.


Trong tương lai, NoSQL sẽ … thế chỗ SQL ???


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 RDBMS 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 RDBMS 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.


sql-nosql-b-100527236-large.idge


bài viết sau, mình sẽ giới thiệu một số kiểu NoSQL Database cơ bản, cũng như các DBMS nổi tiếng và được sử dụng nhiều. Mong các bạn đón xem.