Cassandra TTL & Cassandra CQL 데이터 유형(예)
⚡ 스마트 요약
Cassandra 데이터 형식은 각 열에 저장될 수 있는 값을 정의하고, TTL(Time To Live)은 값이 자동으로 만료되기 전까지 유지되는 시간을 제어합니다. 이 페이지에서는 모든 CQL 형식을 나열하고, 만료 메커니즘을 설명하며, 만료 후 발생하는 툼스톤 동작에 대해 다룹니다.
Cassandra 데이터 타입
Cassandra 다양한 유형의 데이터 유형을 지원합니다. 다음은 데이터 유형, 해당 상수 및 설명을 보여주는 표입니다.
| CQL 유형 | 상수 | 기술설명 |
|---|---|---|
| 아스키 | 문자열 | US-Ascii 문자열 |
| bigint | 정수 | 64비트 부호 있는 길이 |
| 윤곽이 흐릿한 것 | 모양 | XNUMX진수의 임의 바이트 |
| 부울 | 부울 | 참 또는 거짓 |
| 카운터 | 정수 | 분산 카운터 값 64비트 |
| 데이터 | 정수, 문자열 | 시간 요소가 없는 달력 날짜 |
| 소수 | 정수, 부동 소수점 | 가변 정밀도 십진수 |
| 더블 | 정수, 부동 소수점 | 64 비트 부동 소수점 |
| 지속 | 런닝타임 | 수개월, 일, 그리고 나노초의 범위 |
| 뜨다 | 정수, 부동 소수점 | 32 비트 부동 소수점 |
| 겨울 왕국 | 튜플, 컬렉션, 사용자 정의 유형 | 여러 부분으로 구성된 값을 하나의 변경 불가능한 블롭으로 저장합니다. |
| inet | 문자열 | IPv4 또는 IPv6 형식의 IP 주소 |
| INT | 정수 | 32비트 부호 있는 정수 |
| 명부 | 정렬된 요소들의 모음 | |
| 지도 | JSON 스타일의 키-값 쌍 모음 | |
| 세트 | 순서가 정해지지 않은 고유한 요소들의 모음 | |
| 스몰 인트 | 정수 | 16비트 부호 있는 정수 |
| 본문 | 문자열 | UTF-8로 인코딩된 문자열 |
| 시간 | 정수, 문자열 | 나노초 단위 정밀도로 하루 중 시간을 측정할 수 있습니다. |
| 따라서 오른쪽 하단에 | 정수, 문자열 | 날짜와 시간(에포크 이후 밀리초 단위로 인코딩됨) |
| 타임유이드 | UUID | 내장 시간 기준으로 정렬 가능한 유형 1 UUID |
| 작은 | 정수 | 8비트 부호 있는 정수 |
| 튜플 | 고정된 유형의 필드 그룹 | |
| uuid | UUID | 표준 UUID |
| varchar | 문자열 | UTF-8로 인코딩된 문자열, 텍스트의 별칭 |
| 변형 | 정수 | 임의 정밀도 정수 |
해당 목록의 세 가지 선택 사항이 대부분의 모델링 오류를 유발하므로 명확하게 언급할 필요가 있습니다.
- varchar에 대한 텍스트. 둘은 같은 유형입니다. 어느 이름으로 불러도 무방하며, 혼용해서 사용하는 것은 의미가 없습니다.
- 타임스탬프와 timeuuid의 비교. 어떤 일이 발생한 시점을 기록할 때는 타임스탬프를 사용하세요. 여러 이벤트가 동일한 밀리초를 공유하는 경우에는 UUID를 클러스터링 열로 사용하세요. UUID는 시간순 정렬을 유지하면서도 고유성을 보장합니다.
- 소수점과 이중수. 화폐 가치는 십진수로 표현해야 합니다. double형은 이진 반올림 오류를 발생시키며, 이 오류는 여러 집계 과정에서 누적됩니다.
A 카운터 해당 열에는 특별한 제약 조건이 있습니다. 테이블에는 카운터 열 또는 일반 열 중 하나만 포함할 수 있으며, 둘 다 포함할 수는 없습니다. 또한 카운터 행은 삽입할 수 없고 증가만 가능합니다.
Cassandra 자동 데이터 만료를 사용한 TTL(Time to Live)
Cassandra 데이터를 자동으로 만료할 수 있는 기능을 제공합니다.
데이터 삽입 시 'ttl' 값을 초 단위로 지정해야 합니다. 'ttl' 값은 데이터의 TTL(Time to Live) 값입니다. 특정 시간이 지나면 데이터가 자동으로 제거됩니다.
예를 들어 삽입하는 동안 ttl 값을 100초로 지정합니다. 데이터는 100초 후에 자동으로 삭제됩니다. 데이터가 만료되면 만료된 데이터에 삭제 표시가 표시됩니다.
유예 기간 동안 묘비가 존재합니다. 데이터가 만료되면 압축 프로세스 후 데이터가 자동으로 제거됩니다.
통사론
INSERT INTO KeyspaceName.TableName (ColumnNames) VALUES (ColumnValues) USING TTL TimeInSeconds;
예시
다음은 ttl 값이 100초인 Student 테이블에 데이터가 삽입되는 스냅샷입니다.
INSERT INTO University.Student (rollno, name, dept, semester) VALUES (3, 'Guru99', 'CS', 7) USING TTL 100;
다음은 100초 후 데이터가 자동으로 만료되고 데이터가 자동으로 제거되는 스냅샷입니다.
기존 데이터의 TTL 확인 및 변경
값이 TTL(Time To Live)을 갖게 되면 세 가지 추가 작업이 유용하며, 각 작업은 처음 접하는 사람들에게는 다소 생소한 동작을 보입니다.
기본 키가 아닌 열의 남은 수명은 TTL 함수를 사용하여 확인할 수 있습니다.
SELECT name, TTL(name) FROM University.Student WHERE rollno = 3;
결과가 null이면 해당 열에 만료 시간이 설정되어 있지 않음을 의미합니다. 기본 키 열은 TTL이 키가 아닌 값에 연결되므로 이러한 방식으로 쿼리할 수 없습니다.
기존 값을 업데이트하여 새로운 TTL을 지정할 수 있으며, 이렇게 하면 해당 시점부터 카운트다운이 재설정됩니다.
UPDATE University.Student USING TTL 600 SET name = 'Guru99' WHERE rollno = 3;
테이블 전체에 적용되는 기본값을 사용하면 모든 문장에서 해당 절을 반복하는 것을 방지할 수 있습니다.
ALTER TABLE University.Student WITH default_time_to_live = 86400;
두 가지 결과가 발생합니다. 첫째, TTL은 행 단위가 아닌 열 단위로 적용되므로 TTL 없이 한 열만 업데이트하면 나머지 열이 모두 만료된 후에도 해당 열은 그대로 남아 행이 부분적으로만 채워지는 문제가 발생합니다. 전체 삽입 작업에 TTL을 설정하면 이러한 문제를 방지할 수 있습니다. 둘째, 만료될 때마다 테이블 상단에 툼스톤이 기록되므로 수백만 개의 행이 동시에 만료되는 테이블은 압축으로 인해 툼스톤이 삭제될 때까지 읽기 속도가 느려집니다. 이러한 테이블에 TimeWindowCompactionStrategy를 사용하면 행 단위로 압축하는 대신 전체 SSTable을 한 번에 삭제할 수 있습니다.
컬렉션 내부의 요소에도 만료 기능을 적용할 수 있으며, 이는 다음에서 다룹니다. Cassandra 컬렉션 튜토리얼.



