3. Mơ hình dữ liệu Cassandra
3.1 So sánh mơ hình dữ liệu Cassandra với cơ sở dữ liệu quan hệ
Mơ hình dữ liệu Cassandra được thiết kế cho dữ liệu phân tán với quy mô rất lớn. Mặc dù nhu cầu so sánh Cassandra với cơ sở dữ liệu quan hệ là rất tự nhiên, nhưng chúng
hoàn toàn khác nhau. Trong cơ sở dữ liệu quan hệ, dữ liệu được lưu trong các bảng, các
bảng này tạo thành một ứng dụng mà chúng thường liên quan đến nhau. Dữ liệu được chuẩn hóa để giảm các bản ghi dư thừa, và các bảng được kết nối bằng khóa để thỏa mãn một truy vấn nào đấy. Ví dụ, xem xét một ứng dụng cho phép người dùng tạo các bài blog. Trong ứng dụng này, bài blog được phân loại theo chủ đề (thể thao, thời trang …). Người dùng có thể chọn đăng kí xem blog của những người khác. Trong ví dụ này, user
id là khóa chính trong bảng user, và là khóa ngoại trong các bảng blog và subcriber.
Tương tự, category id là khóa chính của bảng category và là khóa ngoại trong bảng
blog_entry. Sử dụng mơ hình quan hệ, các truy vấn SQL có tể thực hiện join nhiều bảng
để trả lời câu hỏi “những người dùng nào đăng kí xem blog của tơi”, hay “cho tôi xem tất
cả các blog viết về thời trang” hay “cho tôi xem các bài viết mới nhất của các blog mà tơi
Trong Cassandra, keyspace là nơi chứa tất cả dữ liệu ứng dụng, tương tự với một cơ sở dữ liệu hay lược đồ trong một cơ sở dữ liệu quan hệ. Bên trong keyspace là một
hoặc nhiều đối tượng column family tương tự như các bảng. Các column family chứa các cột và một tập các cột được xác định bởi một row key do ứng dụng cung cấp. Mỗi dịng là trong một column family khơng nhất thiết phải có cùng các cột.
Cassandra không áp đặt quan hệ giữa các column family như cách mà cơ sở dữ liệu
quan hệ thực hiện với các bảng: khơng có khóa ngoại trong Cassandra, và việc join các column family khi truy vấn khơng được hỗ trợ. Mỗi column family có một tập các cột tự chứa được dự định để được truy nhập cùng nhau để thỏa mãn các truy vấn nào đó từ ứng dụng.
Ví dụ, sử dụng vó dụ ứng dụng blog ở trên, bạn có thể có một column family cho user và blog entry như trong mơ hình quan hệ. Sau đó, các column family khác có thể
được thêm vào để hỗ trợ truy vấn mà ứng dụng cần thực hiện. Ví dụ, để trả lời truy vấn “những người dùng nào đăng kí xem blog của tơi” ”, hay “cho tơi xem tất cả các blog viết
về thời trang” hay “cho tôi xem các bài viết mới nhất của các blog mà tơi đăng kí”, bạn có thể cần thiết kế các column family bổ sung để hỗ trợ những truy vấn này. Chú ý rằng cần thực hiện một số phi chuẩn hóa đối với dữ liệu.