Các đặc trưng của Cassandra

ĐẶC TRƯNG CỦA CASSANDRA

1. Tính phân tán

Đặc tính phân tán là đặc tính chung của NoSQL, vì thế nó cũng là một đặc tính quan trọng của Cassandra. Tính phân tán có nghĩa là khả năng phân chia dữ liệu thành nhiều phần đặt trên nhiều node khác nhau trong khi người dùng vẫn thấy được dữ liệu này là một khối thống nhất. Điều này đảm bảo khi một máy gặp sự cố thì vẫn có thể thao tác được với dữ liệu trên các máy khác. Ngoài ra, việc tính toán phân tán dữ liệu theo các thuật toán riêng cũng đảm bảo cho người dùng có thể truy cập dữ liệu một cách nhanh nhất (Ví dụ 3 bản sao của dữ liệu lưu ở ba châu lục thì IP thuộc châu lục nào sẽ ưu tiên truy cập bản dữ liệu tại châu lục đó, khi đó sẽ nhanh hơn truy cập dữ liệu ở server châu lục khác).

2. Khả năng mở rộng – tính co dãn

Cassandra cho phép mở rộng quy mô cơ sở dữ liệu một cách linh hoạt. Cassandra mở rộng quy mô theo chiều ngang (scale - out) dựa trên việc tăng số lượng node trong cluster. Mở rộng theo chiều ngang, có nghĩa là thêm node chứa tất cả hoặc một phần dữ liệu vào cluster để không có node nào bị quá tải bởi các request từ phía người dùng. Node được thêm vào cần có cơ chế để duy trì dữ liệu của mình đồng bộ với dữ liệu của các node khác.

Cluster có thể mở rộng hoặc thu hẹp quy mô một cách liền mạch. Để làm được điều này, cluster cần có khả năng chấp nhận node mới / loại bỏ node mà không có sự gián đoạn lớn. Khi thêm một node mới hoặc loại bỏ, người dùng không cần phải khởi động lại tiến trình, không cần thay đổi truy vấn ứng dụng, không cần cân bằng dữ liệu, tự Cassandra sẽ giải quyết những vấn đề này.

Trong hệ thống sử dụng Cassandra, để tăng gấp đôi dung lượng hoặc thông lượng ta chỉ cần tăng gấp đôi số lượng node trong cluster. Điều này khác với các hệ quản trị cơ sở dữ liệu khác như Oracle hay MySQL, các DBMS này có cơ chế mở rộng theo chiều dọc – tức là khi muốn hỗ trợ nhiều người dùng hơn hoặc muốn dung lượng lưu trữ lớn hơn, đòi hỏi chúng ta phải tăng hiệu suất phần cứng (CPU, RAM, ổ cứng).

Khả năng mở rộng quy mô cơ sở dữ liệu của Cassandra gần như là vô hạn (theo tuyến tính). Đây chính là một trong những điểm mạnh của Cassandra.

3. Tính hướng cột (Column Oriented)

Các RDBMS hướng dòng (Row oriented) phải định nghĩa trước các cột (column) trong các bảng (table). Đối với Cassandra, chúng ta không cần phải làm điều đó, đơn giản là thêm vào bao nhiêu cột trên một dòng cũng được tùy theo nhu cầu.

Cassandra lưu trữ dữ liệu trong bảng băm đa chiều. Do đó ta không cần phải xác định trước cấu trúc dữ liệu của mình như thế nào, một bản ghi gồm những trường gì… Điều này rất có ích khi bắt đầu phát triển ứng dụng. Thay vì phải thiết kế một mô hình dữ liệu trước tiên rồi thực hiện các truy vấn xoay quanh mô hình đó như trong RDBMS, ta có thể tự do phân tích các truy vấn cần thiết trước, sau đó mới cung cấp dữ liệu phù hợp.

Theo tài liệu, Cassandra hỗ trợ tới 2 tỷ cột trên một dòng.

4. Tính sẵn sàng cao

