Giới thiệu về NoSQL và SQL

NoSQL và những điều có thể bạn đã biết

Posted by Box XV on August 4, 2022. 10 min read.

NoSQL

SQL (Structured Query Language) từng là cơ chế lưu trữ dữ liệu chính hơn bốn thập kỉ qua với sự gia tăng các ứng dụng web như MysSQL, PostgreSQL, SQLite… NoSQL đã tồn tại từ nhưng năm 1960 nhưng gần đây mới trở lên được chú ý và được sử dụng phổ biến như MongoDB, Redis hay Apache Cassandra.

Trước khi phân biệt SQL và NoSQL chúng ta cần làm rõ được thế nào là SQL và thế nào là NoSQL. Sau đây mình cũng xin nêu lên 1 số khái niệm qua sự tìm hiểu của mình.

SQL là gì?

SQL chính là viết tắt của Structured Query language, được phát âm là “S-Q-L” hoặc đôi khi là “See-Quel” là ngôn ngữ chuẩn để xử lý Cơ sở dữ liệu quan hệ. Một cơ sở dữ liệu quan hệ xác định các mối quan hệ dưới dạng các bảng.

Lập trình SQL có thể được sử dụng hiệu quả để chèn, tìm kiếm, cập nhật, xóa các bản ghi cơ sở dữ liệu.

Điều đó không có nghĩa là SQL không thể làm được gì ngoài việc đó. Nó có thể làm rất nhiều thứ bao gồm, nhưng không giới hạn, tối ưu hóa và duy trì cơ sở dữ liệu.

Các cơ sở dữ liệu quan hệ như Cơ sở dữ liệu MySQL, Oracle, MS SQL Server, Sybase, vv sử dụng SQL.

SQL được sử dụng để tương tác với data của relation database và có 2 tính chất cực kì quan trọng:

  • Strict schema: data được lưu trữ tại các table có tính chất cố định và cần được define từ trước.
  • Relational data: data được lưu trữ phân tán trên nhiều table khác nhau và kết nối với nhau thông qua relation và SQL là thứ dùng để tương tác với relation đó (JOIN). Càng nhiều data phân tán trên nhiều table khác nhau thì SQL query càng dài, nhưng nó chính là điểm mạnh của SQL.

NoSQL là gì?

NoSQL là một DMS không quan hệ, không yêu cầu một lược đồ cố định, tránh các phép nối, và dễ dàng mở rộng. Cơ sở dữ liệu NoSQL được sử dụng cho các kho dữ liệu phân tán với nhu cầu lưu trữ dữ liệu khổng lồ. NoSQL được sử dụng cho dữ liệu lớn và các ứng dụng web thời gian thực. Ví dụ như các công ty như Twitter, Facebook, Google thu thập hàng terabyte dữ liệu người dùng mỗi ngày.

Cơ sở dữ liệu NoSQL là viết tắt của “Không chỉ SQL” hoặc “Không phải SQL”. Mặc dù một thuật ngữ tốt hơn sẽ NoREL NoSQL bắt gặp. Carl Strozz giới thiệu khái niệm NoSQL vào năm 1998.

RDBMS truyền thống sử dụng cú pháp SQL để lưu trữ và truy xuất dữ liệu để có thêm thông tin chi tiết. Thay vào đó, một hệ thống cơ sở dữ liệu NoSQL bao gồm một loạt các công nghệ cơ sở dữ liệu có thể lưu trữ dữ liệu có cấu trúc, bán cấu trúc, không có cấu trúc và đa hình.

Trong thế giới NoSQL - non-relational database, tính đến thời điểm hiện tại có 4 mô hình lưu trữ data là:

So sánh SQL và NoSQL

NoSQL

