NoSQL có gì hay ho – Tổng quan về NoSQL – Phần 1

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, …) đượ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é) 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.

 

17 thoughts on “NoSQL có gì hay ho – Tổng quan về NoSQL – Phần 1”

    1. Theo mình nghĩ thì do NoSQL cần sự nhanh chóng nên nó bỏ đi tính toàn vẹn dữ liệu. Nên NoSQL dùng trong các ứng dụng chat thì hợp lí, chứ dùng trong xử lí ngân hàng hoặc sàn chứng khoáng thì ko dc. Vì nếu dùng NoSQL trong ngân hàng thì giả sử tài khoản A gửi qua tài khoản B 3 triệu, trong quá trình chuyển khoản thì vd như đứt kết nối mạng gì đó thì tài khoản B vẫn chưa nhận dc 3 triệu mà tài khoản A đã bị trừ mất 3 tr….Nên mặt này NoSQL k bằng SQL dc, do SQL quan trọng về tính toàn vẹn dữ liệu (theo tính chất ACID). Nhưng SQL lại ko bằng NoSQL ở mặt truy xuất nhanh. Nói chung là SQL hay NoSQL đều có tính chất quan trọng khác nhau quan trọng ở mục đích sử dụng nó thôi. Bạn nên tham khảo CAP theorem để sử dụng cái nào cho hợp lí 😀

      Like

  1. Chào anh,
    Em đang làm một project, thu thâp dữ liệu và đưa lên cloud để lưu trữ, em là bên điện tử nên phần CNTT cũng chỉ biết sơ qua các khái niệm chứ chưa có kiến thức rõ ràng. Em muốn đưa dữ liệu lên cloud để lưu trữ, truy cập để xem các dữ liệu đó. Anh có gợi ý nào cho em về phương thức, service không ạ? Em thu thập dữ liệu, dữ liệu được đưa lên 1 broker (em sử dụng giao thức MQTT), dữ liệu từ broker đó lưu vào NoSQL Database, ở trên điện thoại hoặc máy tính có phần mềm truy cập vào đó để coi các dữ liệu như thế nào.

    Like

    1. Em tìm hiểu MongoLab nhé, nó là MôngDB host sẵn trên cloud. Dữ liệu từ broker em dùng API để lưu nó trên database của MongoLab, ở các app khác thì tải dữ liệu từ MongoLab về là đc.

      Like

  2. Chào bạn, cho mình hỏi chút được ko? Mình hoàn toàn mù mờ về IT chứ đừng nói đến NoSQL (background của mình là báo chí và ngôn ngữ, học toán cũng kém nữa), mình đang muốn tự học về big data nhưng lại yêu cầu phải biết NoSQL. Mà xuất phát điểm của mình là từ số 0 thì mình nên đọc sách/học gì vỡ lòng ạ? Mình thậm chí còn ko sử dụng tốt con smartphone cơ. Cám ơn bạn đã đọc reply này. Cheers!

    Like

    1. @HaVu : vậy thì quá khó bạn nhé. Tuy SQL là ngôn ngữ truy vấn cấu trúc đơn giản hơn nhiều so với các ngôn ngữ lập trình khác , nhưng nó có liên quan và tương tác đến các tầng, thứ khác quanh nó.
      Hơn nữa bạn học toán kém nữa => tư duy bạn cũng ko sâu. Và bạn nói muốn học về bigData …. nếu vậy mình khuyên bạn nên từ bỏ nó nhé …vì a e coder cũng ko phải nhiều người làm về bigData (ở VN nói riêng) do phải áp dụng nhiều thuật toán đau đầu ^^

      Liked by 2 people

Leave a comment