셀 수준 TTL 시뮬레이션

Bigtable에서 가비지 컬렉션 정책은 column family 수준에서 설정되며 개발자는 셀 수준 가비지 컬렉션 정책을 지정할 수 없습니다. 하지만 가비지 컬렉션 설정을 변경하여 셀 수준에서 TTL(수명) 정책을 시뮬레이션할 수 있습니다. 이 페이지에서는 사용 가능한 몇 가지 방식을 설명합니다.

이 페이지를 읽기 전에 가비지 컬렉션 개요를 읽어야 합니다. 타임스탬프가 포함된 쓰기 요청을 보내는 방법은 Bigtable 쓰기를 참조하세요.

1초 만료

이 방식에서는 1초 후에 데이터가 만료되도록 가비지 컬렉션 규칙을 설정합니다. 데이터를 쓸 때마다 셀의 타임스탬프를 값 만료 시간으로 설정합니다. 압축하는 동안 Bigtable은 1초 이상 지난 타임스탬프가 있는 모든 셀을 삭제합니다. 예를 들어 셀의 타임스탬프를 4월 30일 오전 9:00:00으로 설정하면 4월 30일 오전 9:00:01 이후의 셀은 삭제됩니다. 이 방식을 통해 같은 column family에 있는 다양한 셀에 서로 다른 만료 값을 설정할 수 있습니다.

1초 만료의 장점

  • 타임스탬프가 실제 만료 시간입니다.

1초 만료의 단점

  • 이 Bigtable Column Family에 데이터를 쓰는 모든 애플리케이션이 이 규칙을 따르도록 구성해야 합니다. 이를 잊어버리고 쓰기에 기본 서버 타임스탬프를 사용하면 데이터가 즉시 만료되고 다음 압축 시에 삭제됩니다.

  • 타임스탬프가 '실제'가 아니므로 타임스탬프를 다른 사용 사례(예: 값을 쓴 시간 확인)에 사용할 수 없습니다. 이 문제를 해결하기 위해 별도의 열에 실제 타임스탬프를 기록할 수 있지만 이렇게 하면 저장되는 데이터 양이 증가합니다.

  • 실제 타임스탬프가 있는 데이터가 이미 있는 Column Family에서는 이 방식을 구현할 수 없습니다. 기존 데이터에 실제 타임스탬프가 있거나 실수로 실제 타임스탬프가 있는 새 데이터를 쓰면 데이터가 다음 압축 시에 삭제됩니다.

  • 제공된 행과 열의 여러 셀이 동시에 만료되도록 지정할 수 없습니다. 새 데이터는 동일한 타임스탬프를 가진 이전 데이터를 덮어씁니다.

  • 가비지 컬렉션에 최대 일주일이 소요될 수 있으므로 데이터를 읽을 때는 항상 필터를 사용해야 합니다.

기본 만료

대부분의 데이터에 기본 TTL이 있기를 원하지만 일부 데이터에 셀 기준 만료 값을 다르게 설정한다고 가정합니다.

예를 들어 고객 10명의 클릭 이벤트를 테이블 한 개에 저장할 수 있습니다. 대부분의 클릭 이벤트는 2일 후에 만료되지만 1시간 후에 클릭 이벤트가 만료되는 고객이 1명 있고 3일 후에 만료되는 고객이 1명 있습니다.

이 방식에서는 가비지 컬렉션의 저장기간 제한을 기본 TTL로 설정하여 column family를 만듭니다. 데이터를 기본값보다 빨리 만료시키려면 타임스탬프를 데이터의 실제 쓰기 시간보다 이른 시간으로 설정합니다. 데이터를 나중에 만료시키려면 데이터의 실제 쓰기 시간보다 늦은 시간으로 타임스탬프를 설정합니다.

기본 만료의 장점

  • 커스텀 TTL이 없는 쓰기에는 기본 TTL이 사용됩니다.

  • 기존 테이블에 안전하게 적용할 수 있는 방식입니다.

기본 만료의 단점

  • 셀의 타임스탬프가 실제이거나 인위적일 수 있으므로 타임스탬프에는 의미가 없습니다. 즉, 셀의 타임스탬프를 다른 사용 사례(예: 값을 쓴 시간 확인)에 사용할 수 없습니다. 이 문제를 해결하기 위해 별도의 열에 실제 타임스탬프를 기록할 수 있지만 이렇게 하면 저장되는 데이터 양이 증가합니다.

  • 제공된 열의 실제 타임스탬프와 충돌하는 커스텀 타임스탬프를 실수로 쓸 수 있습니다.

  • 가비지 컬렉션은 비동기식이므로 이 방식으로 데이터를 읽을 때는 항상 필터를 사용해야 합니다.

다음 단계