Tính sẵn sàng có nghĩa là mọi yêu cầu (request) đều sẽ nhận được phản hồi. Trong Cassandra, dữ liệu được chia thành nhiều bản sao, sau đó được lưu ở nhiều node khác nhau nên khi client thực hiện tác vụ đọc / ghi thì Cassandra có thể đáp ứng ngay lập tức bằng cách thực hiện trên bản sao gần nhất hoặc trên tất cả các bản sao (phụ thuộc vào thông số Consitency).

5. Khả năng chịu lỗi

Dữ liệu được sao chép thành nhiều bản trên các node của cluster. Nếu chẳng may một node nào đó bị hỏng, ta vẫn có thể truy xuất dữ liệu từ các node khác.

6. Tính nhất quán có khả năng tùy chỉnh

Tính nhất quán của NoSQL nói chung và của Cassandra nói riêng có chút khác biệt so với tính nhất quán trong cơ sở dữ liệu quan hệ. Trong cơ sở dữ liệu quan hệ, tại mọi thời điểm, dữ liệu là nhất quán. Tuy nhiên trong Cassandra, dữ liệu sẽ nhất quán sau một khoảng thời gian nào đó chứ không phải được nhất quán ngay sau khi người dùng ghi dữ liệu.

Nguyên nhân là do chúng ta phải đánh đổi giữa tính nhất quán, tính sẵn sàng và khả năng chịu lỗi. Cassandra ưu tiên tính sẵn sàng hơn tính nhất quán. Người dùng có thể điều chỉnh tính nhất quán qua thông số Consistency level.

Consistency level: Là mức độ phản hồi từ server về client khi thực hiện các hành động đọc và ghi dữ liệu. Cassandra cung cấp các mức độ khác nhau cho việc này. Ví dụ khi thực hiện hành động ghi dữ liệu: phản hồi ghi thành công hay không có thể được trả về ngay, cũng có thể phải đợi ghi thành công trên một node hoặc ghi thành công trên 2 node, thậm chí ghi thành công trên toàn bộ số node rồi mới phản hồi về cho client là thành công hay không thành công. Tùy thuộc vào mức độ an toàn dữ liệu mà developer có thể thiết lập mức độ này. Đặc tính này làm tăng tính linh động khi làm việc với dữ liệu, đối với các dữ liệu quan trọng thì developer có thể thiết lập mức độ an toàn cao, còn muốn lấy phản hồi nhanh từ phía server thì sử dụng độ an toàn thấp.

7. Không ràng buộc về mô hình dữ liệu

Cassandra đáp ứng tất cả các định dạng dữ liệu (Có cấu trúc, bán cấu trúc và không có cấu trúc). Nó có thể tự động điều chỉnh các thay đổi với cấu trúc dữ liệu tùy theo nhu cầu. Thêm vào đó, Cassandra có hai cơ chế tạo column family là static và dynamic. Các developers có thể chọn một trong hai cơ chế tạo column family khi làm việc với Cassandra.

8. Hiệu năng cao

Cassandra có thể mở rộng quy mô một cách tuyến tính, băng thông và dung lượng lưu trữ tăng lên theo số node trong cluster tăng lên (như đã nói ở khả năng mở rộng). Do khả năng mở rộng là vô hạn, nên dù có nhiều request từ phía client hơn, Cassandra có thể duy trì thời gian phản hồi một cách nhanh chóng.

Mặt khác, việc Cassandra sao chép nhiều bản sao ở các node khác nhau cũng tạo thành lợi thế về mặt hiệu suất. Ví dụ, khi ghi dữ liệu vào một node ở Châu Mỹ, dữ liệu đó cũng được tự động sao chép sang các node ở Châu Á, Châu Âu.... Điều đó giúp cho người dùng ở các châu lục khác không gặp vấn đề trễ do khoảng cách.

Nhận xét

Bài đăng phổ biến từ blog này

Mô hình dữ liệu trong Cassandra

Các loại cấu trúc liên kết mạng (Network Topology)