삭제 표시의 종류
삭제 표시는 여러 가지 방법으로 만들 수 있으며,클러스터에 영향을 미치는 그럴듯한 문제로 나타날 때까지 프로그래머의 관점에서 숨겨져 있는 삭제 표시의 암시적 생성으로 이어질 수 있는 특정 함정을 이해하는 것이 중요합니다. 따라서 카산드라에서 만들 수 있는 삭제 표시의 유형을 이해하는 것이 중요합니다.
셀 삭제 표시
이 문제는 데이터베이스 추상화 계층 또는 프레임워크가 개체 수준 표현으로 쿼리를 추상화하고 널 값이 실제 쿼리에서 카산드라에게 암시적으로 전송될 때 발생할 수 있습니다. 예를 들어 다음 쿼리를 고려하십시오:
INSERT INTO item_price ( store_number, item_id, price, replacements, product_code ) VALUES ( 'CA104', 'item104', 2.50, null , 'p104');
그러면 레코드에 대한 대체 열에 대한 셀 삭제 표시가 만들어집니다.
이제 다음 삭제 쿼리를 고려하십시오:
DELETE replacements FROM item_price WHERE store_number = 'CA104';
또한 해당 레코드에 대한 셀 삭제 표시도 만듭니다.
행 삭제 표시
행을 식별하는 삭제 쿼리의 결과로 전체 행이 삭제 표시로 표시됩니다. 예를 들어:
DELETE FROM item_price WHERE store_number = 'CA101' and item_id='item101' and price = 1.80;
파티션 내의 클러스터링 열에 대한 행 수준에서 삭제 정보가 표시됩니다.
,
"position" : 0
},
"rows" : ,
"deletion_info" : {
"marked_deleted" : "2020-07-05T07:26:52.233374Z",
"local_delete_time" : "2020-07-05T07:26:52Z"
},
"cells" :
}
]
}
]
많은 수의 행 삭제 표시는 응용 프로그램이 테이블에서 레코드를 자주 삭제하는 잘못된 데이터 모델을 나타낼 수 있습니다. 이러한 경우 데이터 모델을 다시 방문하고 쿼리 패턴 및 카디널리티를 기반으로 테이블을 다시 디자인하는 것이 좋습니다.
범위 삭제 표시
파티션 키가 있는 절과 클러스터링 열로 표시되는 범위를 사용하여 전체 행 범위를 삭제합니다. 예를 들어:
DELETE FROM item_price WHERE store_number = 'CA101' AND item_id='item101' AND price > 2.0;
스태 블덤프는 보여줄 것입니다,
,"position" : 0
},
"rows" : ,
"deletion_info" : { "marked_deleted" : "2020-07-05T06:53:50.671654Z", "local_delete_time" : "2020-07-05T06:53:50Z" }
}
},
{
"type" : "range_tombstone_bound",
"end" : {
"type" : "inclusive",
"clustering" : ,
"deletion_info" : { "marked_deleted" : "2020-07-05T06:53:50.671654Z", "local_delete_time" : "2020-07-05T06:53:50Z" }
}
}
]
}
}}
클러스터링 키의 시작과 끝은 파티션 내에서 삭제된 행의 범위를 나타내는 데 사용됩니다. 범위 삭제 표시는 전체 컬렉션을 삽입 또는 업데이트 쿼리로 바꿀 때도 만들어집니다. 전체 컬렉션 자체를 교체하는 대신 컬렉션의 특정 요소를 교체하는 것이 좋습니다.
파티션 삭제 표시
이 형식의 삭제 표시는 위치 절의 파티션 키만 사용하여 삭제 쿼리를 실행할 때 만들어집니다. 예를 들어:
DELETE FROM item_price WHERE store_number = 'CA102';
이 속성은 파티션에 표시된 타임스탬프와 함께 삭제 속성을 표시합니다.삭제 표시
특정 행 또는 셀에 대해 라이브 시간이 만료될 때 자동으로 생성되는 삭제 표시입니다. 그러나 일반 삭제 표시와 다르게 표시됩니다.
다음 삽입 문은 20 초 후에 삭제 표시를 만듭니다.
INSERT INTO item_price ( store_number, item_id, price, replacements, product_code) VALUES ( 'CA103', 'item103', 3.0, {'item101-r', 'item101'}, 'p103') using TTL 20;
:
,
"position" : 78
},
"rows" : ,
"liveness_info" : { "tstamp" : "2020-07-05T06:47:51.458099Z", "ttl" : 20, "expires_at" : "2020-07-05T06:48:11Z", "expired" : true },
"cells" : }
]
}
]
}
]
요약
- 카산드라는 삭제 쿼리를 삭제할 데이터에 삭제 표시라는 마커를 추가하는 업데이트 작업으로 내부적으로 처리합니다.
- 삭제 표시는 만료 시간(초)으로 구성할 수 있으며 압축 프로세스 중에 정리됩니다.
- 테이블 덤프 유틸리티를 사용하여 사람이 읽을 수 있는 형식으로 테이블 파일의 내용을 볼 수 있습니다.
- 삭제 표시를 만들 수 있으므로 테이블에 널 값을 쓰지 마십시오. 쿼리가 사용자 계층에 의해 추상화되는 동안 주의하십시오.
- 범위 삭제 표시는 디스크 공간을 절약하는 범위 경계를 저장하기 때문에 셀 또는 행 삭제 표시보다 선호됩니다.
- 범위 삭제 표시를 만들 수 있으므로 집합,목록,맵과 같은 컬렉션의 전체 요소를 삽입 및 업데이트 쿼리로 바꾸지 마십시오.