• Thứ Ba, 15/03/2011 10:16 (GMT+7)

    NoSQL Phân tán, không ràng buộc

    Nhữ Đinh Thuận
    NoSQL có nghĩa là Non-Relational - không ràng buộc, tuy nhiên hiện nay người ta thường dịch NoSQL là Not Only SQL - Không chỉ SQL.

    NoSQL là gì?

    Đâ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).

    NoSQL storage đặc biệt phổ dụng trong thời kỳ Web 2.0 bùng nổ, nơi các mạng dịch vụ dữ liệu cộng đồng cho phép người dùng tạo hàng tỷ nội dung trên web. Do đó, dữ liệu lớn rất nhanh vượt qua giới hạn phần cứng cần phải giải quyết bằng bài toán phân tán.

    Tốt hơn SQL

    Các hệ CSDL quan hệ (RDBM) hiện tại bộc lộ những yếu kém trong những tác vụ như đánh chỉ mục một lượng lớn dữ liệu, phân trang, hoặc phân phối luồng dữ liệu media (phim, ảnh, nhạc, ...). CSDL quan hệ được thiết kế cho những mô hình dữ liệu không quá lớn trong khi các dịch vụ mạng xã hội lại có một lượng dữ liệu cực lớn và cập nhật liên tục do số lượng người dùng quá nhiều.

    Thế hệ CSDL mới - NoSQL - 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.

    Tính năngCSDL quan hệNoSQL
    Hiệu suấtKém hơn
    SQL
    Relational giữa các table
    Cực tốt
    Bỏ qua SQL
    Bỏ qua các ràng buộc dữ liệu
    Khả năng mở rộngHạn chế về lượng.Hỗ trợ một lượng rất lớn các node.
    Hiệu suất đọc-ghiKém do thiết kế để đảm bảo sự vào/ra liên tục của dữ liệuTốt với mô hình xử lý lô và những tối ưu về đọc-ghi dữ liệu.
    Thay đổi số node trong hệ thốngPhải shutdown cả hệ thống.
    Việc thay đổi số node phức tạp.
    Không cần phải shutdown cả hệ thống.
    Việc thay đổi số node đơn giản, không ảnh hưởng đến hệ thống.
    Phần cứngĐòi hỏi cao về phần cứng.Đòi hỏi thấp hơn về giá trị và tính đồng nhất của phần cứng

    Đặc điểm

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

    Ứng dụng NoSQL

    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.

    Tài liệu tham khảo và lược dịch
    1. NoSQL resources: http://nosql-database.org/
    2. NoSQL wiki - http://en.wikipedia.org/wiki/NoSQL
    3. A Brief History of NoSQL - http://blog.knuthaugen.no/2010/03/a-brief-history-of-nosql.html

    ID: A1011_98