3. Mơ hình dữ liệu Cassandra
3.5 Các column đặc biệt (Counter, Expiring, Super)
3.5.1 Expiring Columns
Một cột có thể có một ngày hết hạn tùy chọn gọi là TTL (time to live). Mỗi khi một cột được thêm vào, ứng dụng yêu cầu có thể chỉ ra một giá trị TTL tùy chọn, được định nghĩa bằng giây, cho cột đó. Các cột TTL được đánh dấu xóa sau khi thời gian yêu
cầu hết hạn. Một khi chúng được đánh dấu xóa, chúng sẽ tự động bị loại bỏ khỏi các q trình sửa hay nén thơng thường.
Bạn có thể sử dụng CLI hay CQL để thiết lập TTL cho một cột.
Nếu bạn muốn thay đổi TTL của một cột có hạn, bạn phải thêm lại cột đó với giá trị TTL mới. Trong Cassandra việc thêm một cột thực sự là thao tác thêm hoặc cập nhât, phụ thuộc vào phiên bản trước của cột đó đã tồn tại hay chưa. Điều này có nghĩa là để cập nhật TTL cho một cột với một giá trị khơng xác định, bạn phải đọc cột và sau đó thêm lại cột đó với một giá trị TTL mới.
Các cột TTL có độ chính xác đến một giây, được tính tốn trên server. Do đó, một giá trị TTL rất nhỏ có lẽ khơng có mấy ý nghĩa. Hơn nữa, các đồng hồ trên server phải
được đồng bộ hóa; nếu khơng độ chính xác có thể bị giảm vì thời gian hết hạn được tính
tốn trên máy chủ chính nhận thao tác thêm cột đầu tiên, nhưng sau đó lại được đọc ra bởi các máy khác trên cluster.
Một cột có hạn có thêm 8 byte mào đầu trong bộ nhớ hay ổ đĩa (để ghi TTL và thời gian hết hạn) so với các cột chuẩn.
3.5.2 Counter Columns
Counter là một kiểu cột đặc biệt được sử dụng để lưu trữ một số có giá trị đếm tự
tăng khi có sự xuất hiện của một sự kiện hoặc tiến trình cụ thể nào đó. Ví dụ, bạn có thể
sử dụng cột counter để đếm số lần một trang được xem.
Các counter column family phải sử dụng CounterColumnType là kiểu dữ liệu cho cột. Điều này có nghĩa là hiện tại, các cột counter chỉ có thể được lưu trữ trong các column family chuyên biệt; chúng sẽ được phép trộn với các cột thông thường trong
tương lai.
Cột counter khác với các cột thơng thường ở chỗ một khi nó được định nghĩa, ứng dụng chỉ có thể cập nhật giá trị cột bằng cách tăng hoặc giảm nó. Để cập nhật tới cột counter,ứng dụng cần truyền tên của cột và giá trị tăng (hoặc giảm); không cần nhãn thời
Về bên trong, cấu trúc của một cột counter có một chút phức tạp hơn. Cassandra theo dõi trạng thái phân tán của counter cũng như nhãn thời gian mà server sinh ra khi xóa một cột counter. Vì lý do này, điều quan trọng là tất cả các node trong cluster phải có đồng hồ được đồng bộ hóa bằng giao thức thời gian mạng (network time protocol NTP).
Một cột counter có thể được đọc hay viết ở bất cứ mức độ nhất quán nào. Tuy
nhiên, điều quan trọng là phải hiêu rằng không giống những cột thông thường, việc ghi
vào cột counter yêu cầu một lần đọc trước để đảm bảo rằng các giá trị counter phân tán vẫn thống nhất với nhau trên các bản sao. Nếu bạn ghi ở mức độ nhất quán là 1, việc đọc
ẩn sẽ không ảnh hưởng đến độ ghi trễ, nên 1 là mức độ nhất quán phổ biến nhất dùng với counter.
3.5.3 Super Columns
Một Cassandra column family có thể chứa cả cột thơng thường và siêu cột – điều này làm cho mức độ lồng ghép trong cấu trúc column family thông thường tăng lên. Siêu cột được tạp thành từ tên (siêu) cột và một bản đồ được sắp xếp của các cột con. Một siêu cột có thể chỉ ra một kiểu dữ liệu (comparator) cho cả tên siêu cột và tên cột con.
Một siêu cột là một cách nhóm nhiều cột dựa trên một giá trị tìm kiếm chung. Mục
đích sử dụng chính của siêu cột là để phi chuẩn hóa nhiều dịng từ các column family
khác vào trong một dòng, cho phép lấy dữ liệu dưới cái nhìn cụ thể hóa. Ví dụ, giả sử bạn muốn tạo ra một cái nhìn cụ thể của các blog entry cho những blogger mà một người
Một hạn chế của siêu cột là tất cả các cột con của siêu cột đó phải được giải tuần tự
hóa để đọc từng giá trị riêng của cột con, và bạn không thể tạo ra các chỉ mục thứ cấp trên
các cột con của siêu cột. Do đó, việc dùng siêu cột phù hợp nhất cho trường hợp số lượng cột con tương đối nhỏ.