RDBMS NoSQL
Sử dụng ngôn ngữ truy vấn SQL Không sử dụng SQL, không khai báo ngôn ngữ truy vấn
Dữ liệu có cấu trúc, có tổ chức Dữ liệu đa dạng, có thể có cấu trúc, bán cấu trúc, không cấu trúc, đa hình, … Dữ liệu phi quan hệ và không thể đoán trước
Có định nghĩa schema cụ thể Không định nghĩa schema, cấu trúc linh hoạt
Dữ liệu và các quan hệ được lưu trữ trong các bảng riêng biệt Document databases, Graph stores, Key-value stores, Wide-column stores
Có tính chặt chẽ nhưng khó mở rộng Ưu tiên cho hiệu năng, tính sẵn sàng cao và khả năng mở rộng, dễ dàng phân tán
MySQL, PostGreSQL, Microsoft SQL Server, Oracle, … MongoDB, RavenDB, Amazon DynamoDB, Riak, …

Một số khác biệt giữa SQL và NoSQL.

  SQL NoSQL
Khối lượng công việc tối ưu được thiết kế để xử lý các giao dịch (OLTP) có tính ổn định cao và thích hợp xử lí phân tích trực tuyến (OLAP) được thế kế cho OLTP cho một số mẫu truy cập dữ liệu, bao gồm ứng dụng có độ trễ thấp, phục vụ phân tích dữ liệu có cấu trúc chưa hoàn chỉnh
Mô hình dữ liệu mô hình chuẩn hóa dữ liệu vào bảng thành từng cột và hàng, quy định rõ ràng bảng, hàng, cột, chỉ mục, quan hệ. Thực hiện tính toàn vẹn dữ liệu cung cấp nhiều mô hình dữ liệu như document, graph, key-value, in-memory, search
Thuộc tính ACID đòi hỏi transaction phải thực thi đầy đủ hoặc không thực thi, dữ liệu phải nhất quán với sơ đồ cơ sở dữ liệu, các transaction phải tách biệt nhau, khả năng phục hồi khi có hư hỏng nới lỏng một số thuộc tính ACID để có mô hình linh hoạt có khả năng thay đổi theo chiều ngang là lựa chọn tuyệt vời cho các trường hợp cần thông lượng cao, độ trễ thấp
Quy mô thường tăng quy mô bằng cách tăng phần cứng hoặc thêm các bản sao có tính phân mảnh cao, có khả năng tăng quy mô bằng cách dùng kiến trúc được phân phối để tăng thông lượng, đem đến hiệu năng ổn định với quy mô gần như không giới hạn
Hiệu năng phụ thuộc vào hệ thống con của ổ đĩa thường được xem là chức năng của kích cỡ cụm phần cứng, độ trễ mạng và ứng dụng đưa ra lệnh gọi
API yêu cầu lưu trữ và truy xuất sử dụng các câu truy vấn có cấu trúc SQL API trên cơ sở đối tượng cho phép các nhà phát triển ứng dụng dễ dàng lưu trữ và truy xuất cấu trúc dữ liệu trong bộ nhớ

Cuối cùng là so sánh giữa SQL và NoSQL để… hiểu điểm mạnh, điểm yếu của từng loại mà áp dụng cho phù hợp. Trên thực tế với những super big application / business đều áp dụng cả 2 loại SQL và NoSQL cho những data khác nhau với mục đích khác nhau.

Cuối cùng là so sánh giữa SQL và NoSQL để… hiểu điểm mạnh, điểm yếu của từng loại mà áp dụng cho phù hợp. Trên thực tế với những super big application / business đều áp dụng cả 2 loại SQL và NoSQL cho những data khác nhau với mục đích khác nhau.

MySQL vs MongoDB

MySQL: Cơ sở dữ liệu quan hệ

