Apache Doris 테이블 설계 가이드
Apache Doris에서 테이블 설계는 쓰기 성능, 쿼리 효율, 스토리지 비용을 직접적으로 결정합니다. 이 장은 일반적인 설계 시나리오를 중심으로 구성되어 있으며, 테이블을 처음부터 설계하거나 기존 테이블의 구조를 최적화하는 데 도움을 줍니다.
설계 절차
Doris 테이블 설계는 일반적으로 다음 단계로 진행합니다.
- 테이블 모델 선택: 데이터의 저장, 중복 제거, 집계 방식을 결정합니다.
- 컬럼과 데이터 타입 정의: 비즈니스 필드에 적합한 타입을 선택합니다.
- 파티셔닝과 버키팅 계획: 데이터를 균등하게 분산하고 프루닝을 활용할 수 있도록 합니다.
- 인덱스 추가: 포인트 쿼리, 범위 스캔, 전문 검색의 속도를 높입니다.
- 스토리지 최적화: 압축, 행·열 혼합 저장, 핫/콜드 계층화를 통해 비용을 줄입니다.
- 스키마 변경: 비즈니스 변화에 맞춰 스키마를 조정하거나 자동 증가 컬럼을 사용합니다.
테이블 생성
CREATE TABLE 문을 사용하여 Doris에 테이블을 생성합니다. 기존 테이블을 기반으로 새 테이블을 만들려면 다음 구문을 사용할 수 있습니다.
- CREATE TABLE ... LIKE: 기존 테이블의 구조를 재사용합니다.
- CREATE TABLE ... AS SELECT (CTAS): 쿼리 결과를 기반으로 테이블을 생성합니다.
테이블 이름 규칙
Doris의 테이블 이름은 기본적으로 대소문자를 구분하며 최대 길이는 64바이트입니다. 다음 설정으로 이를 조정할 수 있습니다.
| 설정 | 기본값 | 설명 |
|---|---|---|
| lower_case_table_names | 대소문자 구분 | 클러스터를 처음 초기화할 때만 설정할 수 있으며 이후에는 변경할 수 없습니다 |
| table_name_length_limit | 64바이트 | 지나치게 큰 값으로 설정하는 것은 권장하지 않습니다 |
주요 테이블 속성
테이블을 생성할 때 PROPERTIES에 일반적으로 사용하는 속성을 지정할 수 있습니다. 자세한 내용은 CREATE TABLE을 참조하세요.
| 속성 | 용도 |
|---|---|
buckets | 테이블 내 데이터 분산의 단위를 결정합니다 |
storage_medium | HDD, SSD, 원격 공유 스토리지 등의 저장 매체를 제어합니다 |
replication_num | 중복성과 신뢰성을 확보하도록 데이터 복제본 수를 제어합니다 |
storage_policy | 핫/콜드 데이터 계층화의 마이그레이션 정책을 설정합니다 |
테이블 속성은 파티션 수준에서 적용됩니다. 테이블 속성 변경은 이후 생성되는 파티션에만 적용되며 기존 파티션에는 영향을 주지 않습니다. 자세한 내용은 ALTER TABLE PROPERTY와 ALTER TABLE DISTRIBUTION을 참조하세요. 동적 파티셔닝에서는 이러한 속성을 개별적으로 설정할 수 있습니다.
테이블 모델 선택
테이블 모델 개요
Duplicate, Aggregate, Unique 모델을 비교하고 시나리오에 적합한 데이터 저장 및 중복 제거 방식을 선택합니다
Duplicate 모델
원시 상세 데이터를 보존하며, 중복 제거나 집계가 필요 없는 로그, 이벤트 등의 시나리오에 적합합니다
Unique 모델
기본 키를 기준으로 중복을 제거하고 동시성이 높은 실시간 업데이트를 지원하며, CDC, 주문 등 기본 키를 기준으로 데이터를 업데이트하는 시나리오에 적합합니다
Aggregate 모델
차원별로 데이터를 사전 집계하여 보고서 및 다차원 분석 쿼리의 성능을 높입니다
모델 선택 팁
일반적인 비즈니스 시나리오에 따른 테이블 모델 및 Key 컬럼 설계 권장 사항을 제공합니다
컬럼과 데이터 타입 정의
파티셔닝과 버키팅 계획
데이터 분산 개념
파티셔닝과 버키팅이 데이터를 tablet에 매핑하는 방식을 이해하여 여러 노드의 스토리지와 컴퓨팅 성능을 충분히 활용합니다
기본 개념
partition, bucket, tablet, replica 등 데이터 분산과 관련된 기본 용어를 설명합니다
수동 파티셔닝
테이블 생성 시 파티션 범위를 명시적으로 정의하며, 파티션이 고정되어 있고 세밀한 제어가 필요한 시나리오에 적합합니다
동적 파티셔닝
시간 차원에 따라 파티션을 자동으로 생성하고 회수하여 시계열 테이블 운영을 간소화합니다
자동 파티셔닝
유입되는 데이터를 기반으로 파티션을 자동 생성하므로 파티션 범위를 미리 정의할 필요가 없습니다
데이터 버키팅
적절한 버키팅 컬럼과 버킷 수를 선택하여 파티션 내에 데이터를 균등하게 분산합니다
자주 발생하는 문제
파티셔닝과 버키팅 설계에서 자주 발생하는 실수와 문제 해결 방법을 설명합니다
쿼리 가속: 인덱스
인덱스 개요
Doris가 지원하는 다양한 인덱스 유형과 각 유형에 적합한 쿼리 시나리오를 비교합니다
접두사 인덱스
정렬 키를 기반으로 동등 조건 쿼리와 범위 쿼리의 속도를 높이는 내장 인덱스입니다
BloomFilter 인덱스
카디널리티가 높은 컬럼의 동등 조건 쿼리 속도를 높이고 불필요한 데이터 스캔을 줄입니다
NGram BloomFilter 인덱스
완전한 역색인을 도입하지 않고 LIKE 퍼지 매칭 쿼리의 속도를 높입니다
역색인(전문 검색)
토큰화 기반 전문 검색과 키워드 및 구문 매칭을 지원하며, 로그와 텍스트 분석에 적합합니다
벡터 인덱스
HNSW, IVF 등의 알고리즘을 기반으로 고차원 벡터의 유사도 검색 속도를 높입니다
스토리지 최적화
스토리지 형식
Doris의 열 기반 스토리지 형식 V3의 설계와 장점을 알아봅니다
데이터 압축
스토리지 비용과 쿼리 성능의 균형을 맞출 수 있는 적절한 압축 알고리즘을 선택합니다
행·열 혼합 저장
열 기반 저장에 행 기반 저장을 추가하여 와이드 테이블의 포인트 쿼리 속도를 높입니다
핫/콜드 데이터 계층화
콜드 데이터를 SSD/HDD 또는 S3, HDFS 등의 원격 스토리지 계층으로 이동하여 스토리지 비용을 줄입니다
스키마 변경
스키마 변경
ALTER TABLE로 컬럼과 타입을 추가, 삭제 또는 수정하고 경량 변경과 중량 변경의 차이를 알아봅니다
자동 증가 컬럼
Auto Increment Column을 사용하여 고유한 숫자 ID를 자동으로 생성하고 데이터 쓰기를 간소화합니다
특수 테이블과 모범 사례
임시 테이블(사용 중단 권장)
사용 중단이 권장되는 기능입니다. 프로덕션 환경에서는 임시 테이블을 사용하지 마세요
테이블 설계 모범 사례
테이블 모델, Key 컬럼, 파티셔닝과 버키팅, 인덱스 등에 관한 주요 설계 권장 사항을 정리합니다
설계 시 고려 사항
| 설계 항목 | 설명 | 영향 |
|---|---|---|
| 데이터 모델 | 테이블 생성 후 변경할 수 없습니다. 적합한 데이터 모델을 미리 선택하세요 | 이후 데이터 쓰기 및 쿼리 패턴을 결정합니다 |
| 버킷 수 | 이미 생성된 파티션의 버킷 수는 변경할 수 없지만 파티션 교체를 통해 조정할 수 있습니다. 동적 파티셔닝에서 이후 생성될 파티션의 버킷 수는 변경할 수 있습니다 | 데이터 분산의 균형과 쿼리 병렬 처리에 영향을 줍니다 |
| 컬럼 변경 | VALUE 컬럼의 추가나 삭제는 경량 작업(수초 내 완료)이며, KEY 컬럼의 추가나 삭제 또는 데이터 타입 수정은 중량 작업입니다 | 대규모 데이터셋에서는 가능하면 KEY 컬럼 변경을 피하세요 |
| 스토리지 정책 | 핫/콜드 계층화를 사용하여 콜드 데이터를 HDD, S3 또는 HDFS로 마이그레이션합니다 | 스토리지 비용을 크게 줄입니다 |