마이그레이션 가이드: front-coded dictionary

마이그레이션 가이드: front-coded dictionary

Druid가 문자열 컬럼을 저장할 때 사용하는 front coding(프론트 코딩) 인코딩을 소개해요. 공통 접두사를 공유하는 값을 최적화해 저장 공간과 성능을 개선하는 방식과 활성화 방법, 버전·다운그레이드 규칙을 설명해요.

출처: 문서

본문

Apache Druid는 더 나은 압축을 위해 STRING 컬럼을 dictionary 인코딩으로 저장해요. 각 문자열 값이 사전순으로 정렬된 dictionary에 추가되고, 실제 컬럼은 dictionary 항목에 대한 포인터만 저장해요. Front coding은 최소한의 성능 영향으로 Druid의 STRING 및 COMPLEX 컬럼을 더 압축할 수 있게 해주는 선택적 증분 인코딩 전략이에요. Front-coded dictionary는 공통 접두사를 공유하는 값을 최적화해 중복 데이터 저장을 피하므로 저장 공간을 줄이고 성능을 향상시킬 수 있어요. 예를 들어 웹사이트 방문을 추적한다면 대부분의 URL이 https://domain.xyz/ 로 시작하는데, front coding은 이런 데이터셋을 저장할 때 이 패턴을 활용해 더 최적의 압축을 할 수 있어요.

front coding은 모든 유형의 수집(ingestion)과 함께 사용할 수 있어요.

Front coding 활성화

front coding을 활성화하려면 ingestion spec 의 tuningConfig 객체에서 indexSpec.stringDictionaryEncoding.type 을 frontCoded 로 설정해요.

다음 선택 속성을 지정할 수 있어요:

  • bucketSize : 델타 인코딩을 수행하기 위해 버킷에 넣을 값의 수. 이 속성을 설정하면 indexing task가 지정된 버킷 크기의 압축 dictionary로 segment를 작성하도록 지시해요. 128 이하의 2의 거듭제곱으로 설정할 수 있어요. bucketSize 의 기본값은 4예요.
  • formatVersion : 사용할 front coding 버전을 지정해요. 옵션은 0 과 1 (후자는 Druid 26.0.0 이상 지원)이에요. formatVersion 의 기본값은 1이에요.

예를 들어:

"tuningConfig": {  "indexSpec": {    "stringDictionaryEncoding": {      "type":"frontCoded",      "bucketSize": 4,      "formatVersion": 1    }  }}

SQL 기반 수집의 경우 query context에 indexSpec 을 추가할 수 있어요. Web Console에서 Engine: 메뉴의 context 에서 Edit context 를 선택하고 indexSpec 을 입력해요. 예를 들어:

{..."indexSpec": {  "stringDictionaryEncoding": {  "type": "frontCoded",  "bucketSize": 4,  "formatVersion": 1  }}}

SQL 기반 수집 API에 호출할 때는 요청 페이로드의 context 에 indexSpec 을 포함해요. 예를 들어:

{"query": ..."context": {  "maxNumTasks": 3  "indexSpec": {  "stringDictionaryEncoding": {    "type": "frontCoded",    "bucketSize": 4,    "formatVersion": 1   }  }}

Druid 25.0.0에서 업그레이드

Druid 26.0.0은 front-coded dictionary의 새 버전인 version 1을 도입했어요. 이 버전은 일반적으로 더 빠른 읽기 속도와 더 작은 저장 공간 크기를 제공해요. Druid 26.0.0 이상으로 업그레이드할 때 Druid는 front coding 설정을 계속 version 0으로 기본 설정해요. 이 기본값은 Druid 25.0.0으로의 매끄러운 다운그레이드를 가능하게 해요.

새 버전을 사용하려면 formatVersion 속성을 1 로 설정해요:

"tuningConfig": {  "indexSpec": {    "stringDictionaryEncoding": {      "type":"frontCoded",      "bucketSize": 4,      "formatVersion": 1    }  }}

Druid 25.0.0으로 다운그레이드

version 1로 업그레이드한 후에는 Druid 25.0.0으로 매끄럽게 다운그레이드할 수 없어요. Druid 25.0.0으로 다운그레이드하려면 stringDictionaryEncoding.formatVersion 속성을 0 으로 설정해 데이터를 다시 수집(re-ingest)해야 해요.

Druid 25.0.0 이전 버전으로 다운그레이드

Druid 25.0.0 이전 버전은 front-coded dictionary가 있는 segment를 읽을 수 없어요. 이전 버전으로 다운그레이드하려면 front-coded dictionary가 포함된 segment를 삭제하거나, stringDictionaryEncoding.type 을 utf8 로 설정해 다시 수집해야 해요.

더 알아보기 (Learn more)