Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

딕셔너리 레이아웃

딕셔너리 레이아웃 유형

딕셔너리를 메모리에 저장하는 방식은 여러 가지가 있으며, 각 방식마다 CPU와 RAM 사용량 사이에 절충이 있습니다.

레이아웃 설명
flat 키로 인덱싱된 평면 배열에 데이터를 저장합니다. 가장 빠른 레이아웃이지만 키는 UInt64여야 하며, max_array_size 범위로 제한됩니다.
hashed 데이터를 해시 테이블에 저장합니다. 키 크기 제한이 없고 요소 수에도 제한이 없습니다.
sparse_hashed hashed와 유사하지만, 메모리 사용량을 줄이는 대신 CPU를 더 사용합니다.
complex_key_hashed hashed와 유사하며, 복합 키에 사용합니다.
complex_key_sparse_hashed sparse_hashed와 유사하며, 복합 키에 사용합니다.
hashed_array 해시 테이블로 키를 배열 인덱스에 매핑하고, 속성은 배열에 저장합니다. 속성이 많을 때 메모리 효율이 좋습니다.
complex_key_hashed_array hashed_array와 유사하며, 복합 키에 사용합니다.
range_hashed 정렬된 범위를 사용하는 해시 테이블입니다. 키 + 날짜/시간 범위 기준 조회를 지원합니다.
complex_key_range_hashed range_hashed와 유사하며, 복합 키에 사용합니다.
cache 고정 크기의 인메모리 캐시입니다. 자주 액세스되는 키만 저장합니다.
complex_key_cache cache와 유사하며, 복합 키에 사용합니다.
ssd_cache cache와 유사하지만, 메모리 내 인덱스를 두고 데이터는 SSD에 저장합니다.
complex_key_ssd_cache ssd_cache와 유사하며, 복합 키에 사용합니다.
direct 메모리에 저장하지 않고, 각 요청마다 소스를 직접 쿼리합니다.
complex_key_direct direct와 유사하며, 복합 키에 사용합니다.
ip_trie 빠른 IP 프리픽스 조회(CIDR 기반)를 위한 트라이 구조입니다.
hierarchical 부모-자식 관계를 나타내는 숫자 키를 사용하는 계층 구조를 지원합니다.
polygon 효율적인 point-in-polygon 조회(역지오코딩)를 지원합니다.
regexp_tree 정규식 트리에 대해 키를 매칭합니다.

딕셔너리 레이아웃 지정

LAYOUT 절(DDL) 또는 설정 파일 정의의 layout 설정을 사용해 딕셔너리 레이아웃을 구성할 수 있습니다.

CREATE DICTIONARY (...)
...
LAYOUT(LAYOUT_TYPE(param value)) -- 레이아웃 설정
...

전체 DDL 구문은 CREATE DICTIONARY를 참고하십시오.

레이아웃에 complex-key*라는 단어가 없는 딕셔너리는 UInt64 타입의 키를 사용하고, complex-key* 딕셔너리는 복합 키(임의의 타입으로 구성 가능)를 사용합니다.

숫자 키 예시 (key_column 컬럼은 UInt64 타입):

CREATE DICTIONARY dict_name (
    key_column UInt64,
    ...
)
PRIMARY KEY key_column

복합 키 예시 (키는 String 타입 요소 1개로 구성됨):

CREATE DICTIONARY dict_name (
    country_code String,
    ...
)
PRIMARY KEY country_code

딕셔너리 성능 개선

딕셔너리 성능을 개선하는 방법은 여러 가지가 있습니다.

  • GROUP BY 뒤에서 딕셔너리 작업 함수를 호출합니다.
  • 추출할 속성을 injective로 표시합니다. 서로 다른 키가 서로 다른 속성 값에 대응할 때 해당 속성을 injective라고 합니다. 따라서 GROUP BY에서 키로 속성 값을 가져오는 함수를 사용하면, 이 함수는 자동으로 GROUP BY 밖으로 분리됩니다.

ClickHouse는 딕셔너리 관련 오류가 발생하면 예외를 생성합니다. 오류 예시는 다음과 같습니다.

  • 접근하는 딕셔너리를 로드할 수 없습니다.
  • cached 딕셔너리를 쿼리하는 중 오류가 발생했습니다.

system.dictionaries 테이블에서 딕셔너리 목록과 상태를 확인할 수 있습니다.

Navigation