마이그레이션 가이드: front-coded dictionary
마이그레이션 가이드: front-coded dictionary
Druid가 문자열 컬럼을 저장할 때 사용하는 front coding(프론트 코딩) 인코딩을 소개해요. 공통 접두사를 공유하는 값을 최적화해 저장 공간과 성능을 개선하는 방식과 활성화 방법, 버전·다운그레이드 규칙을 설명해요.
출처: 문서
본문
Apache Druid는 더 나은 압축을 위해 STRING 컬럼을 dictionary 인코딩으로 저장해요. 각 문자열 값이 사전순으로 정렬된 dictionary에 추가되고, 실제 컬럼은 dictionary 항목에 대한 포인터만 저장해요. Front coding은 최소한의 성능 영향으로 Druid의 STRING 및 COMPLEX
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)
- Ingestion spec 참고 — tuningConfig와 indexSpec 설정
- 마이그레이션 가이드 목록 — 기타 마이그레이션
- Druid release notes — 버전별 변경 사항