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

MÔ HÌNH DỮ LIỆU CASSANDRA

Trong RDBMS, dữ liệu được lưu trữ trong bảng và những bảng trong một ứng dụng có mối quan hệ với nhau. Dữ liệu thường được chuẩn hóa sao cho giảm dư thừa dữ liệu. Còn trong Cassandra, keyspace là đối tượng chứa dữ liệu của ứng dụng, tương tự như database hay schema trong RDBMS. Bên trong keyspace là một hoặc nhiều column families - được hiểu như các bảng. Column family chứa các dòng gồm một tập những cột có liên quan với nhau được định nghĩa bởi một row key. Mỗi row trong một column family không yêu cầu phải có cùng số cột.

Cassandra không bắt buộc phải thiết lập mối quan hệ giữa các column family. Không có khóa ngoại trong Cassandra, không hỗ trợ join các column family tại thời điểm truy vấn. Mỗi column family sẽ có một tập những cột cho phép liên kết những bảng lại để lấy thông tin khi câu truy vấn được thực hiện.

1. Keyspace

Trong Cassandra, keyspace chứa toàn bộ dữ liệu của ứng dụng, tương tự schema trong RDBMS. Keyspace dùng để nhóm những column family lại với nhau. Mặc dù người ta khuyên rằng chỉ nên dùng một keyspace duy nhất ứng với một ứng dụng. Tuy nhiên vẫn hoàn toàn có thể tạo nhiều keyspace với một ứng dụng để phù hợp với yêu cầu.

Trong Cassandra, thuộc tính cơ bản để cấu hình một keyspace gồm Replication factor (RF), placement strategy.

2. Column family

Column family tương tự như bảng trong RDBMS. Tuy nhiên, chúng có những đặc điểm khác nhau. Trong RDBMS, khi định nghĩa bảng cùng với cột của nó (tên cột, kiểu dữ liệu cột), ta phải xác định trước các thuộc tính. Trong Cassandra, khi định nghĩa column family, column family có thể định nghĩa metadata về các cột, nhưng số lượng cột thực tế tạo nên một dòng được quyết định bởi client. Mỗi row có thể có số cột khác nhau.

Có 2 loại column family trong Cassandra là: Static và Dynamic.

Static column family: Có nhiều sự tương đồng với bảng trong RDBMS. Một static column family sử dụng một tập tương đối cố định các cột, thường có metadata được định nghĩa trước cho mỗi cột. Mặc dù các dòng có cùng một tập cột, nhưng không nhất thiết phải nhập giá trị xác định cho tất cả các cột.

Dynamic column family: Thể hiện toàn bộ sự linh động của Cassandra. Một column family động cho phép tính toán trước các tập kết quả và lưu chúng trong một dòng đơn để truy vấn dữ liệu hiệu quả. Mỗi dòng là một snapshot của dữ liệu thỏa mãn một truy vấn cụ thể.

3. Column

Column là phần tử nhỏ nhất trong Cassandra. Nó chứa đựng một tên, một giá trị và một timestamp (nhãn thời gian).

Về kiểu dữ liệu: Trong RDBMS, cần phải đặc tả kiểu dữ liệu cho mỗi cột khi định nghĩa bảng, và kiểu dữ liệu sẽ ràng buộc dữ liệu được insert vào đó. Tên cột trong RDBMS là một nhãn cố định. Còn trong Cassandra, kiểu dữ liệu của giá trị cột được gọi là validator, kiểu dữ liệu của tên cột được gọi là comparator. Ta có thể định nghĩa kiểu dữ liệu khi tạo column family hoặc không. Mặc định Cassandra lưu trữ tên cột và giá trị cột dưới dạng hex byte (BytesType).

Cassandra sử dụng cột nhãn thời gian để xác định cập nhật gần nhất của một cột. Nhãn thời gian được cung cấp bởi ứng dụng.

Nhận xét

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

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