Doris는 데이터를 어떻게 구성 하나요?
먼저 논리적 계층 구조를 살펴봅니다. 이어서 테이블이 클러스터 전체에 어떻게 나뉘어 분산되는지 알아봅니다.
- Catalog데이터 소스
- 데이터베이스업무 영역
- 테이블스키마 + 속성
- 파티션논리적 범위
- 버킷물리적 분산
먼저 논리적 계층 구조를 살펴봅니다. 이어서 테이블이 클러스터 전체에 어떻게 나뉘어 분산되는지 알아봅니다.
분석 쿼리는 많은 행에서 일부 열만 참조하는 경우가 많습니다. 열 지향 저장을 사용하면 Doris는 쿼리에 필요한 데이터만 읽고 처리할 수 있습니다.
쿼리가 참조하는 열만 스캔합니다.
자료형이 같고 비슷한 값은 더 작은 크기로 인코딩하기 쉽습니다.
연속된 벡터는 캐시 활용도를 높이고 SIMD를 사용할 수 있게 합니다.
테이블 모델은 Doris가 모든 행을 보존할지, 값을 결합할지, 각 Key마다 하나의 논리적 행을 유지할지를 결정합니다.
이벤트 상세 데이터와 로그에 적합하며, 입력된 모든 행을 보존합니다.
선언된 집계 함수를 사용해 Value 열을 병합합니다.
업데이트와 CDC를 위해 각 Key마다 하나의 논리적 행을 유지합니다.
통합 아키텍처에서는 Frontend 노드가 시스템을 조정하고, Backend 노드가 쿼리를 실행하며 tablet 복제본을 로컬 저장소에 영구 저장합니다.
영구 데이터는 공유 저장소에 두고, 상태를 유지하지 않는 컴퓨팅 그룹은 독립적으로 확장하거나 축소할 수 있습니다.
FE는 SQL 요청을 처리하고, Meta Service는 데이터 계층의 메타데이터를 관리합니다.
상태를 유지하지 않는 BE 노드는 작업을 실행하고 자주 사용하는 데이터를 캐시합니다.
객체 저장소 또는 지원되는 분산 파일 시스템에 데이터를 영구 저장합니다.
통합형 배포와 분리형 배포는 각각 다른 운영 환경에 최적화되어 있습니다. 어느 아키텍처가 항상 더 나은 것은 아닙니다.
상태를 유지하는 BE 노드가 컴퓨팅을 수행하고 데이터를 로컬에 영구 저장합니다.
상태를 유지하지 않는 컴퓨팅 그룹이 영구 스토리지를 공유합니다.
스토리지 엔진은 데이터와 접근 경로를 구성합니다. 쿼리 엔진은 SQL을 분산형 벡터화 파이프라인으로 변환합니다.
필요한 열을 읽고 분석 데이터를 압축합니다.
Prefix, Min/Max, Bloom, 역색인은 스캔 범위를 줄입니다.
여러 Backend 노드에 쿼리 실행을 분산합니다.
규칙, 비용, 이력에 기반한 전략을 적용합니다.
쿼리는 검증과 최적화를 거쳐 프래그먼트와 인스턴스로 나뉘고, 여러 BE 노드에서 실행된 뒤 하나의 결과로 합쳐집니다.
Doris는 사전 계산, 논리적 재작성, 통계 기반 계획 수립, 런타임 필터링을 결합해 실행 전과 실행 중에 처리할 데이터의 양을 줄입니다.
쿼리 재작성을 통해 사전 계산된 결과를 재사용합니다.
결정적인 논리 변환을 적용합니다.
통계 정보를 사용해 물리 실행 계획을 비교합니다.
필터를 스캔 단계로 밀어 넣어 행을 일찍 걸러냅니다.