Một số lợi ích và điểm mạnh của MySQL:

  • Maturity: MySQL là một cơ sở dữ liệu cực kỳ trưởng thành, có nghĩa là nó có một cộng đồng lớn, thủ nghiệm rộng rãi và khá ổn định.
  • Compatibility: MySQL có sẵn cho tất cả các nền tảng chính, bao gồm Linux, Windows, Mac, BSD và Solaris. Nó cũng có các trình kết nối tới nhiều ngôn ngữ như Node.js, Ruby, C#, C++, Java, Perl, Python và PHP, nghĩa là không có giới hạn trong ngôn ngữ truy vấn SQL.
  • Cost-effective: cơ sở dữ liệu mã nguồn mở và miễn phí.
  • Replicable: MySQL có thể được sao chép trên nhiều node, nghĩa là khối lượng công việc có thể được giảm và khả năng mở rộng cũng như tính sẵn sàng của ứng dụng có thể được tăng lên.
  • Sharding: Mặc dù Sharding không thể thực hiện trên hầu hết các cơ sở dữ liệu SQL, nhưng nó có thể được thực hiện trên MySQL.

MongoDB: Cơ sở dữ liệu phi quan hệ

Một số lợi ích và điểm mạnh của MongoDB:

  • Dynamic schema: nó cho phép bạn lịnh hoạt thay đổi lược đồ cơ sở dữ liệu mà không làm thay đổi dữ liệu hiện có.
  • Scalability: có thể mở rộng theo chiều ngang, giúp giảm khối lượng công việc và mở rộng business một cách dễ dàng.
  • Manageability: cơ sở dữ liệu không yêu cầu hệ quản trị. Vì nó khá thân thiện với người dùng theo cách này, nó có thể được sử dụng bở cả nhà phát triển và quản trị viên.
  • Speed: hiệu năng cao cho những truy vấn đơn giản.
  • Flexibility: Bạn có thể thêm các cột hay trường mới trên MongoDB mà không làm ảnh hưởng tới những hàng có sẵn hay hiệu năng ứng dụng.

Vậy cơ sở dữ liệu nào phù hợp với doanh nghiệp của bạn?

MySQL là một lựa chọn mạnh mẽ cho bất kỳ business nào sẽ được hưởng lợi từ cấu trúc được xác định trước và hệ thống các lược đồ. Ví dụ: các ứng dụng đòi hỏi các giao dịch mutli-row như hệ thống kế toán, hệ thống theo dõi đơn hàng…

MongoDB, mặt khác, là lựa chọn tốt cho những hệ thống có tốc độ phát triển nhanh hoặc cơ sở dữ liệu không có định nghĩa rõ ràng. Cụ thể hơn, nếu bạn không thể định nghĩa một lược đồ cho cơ sở dữ liệu của bạn, nếu lược đồ của bạn thay đổi liên tục như thường thấy với các ứng dụng di động, phân tích theo thời gian thực, hệ thống quản lý nội dung…MongoDB là sự lựa chọn tuyệt vời cho bạn.

Khi nào sử dụng SQL?

Khi nói đến công nghệ cơ sở dữ liệu, không có một kích cỡ phù hợp với tất cả các giải pháp. Đó là lý do tại sao nhiều doanh nghiệp dựa vào cơ sở dữ liệu quan hệ và không liên quan cho các nhiệm vụ khác nhau. Ngay cả khi cơ sở dữ liệu NoSQL nổi tiếng về tốc độ và khả năng mở rộng của họ, vẫn có những tình huống mà cơ sở dữ liệu SQL có cấu trúc cao có thể thích hợp hơn. Dưới đây là một vài lý do bạn có thể chọn một cơ sở dữ liệu SQL:

  1. Bạn cần phải đảm bảo tuân thủ ACID (Nguyên tử, Tính nhất quán, Cách ly, Độ bền). Tính tuân thủ ACID làm giảm dị thường và bảo vệ tính toàn vẹn của cơ sở dữ liệu của bạn bằng cách mô tả chính xác các giao dịch tương tác với cơ sở dữ liệu như thế nào. Nói chung, cơ sở dữ liệu NoSQL hy sinh tính linh hoạt của ACID cho tính linh hoạt và tốc độ xử lý, nhưng đối với nhiều ứng dụng thương mại điện tử và tài chính, cơ sở dữ liệu phù hợp với ACID vẫn là lựa chọn ưu tiên.
  2. Dữ liệu của bạn được cấu trúc và không thay đổi. Nếu doanh nghiệp của bạn không trải qua sự tăng trưởng to lớn đòi hỏi nhiều máy chủ hơn và bạn chỉ làm việc với dữ liệu phù hợp thì có thể không có lý do gì để sử dụng một hệ thống được thiết kế để hỗ trợ nhiều loại dữ liệu khác nhau và lưu lượng truy cập cao.
  • SQL là ngôn ngữ đơn giản nhất được sử dụng để giao tiếp với RDBMS
  • Phân tích các phiên liên quan đến hành vi và tùy chỉnh
  • Tạo trang tổng quan tùy chỉnh
  • Nó cho phép bạn lưu trữ và lấy dữ liệu từ cơ sở dữ liệu một cách nhanh chóng
  • Được ưu tiên khi bạn muốn sử dụng các phép nối và thực hiện các truy vấn phức tạp

