Bạn Biết Gì Về Thế Lực Mới Nổi: NoSQL Database?
NỘI DUNG BÀI VIẾT
NoSQL Database là một hệ cơ sở dữ liệu mới nổi trong giới lập trình. Hôm nay chúng ta sẽ cùng nhau tìm hiểu những khía cạnh cơ bản về NoSQL Database. Chúng ta sẽ bắt đầu khám phá những gì liên quan đến nó, tìm hiểu chính xác nó là gì, dùng để làm gì và có những ưu, nhược điểm nào. Let’s go!
NoSQL là gì?
NoSQL là một thuật ngữ chung cho các hệ CSDL không sử dụng mô hình dữ liệu quan hệ. NoSQL đặc biệt nhấn mạnh đến mô hình lưu trữ cặp giá trị – khóa và hệ thống lưu trữ phân tán.
NoSQL ban đầu là một cơ sở dữ liệu cung cấp cơ chế lưu trữ và truy xuất dữ liệu. Dữ liệu này được mô hình hóa bằng các phương tiện khác với các quan hệ dạng bảng được sử dụng trong cơ sở dữ liệu quan hệ. Những cơ sở dữ liệu như vậy đã ra đời vào cuối những năm 1960, nhưng không có được biệt danh NoSQL cho đến khi sự gia tăng phổ biến vào đầu thế kỷ XXI. Thuật ngữ NoSQL được giới thiệu lần đầu vào năm 1998 sử dụng làm tên gọi chung cho các hệ CSDL quan hệ nguồn mở nhỏ không sử dụng SQL để truy vấn. Thuật ngữ NoSQL đánh dấu bước phát triển của thế hệ CSDL mới: phân tán (distributed) + không ràng buộc (non-relational). Hệ thống NoSQL đôi khi cũng được gọi là Not only SQL để nhấn mạnh thực tế là chúng có thể hỗ trợ các ngôn ngữ truy vấn giống SQL.
RDBMS, SQL và NoSQL
Hệ quản trị cơ sở dữ liệu quan hệ (Relational database – RDBMS) ra đời vào những năm 70 của thế kỉ trước, cho phép các ứng dụng lưu trữ dữ liệu thông qua ngôn ngữ truy vấn và mô hình hóa dữ liệu tiêu chuẩn (Structured Query Language – SQL). 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 hàng. Ta sử dụng SQL để truy vấn như sau:
SELECT Field_name
FROM Table_name
WHERE Condition
RDBMS (MySQL, Microsoft SQL Server, Oracle, …) được sử dụng rất rộng rãi, vì:
- Tính ACID (Atomicity, Consistency, Isolation, Durability) của một transaction được đảm bảo.
- Hỗ trợ nhiều nền tảng khác nhau
- Số lượng lập trình viên biết và sử dụng rất nhiều.
- …
Tuy nhiên, bên cạnh những ưu điểm thì RDBMS vẫn còn một số khuyết điểm:
- Không xử lí tốt các dữ liệu phi cấu trúc.
- Tốc độ xử lí dữ liệu khá chậm do phải join nhiều bảng để lấy dữ liệu.
- Việc thay đổi cơ sở dữ liệu cũng khá khó vì tính quy củ chặt chẽ của nó.
- 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).
Và như vậy, NoSQL đã ra đời để phục vụ những yêu cầu phù hợp với hiện tại. Hệ thống NoSQL lưu trữ và quản trị dữ liệu sao cho có thể hỗ trợ được tốc độ vận hành ở công suất cao và cung cấp tính linh hoạt tuyệt vời cho các nhà phát triển sử dụng. Không giống với cơ sở dữ liệu SQL, rất nhiều cơ sở dữ liệu NoSQL có thể mở rộng theo chiều ngang trên hàng trăm hoặc hàng ngàn máy chủ.
Nói tóm lại, SQL và NoSQL có những sự đánh đổi khác nhau trong hệ thống của mình. Mặc dù cả hai có thể cạnh tranh trong bối cảnh của một dự án, nhưng khi đặt trong một bức tranh tổng thể thì lại có vai trò hỗ trợ, bổ sung cho nhau. Việc quyết định lựa chọn công cụ nào cần phụ thuộc vào tính chất công việc thực tế.
Các đặc điểm của NoSQL
Sau đây mình sẽ liệt kê một vài đặc điểm của NoSQL:
- Phi quan hệ: không có ràng buộc nào cho việc nhất quán dữ liệu.
- Mô hình lưu trữ phân tán các tập tin hoặc dữ liệu ra nhiều máy khác nhau trong mạng LAN hoặc Internet dưới sự kiểm soát của phần mềm.
- NoSQL lưu trữ dữ liệu của mình theo dạng cặp giá trị “key – value”. Sử dụng số lượng lớn các node để lưu trữ thông tin.
- Tính nhất quán không theo thời gian thực: Sau mỗi thay đổi CSDL, không cần tác động ngay đến tất cả các CSDL liên quan mà được lan truyền theo thời gian.
- Mô hình dữ liệu và truy vấn linh hoạt.
- Triển khai đơn giản, dễ nâng cấp và mở rộng.
- …
Tiếp theo, chúng ta cùng bàn về những ưu nhược điểm của hệ thống CSDL NoSQL nhé!
Ưu và Nhược điểm của NoSQL
1. Ưu điểm
Có một số lợi thế khi làm việc với cơ sở dữ liệu NoSQL như MongoDB và Cassandra. Những ưu điểm chính là khả năng mở rộng và tính sẵn sàng cao.
- High scalability: Cơ sở dữ liệu NoSQL sử dụng sharding để chia tỷ lệ ngang. Việc phân vùng dữ liệu và đặt nó trên nhiều máy sao cho thứ tự của dữ liệu được bảo toàn là sắc nét hơn. Chia tỷ lệ dọc có nghĩa là thêm nhiều tài nguyên hơn vào máy hiện có trong khi chia tỷ lệ ngang có nghĩa là thêm nhiều máy hơn để xử lý dữ liệu. Chia tỷ lệ dọc không dễ thực hiện nhưng chia tỷ lệ ngang rất dễ thực hiện. Ví dụ về cơ sở dữ liệu mở rộng theo chiều ngang là MongoDB, Cassandra, v.v. NoSQL có thể xử lý lượng dữ liệu khổng lồ do khả năng mở rộng, khi dữ liệu tự phát triển NoSQL tự mở rộng quy mô để xử lý dữ liệu đó một cách hiệu quả.
- High availability: Tính năng tự động sao chép trong MongoDB làm cho nó rất sẵn sàng vì trong trường hợp có bất kỳ lỗi nào, dữ liệu sẽ tự sao chép về trạng thái nhất quán trước đó.
2. Nhược điểm
Bên cạnh những ưu điểm thì NoSQL Database cũng có những nhược điểm sau:
- Quản lý dữ liệu: Mục đích của các công cụ dữ liệu lớn là làm cho việc quản lý một lượng lớn dữ liệu trở nên đơn giản nhất có thể. Nhưng nó không phải là dễ dàng như vậy. Quản lý dữ liệu trong NoSQL phức tạp hơn nhiều so với cơ sở dữ liệu quan hệ. Đặc biệt, NoSQL nổi tiếng là khó cài đặt và thậm chí là để quản lý hằng ngày cũng tốn khá nhiều thời gian.
- Sao lưu dữ liệu: Sao lưu là một điểm yếu lớn đối với một số cơ sở dữ liệu NoSQL như MongoDB. MongoDB không có cách tiếp cận để sao lưu dữ liệu một cách nhất quán.
- Thiếu tính nhất quán: NoSQL đánh đổi sự nhất quán để ưu tiên tốc độ, hiệu suất hiệu quả hơn.
- Trọng tâm hẹp: Cơ sở dữ liệu NoSQL có trọng tâm rất hẹp vì nó chủ yếu được thiết kế để lưu trữ nhưng nó cung cấp rất ít chức năng. Cơ sở dữ liệu quan hệ là lựa chọn tốt hơn trong lĩnh vực Quản lý giao dịch so với NoSQL.
- Mã nguồn mở: NoSQL là cơ sở dữ liệu mã nguồn mở và không có tiêu chuẩn đáng tin cậy cho NoSQL được nêu ra.
- Không có lược đồ: Ngay cả khi bạn lấy dữ liệu ở dạng tự do, bạn hầu như luôn cần áp đặt các ràng buộc để làm cho nó hữu ích. Với NoSQL, trách nhiệm sẽ được chuyển từ cơ sở dữ liệu sang nhà phát triển ứng dụng. Ví dụ, nhà phát triển có thể áp đặt cấu trúc thông qua một hệ thống map đối tượng quan hệ hoặc ORM. Nhưng nếu bạn muốn lược đồ tự dữ liệu, NoSQL thường sẽ không hỗ trợ.
Khi nào nên sử dụng NoSQL?
Bạn nên sử dụng NoSQL Database trong những trường hợp sau:
- Khi bạn muốn lưu trữ và truy xuất một lượng dữ liệu khổng lồ.
- Mối quan hệ giữa dữ liệu bạn lưu trữ không quan trọng.
- Dữ liệu không có cấu trúc và thay đổi theo thời gian.
- Dữ liệu đang phát triển liên tục và bạn cần phải mở rộng cơ sở dữ liệu thường xuyên để xử lý dữ liệu.
NoSQL có thể thay thế SQL không?
Mặc dù cơ sở dữ liệu NoSQL đã thể hiện sự hiện diện của chúng với các tính năng không thể chối cãi như tính linh hoạt, khả năng mở rộng và tốc độ bằng cách tuân theo mô hình nhất quán BASE (Basic Availability, Soft State, Eventual consistency), NoSQL vẫn còn một chặng đường dài để đáp ứng các tính năng không thể bắt chước như tính nhất quán và độ tin cậy của cơ sở dữ liệu SQL . NoSQL thực sự nên được hiểu là “Not Only SQL” chứ không phải là “Non SQL” – có nghĩa là nó hỗ trợ SQL cùng với nhiều tính năng hơn và nó không thể thay thế cơ sở dữ liệu SQL truyền thống. Sự lựa chọn hoàn toàn dựa trên các yêu cầu về cấu trúc dữ liệu, xử lý truy vấn và khả năng mở rộng cho một ứng dụng.
Tạm kết
Như vậy trong bài viết này, chúng ta đã cùng nhau tìm hiểu về NoSQL Database. Nếu các bạn thấy bài viết hữu ích hãy rate 5* và share cho mọi người tham khảo!
Hãy để lại comment để mình có thể hoàn thiện bản thân hơn trong tương lai. Cám ơn các bạn!
Nguồn: codelearn.io
Leave a Reply