Giới thiệu về NoSQL
Đây là 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. 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 ...
Đây là 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.
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.
Vào năm 2009, Eric Evans, nhân viên của Rackspace giới thiệu lại thuật ngữ NoSQL khi Johan Oskarsson của Last.fm muốn tổ chức một hội thảo về cơ sở dữ liệu nguồn mở phân tá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).
SQL 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ệ). 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
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).
Vì vậy thế hệ CSDL mới - NoSQL ra đời- giảm thiểu tối đa các phép tính toán, tác vụ đọc-ghi liên quan kết hợp với xử lý theo lô (batch processing) đảm bảo được yêu cầu xử lý dữ liệu của các dịch vụ mạng xã hội. Hệ CSDL này có thể lưu trữ, xử lý từ lượng rất nhỏ đến hàng petabytes dữ liệu với khả năng chịu tải, chịu lỗi cao nhưng chỉ đòi hỏi về tài nguyên phần cứng thấp.
NoSQL thiết kế đơn giản, nhẹ, gọn hơn so với RDBMs. Ngoài memory cached, dữ liệu nhỏ,… các NoSQL dạng này đặc biệt thích hợp cho thiết bị cầm nơi mà bộ nhớ và tốc độ xử lý hạn chế hơn so với máy tính thông thường. Khi khối lượng dữ liệu cần lưu trữ và lượng vào/ra cực lớn, RDBM đòi hỏi khắt khe và cao về phần cứng, chi phí thiết lập, vận hành đắt thì các mô hình lưu trữ phân tán trong NoSQL trở nên vượt trội. Thiết kế đặc biệt tối ưu về hiệu suất, tác vụ đọc-ghi, ít đòi hỏi về phần cứng mạnh và đồng nhất, dễ dàng thêm bớt các node không ảnh hưởng tới toàn hệ thống,…
Các mô hình dữ liệu đặc thù của NoSQL cũng cấp API tự nhiên hơn so với việc dùng RDBM.
Những ràng buộc về giấy phép sử dụng cùng với một khoản phí không nhỏ cũng là ưu thế. Chấp nhận NoSQL đồng nghĩa với việc bạn tham gia vào thế giới nguồn mở nơi mà bạn có khả năng tùy biến mạnh mẽ các sản phẩm, thư viện theo đúng mục đích của mình.
Bảng dưới đây đưa ra một số so sánh giữa RDBM và NoSQL.
Về cơ bản, thiết kế của NoSQL lựa chọn mô hình lưu trữ dữ liệu theo cặp giá trị ‘key-value’. Khái niệm node được sử dụng như trong các hệ thống phân tán. Việc lưu trữ dữ liệu có thể chấp nhận trùng lặp, tức dữ liệu được nhân bản ra nhiều node khác nhau. Một yêu cầu truy vấn dữ liệu có thể gửi tới nhiều máy cùng lúc, khi một máy nào đó bị sự cố cũng không ảnh hưởng nhiều tới toàn bộ hệ thống. Để đảm bảo tính ‘thời gian thực’ trong các hệ thống xử lý lượng lớn, thông thường người ta sẽ tách biệt CSDL ra làm 2 hoặc nhiều CSDL. CSDL nhỏ đảm bảo đọc-ghi liên tục, khi đạt tới ngưỡng thời gian hoặc dung lượng, CSDL nhỏ sẽ được gộp vào CSDL lớn có thiết kế tối ưu cho tác vụ đọc.
Một số đặc điểm:
-
Phi quan hệ (hay không ràng buộc): relational - ràng buộc - thuật ngữ sử dụng đến các mối quan hệ giữa các bảng trong cơ sở dữ liệu quan hệ (RDBM) sử dụng mô hình gồm 2 loại khóa: khóa chính và khóa phụ (primary key + foreign key) để ràng buộc dữ liệu nhằm thể hiện tính nhất quán dữ liệu từ các bảng khác nhau. Non-relational là khái niệm không sử dụng các ràng buộc dữ liệu cho nhất quán dữ liệu.
-
Lưu trữ phân tán: 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.
-
Nhất quán cuối: tính nhất quán của dữ liệu không cần phải đảm bảo ngay tức khắc sau mỗi phép ghi. Một hệ thống phân tán chấp nhận những ảnh hưởng theo phương thức lan truyền và sau một khoảng thời gian (không phải ngay tức khắc), thay đổi sẽ đi đến mọi điểm trong hệ thống để cuối cùng dữ liệu trên hệ thống sẽ trở lại trạng thái nhất quán.
-
Triển khai đơn giản, dễ nâng cấp và mở rộng.
-
Mô hình dữ liệu và truy vấn linh hoạt. …
Nhiều người chấp nhận NoSQL là do vấn đề chi phí hoặc ý thức hệ, nói không với nguồn đóng. Việc đó cũng đồng nghĩa với việc chấp nhận sự non nớt và những hỗ trợ kém hơn. Nếu bạn vẫn thích thiết kế mô hình dữ liệu dạng bảng, CSDL SQL sẽ là lựa chọn.
NoSQL đặc biệt thích hợp cho các ứng dụng cực lớn (dịch vụ tìm kiếm, mạng xã hội ,…) và nhỏ. Với những ứng dụng vừa và lớn thì RDBMs vẫn thích hợp hơn.
Thiết kế NoSQL chấp nhận tính nhất quán yếu và có thể không dùng đến ‘transaction’. Với những ứng dụng đòi hỏi sự chặt chẽ của dữ liệu, cần ‘transaction’ đảm bảo tính toàn vẹn, cơ sở dữ liệu truyền thống là lựa chọn thích hợp hơn. NoSQL thích hợp cho các mô hình lưu trữ dữ liệu có tính đặc thù như object oriented, document oriented, xml database,…
Thường chúng ta sử dụng rất hạn chế những khả năng mà các CSDL RDBM cung cấp nhưng vẫn phải trả phí cho nó. Nếu không cần đến các tính năng cao cấp, không cần các chức năng của SQL hoặc rất ghét viết các câu lệnh SQL thì hãy nghĩ đến NoSQL.
# Referent : https://en.wikipedia.org/wiki/NoSQL http://nosql-database.org/ https://toidicodedao.com/2015/09/24/nosql-co-gi-hay-ho-tong-quan-ve-nosql-phan-1/