3. Mô hình dữ liệu Cassandra
3.3 Column Families
Khi so sánh Cassandra với cơ sở dữ liệu quan hệ, column family giống như bảng trong đó nó chứa các cột và dòng. Tuy nhiên, một column family cần thay đổi lớn trong
suy nghĩ của những người quen thuộc với thế giới quan hệ.
Trong cơ sở dữ liệu quan hệ, bạn định nghĩa ra các bảng có các cột cố định. Bảng xác định tên cột, và kiểu dữ liệu của nó, và sau đó ứng dụng cung cấp các dòng để hoàn thiện schema đó: mỗi dòng chứa cùng một số cột cố định như nhau.
Trong Cassandra, bạn định nghĩa các column family. Các column family có thể (và nên) định nghĩa metadata về các cột, nhưng các cột thực sự tạp thành một dòng được xác định bởi ứng dụng. Mỗi dòng có thể có số lượng cột khác nhau.
Mặc dù các column family rất linh hoạt, nhưng trong thực thế mỗi column family không hoàn toàn không có lược đồ. Mỗi column family nên được thiết kế để chứa một
kiểu dữ liệu. Có 2 kiểu mẫu thiết kế column family phổ biến trong Cassandra: các column family động và tĩnh.
Một column family tĩnh sử dụng một tập tương đối cố định các tên cột cột và giống
với cơ sở dữ liệu quan hệ hơn. Ví dụ, một column family lưu trữ dữ liệu người dùng có thể có các cột tên người dùng, địa chỉ, email, số điện thoại… Mặc dù các dòng sẽ có cùng một tập cột, chúng không bắt buộc phải có giá trị xác định cho tất cả các cột. Column
family tĩnh thường có metadata được đĩnh nghĩa trước cho mỗi cột.
Một column family động tận dụng được ưu điểm trong khả năng của Cassandra để
dùng các tên cột bất kỳ mà ứng dụng cung cấp để lưu trữ dữ liệu. Một column family động cho phép bạn 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ể.
Ví dụ, một column family theo dõi người sử dụng đăng kíxem một blog của người dùng nào đó.
Thay vì định nghĩa metadata cho các cột riêng lẻ, một column family động định
nghĩa kiểu thông tin cho các tên giá giá trị của cột, nhưng tên và giá trị thực sự của cột được đặt ởi ứng dụng khi một cột được thêm vào.
Với tất cả các column family, mỗi dòng là duy nhất và được xác định bằng khóa
của dòng đó, giống như khóa chính trong bảng quan hệ. Một column family luôn được
phân chia theo khóa dòng của nó, và khóa dòng luôn luôn được đánh chỉ mục ẩn. Khóa
dòng khôngđược phép để trống.