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.

  • 🔤 Các loại hình gia đình: CQL phân loại các kiểu dữ liệu thành các nhóm: văn bản, số, ngày giờ, định danh và tập hợp.
  • 🔢 Lựa chọn số: Các kiểu dữ liệu từ tinyint đến varint bao phủ mọi độ rộng của số nguyên, trong khi decimal giữ nguyên độ chính xác tuyệt đối cho tiền tệ.
  • 🆔 UUID so với TimeUUID: timeuuid nhúng dấu thời gian và sắp xếp theo thứ tự thời gian, vì vậy nó phù hợp với các cột phân cụm được sắp xếp theo thời gian.
  • ⏳ Kiến thức cơ bản về TTL: Giá trị TTL tính bằng giây được thiết lập tại thời điểm chèn dữ liệu sẽ tự động xóa dữ liệu sau khi hết thời gian đó.
  • 🪦 Hành vi hết hạn: Dữ liệu hết hạn sẽ trở thành "bia mộ" và chỉ được loại bỏ về mặt vật lý sau khi nén.
  • 🧊 Các loại đông lạnh: Việc đánh dấu một tập hợp hoặc bộ dữ liệu là "đóng băng" sẽ lưu trữ nó như một giá trị bất biến duy nhất cần được thay thế toàn bộ.

Cassandra Các kiểu dữ liệu TTL CQL

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.

Cassandra TTL sử dụng hết hạn dữ liệu tự động

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.

Cassandra TTL sử dụng hết hạn dữ liệu tự động

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.

Câu Hỏi Thường Gặp

Không. TTL được gắn với các giá trị không phải khóa. Một hàng chỉ biến mất khi tất cả các cột không phải khóa đã hết hạn, vì vậy việc đặt TTL cho toàn bộ quá trình chèn là cách tiếp cận đáng tin cậy.

Thời gian lưu trữ tối đa là 630,720,000 giây, tương đương 20 năm. Các giá trị vượt quá mức này sẽ bị loại bỏ, do đó việc lưu trữ lâu hơn phải được xử lý bởi một tác vụ dọn dẹp ở cấp độ ứng dụng.

Hãy đóng băng tập hợp dữ liệu khi toàn bộ giá trị luôn được ghi cùng nhau hoặc khi nó là một phần của khóa chính. Một tập hợp dữ liệu đã đóng băng không thể cập nhật các phần tử riêng lẻ.

Thông thường là đúng trong những trường hợp rõ ràng, nhưng nó thường gợi ý sử dụng giá trị gấp đôi cho tiền và UUID khi cần UUID thời gian để sắp xếp. Hãy kiểm tra độ chính xác số và lựa chọn sắp xếp thời gian thủ công.

Nó có thể chuyển đổi chính sách lưu giữ dữ liệu thành giá trị TTL và đề xuất chiến lược nén dữ liệu. Trước tiên, hãy xác nhận thời hạn lưu giữ hợp pháp, vì dữ liệu đã hết hạn không thể khôi phục được.

Tóm tắt bài viết này với: