Cassandra TTL & Cassandra Các kiểu dữ liệu CQL (Ví dụ)
⚡ Tóm tắt thông minh
Cassandra Kiểu dữ liệu xác định những gì mỗi cột có thể chứa, và TTL kiểm soát thời gian một giá trị tồn tại trước khi tự động hết hạn. Trang này liệt kê mọi kiểu dữ liệu CQL, giải thích cơ chế hết hạn và đề cập đến hành vi của bản ghi xóa sau khi hết hạn.
Cassandra Loại dữ liệu
Cassandra hỗ trợ các loại kiểu dữ liệu khác nhau. Đây là bảng hiển thị các kiểu dữ liệu, hằng số và mô tả của chúng.
| Loại CQL | Hằng số | Mô tả Chi tiết |
|---|---|---|
| ascii | Strings | Chuỗi ký tự US-Ascii |
| cố chấp | Số nguyên | 64-bit được ký dài |
| bãi | blobs | Các byte tùy ý ở dạng thập lục phân |
| boolean | Booleans | Đúng hay sai |
| chống lại | Số nguyên | Giá trị bộ đếm phân tán 64 bit |
| ngày | Số nguyên, chuỗi | Ngày tháng trên lịch không có thành phần thời gian |
| số thập phân | Số nguyên, số float | Số thập phân có độ chính xác thay đổi |
| tăng gấp đôi | Số nguyên, số float | Dấu chấm động 64 bit |
| thời gian | Thời lượng | Khoảng thời gian tính bằng tháng, ngày và nano giây |
| phao | Số nguyên, số float | Dấu chấm động 32 bit |
| đông lạnh | Bộ dữ liệu, bộ sưu tập, loại do người dùng xác định | Lưu trữ một giá trị nhiều phần dưới dạng một khối dữ liệu bất biến duy nhất. |
| inet | Strings | Địa chỉ IP ở định dạng IPv4 hoặc IPv6 |
| int | Số nguyên | Số nguyên có dấu 32 bit |
| Tập hợp các phần tử được sắp xếp theo thứ tự | ||
| bản đồ | Tập hợp các cặp khóa và giá trị theo định dạng JSON | |
| định | Tập hợp các phần tử độc đáo không được sắp xếp | |
| lửa nhỏ | Số nguyên | Số nguyên có dấu 16 bit |
| văn bản | Strings | Chuỗi được mã hóa UTF-8 |
| thời gian | Số nguyên, chuỗi | Thời gian trong ngày với độ chính xác đến từng nano giây. |
| dấu thời gian | Số nguyên, chuỗi | Ngày cộng với giờ, được mã hóa dưới dạng mili giây kể từ thời điểm bắt đầu kỷ nguyên. |
| timeuuid | UUID | UUID loại 1, có thể sắp xếp theo thời gian nhúng. |
| tí hon | Số nguyên | Số nguyên có dấu 8 bit |
| bộ đồ | Một nhóm cố định các trường được định kiểu | |
| uuid | UUID | UUID tiêu chuẩn |
| vecni | Strings | Chuỗi được mã hóa UTF-8, một tên gọi khác của văn bản. |
| varint | Số nguyên | Số nguyên chính xác tùy ý |
Ba lựa chọn trong danh sách đó gây ra hầu hết các lỗi mô hình hóa, vì vậy chúng đáng được nêu rõ.
- văn bản so với kiểu dữ liệu varchar. Chúng thuộc cùng một loại. Tên nào cũng được, và việc trộn lẫn chúng không mang lại giá trị gì.
- Dấu thời gian so với timeuuid. Sử dụng dấu thời gian để ghi lại thời điểm xảy ra sự kiện. Sử dụng timeuuid làm cột nhóm khi nhiều sự kiện cùng xảy ra trong một mili giây, vì UUID đảm bảo tính duy nhất trong khi vẫn sắp xếp theo thời gian.
- số thập phân so với số thực. Giá trị tiền tệ nên được biểu diễn dưới dạng thập phân. Kiểu dữ liệu double sẽ gây ra sai số làm tròn nhị phân, tích lũy dần qua các phép tính tổng.
A chống lại Cột này có một hạn chế đặc biệt: một bảng chỉ có thể chứa cột đếm hoặc cột thông thường, không bao giờ cả hai, và không thể chèn thêm hàng đếm, chỉ có thể tăng số hàng lên.
Cassandra TTL (Thời gian tồn tại) sử dụng tính năng hết hạn dữ liệu tự động
Cassandra cung cấp chức năng mà dữ liệu có thể tự động hết hạn.
Trong quá trình chèn dữ liệu, bạn phải chỉ định giá trị 'ttl' tính bằng giây. Giá trị 'ttl' là giá trị thời gian tồn tại của dữ liệu. Sau khoảng thời gian cụ thể đó, dữ liệu sẽ tự động bị xóa.
Ví dụ: chỉ định giá trị ttl 100 giây trong khi chèn. Dữ liệu sẽ tự động bị xóa sau 100 giây. Khi dữ liệu hết hạn, dữ liệu hết hạn đó sẽ được đánh dấu bằng bia mộ.
Một bia mộ tồn tại trong một thời gian ân hạn. Sau khi dữ liệu hết hạn, dữ liệu sẽ tự động bị xóa sau quá trình nén.
cú pháp
INSERT INTO KeyspaceName.TableName (ColumnNames) VALUES (ColumnValues) USING TTL TimeInSeconds;
Ví dụ
Đây là ảnh chụp nhanh nơi dữ liệu được chèn vào bảng Sinh viên với giá trị ttl là 100 giây.
INSERT INTO University.Student (rollno, name, dept, semester) VALUES (3, 'Guru99', 'CS', 7) USING TTL 100;
Đây là ảnh chụp nhanh trong đó dữ liệu tự động hết hạn sau 100 giây và dữ liệu sẽ tự động bị xóa.
Kiểm tra và thay đổi TTL trên dữ liệu hiện có
Khi một giá trị có thuộc tính TTL, ba thao tác tiếp theo sẽ hữu ích, và mỗi thao tác đều có cách hoạt động khiến người mới làm quen với nó phải ngạc nhiên.
Bạn có thể đọc thời gian tồn tại còn lại của bất kỳ cột nào không phải là khóa chính bằng hàm TTL.
SELECT name, TTL(name) FROM University.Student WHERE rollno = 3;
Kết quả rỗng có nghĩa là cột đó không có thời hạn hết hạn được thiết lập. Không thể truy vấn các cột khóa chính theo cách này, vì TTL được gắn với giá trị chứ không phải với khóa.
Có thể gán giá trị TTL mới cho một giá trị hiện có bằng cách cập nhật nó, thao tác này sẽ đặt lại bộ đếm ngược từ thời điểm đó.
UPDATE University.Student USING TTL 600 SET name = 'Guru99' WHERE rollno = 3;
Việc thiết lập giá trị mặc định cho toàn bộ bảng giúp tránh lặp lại mệnh đề đó trong mỗi câu lệnh.
ALTER TABLE University.Student WITH default_time_to_live = 86400;
Có hai hệ quả phát sinh. Thứ nhất, TTL áp dụng cho mỗi cột, không phải mỗi hàng, vì vậy việc cập nhật một cột mà không có TTL sẽ khiến cột đó vẫn còn tồn tại sau khi các cột khác hết hạn, dẫn đến hàng đó chỉ được điền một phần. Việc đặt TTL cho toàn bộ thao tác chèn sẽ tránh được điều này. Thứ hai, mỗi lần hết hạn sẽ ghi một bản ghi xóa (tombstone), vì vậy một bảng có hàng triệu hàng hết hạn cùng lúc sẽ làm chậm quá trình đọc cho đến khi quá trình nén (compaction) xóa chúng. Sử dụng TimeWindowCompactionStrategy cho các bảng như vậy cho phép toàn bộ SSTable được xóa cùng một lúc thay vì được nén từng hàng một.
Thời hạn hết hạn cũng có thể được áp dụng cho các phần tử bên trong một tập hợp, điều này được đề cập trong phần tiếp theo. Cassandra bộ sưu tập hướng dẫn.



