26Z10c1

Young-Kyoo Kim·5일 전

아닙니다. 모든 테이블이 대상이 되지는 않습니다.

__deleted = 1이 Compaction 시 디스크에서 레코드를 실제 삭제(Purge)시키는 특수한 메커니즘으로 동작하는 것은 Primary Key 테이블 모델에 한정됩니다.


테이블 모델별 __deleted 동작 차이

테이블 모델__deleted 컬럼의 의미 및 동작Compaction 시 물리 삭제 여부
Primary Key 모델시스템 예약 컬럼 / Delete Flag로 인식


__deleted = 1 데이터를 넣으면 StarRocks가 해당 PK를 삭제(Tombstone)로 처리함 | O (자동 물리 삭제)


Compaction 수행 시 Tombstone 데이터 및 이전 버전 레코드가 디스크에서 완전히 정리됨 |
| Duplicate Key 모델 | 일반 사용자 정의 컬럼에 불과함


단순히 숫자 1이라는 값이 들어간 데이터로 저장됨 | X (물리 삭제 안 됨)


별도의 DELETE FROM ... WHERE __deleted = 1 구문을 실행하지 않는 한 데이터가 계속 남아 있음 |
| Aggregate Key 모델 | 일반 컬럼으로 취급됨 | X (물리 삭제 안 됨) |
| Unique Key 모델 | MOW(Merge-on-Write) 여부에 따라 내부 Delete Vector로 관리되며, 단순히 __deleted = 1이라는 컬럼을 추가해서 넣는다고 자동 삭제 처리되지 않음 | X (DELETE 구문 필요) |


결론 및 주의사항

  • 인벤토리 Reconciliation처럼 __deleted = 1을 Upsert하여 자동으로 소프트 삭제 및 Compaction 시 디스크 정리까지 유도하려면 반드시 테이블이 PRIMARY KEY 모델로 생성되어 있어야 합니다.
  • Duplicate Key 모델 등에서 주기적으로 레코드를 물리 삭제하고 싶다면, __deleted = 1 데이터를 단순히 Insert하는 것이 아니라 DELETE FROM table WHERE __deleted = 1; 구문을 주기로 직접 실행해야 합니다.

0개의 댓글