Khi nào sử dụng NoSQL?

Khi tất cả các thành phần khác của ứng dụng máy chủ của bạn được thiết kế để nhanh chóng và liền mạch, cơ sở dữ liệu NoSQL ngăn chặn dữ liệu khỏi bị nút cổ chai. Dữ liệu lớn là động lực NoSQL thực sự ở đây, làm những việc mà cơ sở dữ liệu quan hệ truyền thống không thể. Nó thúc đẩy sự phổ biến của các cơ sở dữ liệu NoSQL như MongoDB, CouchDB, Cassandra, và HBase.

  1. Lưu trữ khối lượng lớn dữ liệu thường có ít hoặc không có cấu trúc. Cơ sở dữ liệu NoSQL không giới hạn các loại dữ liệu bạn có thể lưu trữ với nhau, và cho phép bạn thêm các loại mới khác nhau khi nhu cầu của bạn thay đổi. Với cơ sở dữ liệu dựa trên tài liệu, bạn có thể lưu trữ dữ liệu ở một nơi mà không cần định nghĩa “loại” dữ liệu nào là trước.
  2. Tận dụng tối đa điện toán đám mây và lưu trữ. Lưu trữ cloud là giải pháp tiết kiệm chi phí tuyệt vời, nhưng yêu cầu dữ liệu được dễ dàng lây lan trên nhiều máy chủ để mở rộng quy mô. Cơ sở dữ liệu NoSQL như Cassandra được thiết kế để được mở rộng trên nhiều trung tâm dữ liệu mà không phải suy nghĩ nhiều .
  • Khi không cần hỗ trợ ACID
  • Khi mô hình RDBMS truyền thống không đủ
  • Dữ liệu cần lược đồ linh hoạt
  • Các ràng buộc và logic xác thực không bắt buộc phải được thực hiện trong cơ sở dữ liệu
  • Ghi nhật ký dữ liệu từ các nguồn được phân phối
  • Nó nên được sử dụng để lưu trữ dữ liệu tạm thời như giỏ mua hàng, danh sách mong muốn và dữ liệu phiên

Tổng kết

NoSQL

  • SQL là Digital (Kĩ thuật số). Cơ sở dữ liệu này sẽ hoạt động tốt nhất với các đối tượng rời rạc, đã được định nghĩa rõ ràng với một yêu cầu kĩ thuật được xác định chính xác. Các trường hợp sử dụng thường thấy là: Các cửa hàng Online và Các hệ thống Ngân Hàng.
  • NoSQL là Analog (Tương tự). Nó sẽ phù hợp nhất với các dữ liệu có tổ chức với một requirement mềm lỏng - có thể được thay đổi, mở rộng cho phù hợp mọi hoàn cảnh. Các trường hợp hay được sử dụng phải kể đến: Các mạng xã hội, Các hệ thống quản lý khách hàng và phân tích trang web.

NoSQL

Từ bài viết này bạn có thể nhận thấy một số điểm khác biệt giữa SQL và NoSQL. Cảm ơn bạn đã đọc bài viết mong rằng sẽ giúp bạn có thể xác định rõ ràng và lựa chọn khi bắt đầu một dự án. Chúc bạn thành công!

NoSQL


Tham khảo: