인덱싱
인덱싱 (Indexing)
쿼리 패턴과 워크로드에 맞는 Pinot 인덱스를 선택해요.
출처: 문서
본문
Pinot 인덱스 설계는 워크로드 설계예요. 올바른 선택은 포인트 조회(point lookup), 범위 필터, 텍스트 검색, JSON 조건자, 지리 공간 쿼리, 그룹핑 중심 롤업, 또는 벡터 유사성 검색 중 무엇을 최적화하는지에 달려 있어요.
이 섹션은 세 가지를 도와줘요.
- 쿼리 패턴을 올바른 인덱스에 매칭하기
- 인덱스가 테이블 구성에 속하는지 나중에 추가할 수 있는지 결정하기
- 실제 실행하는 쿼리 패턴으로 선택을 검증하기
시작하기
쿼리 형태는 알지만 어떤 인덱스가 최선인지 아직 모를 때 결정 가이드를 사용하세요.
일반적인 인덱스 계열
- Bloom filter — 고선택적 조회에 대한 세그먼트 프루닝용
- Forward index — Pinot의 기본 행→값 저장 경로
- FST index — 접두사 및 패턴 스타일 문자열 필터링용
- Inverted index — 등식,
IN, 그리고 다른 고선택적 필터용 - Timestamp index — 시간 세분성 쿼리와 롤업용
- Range index — 경계가 있는 숫자 또는 시간 필터용
- Text search support — 토큰화된 검색과 텍스트 조건자용
- JSON index — 중첩 JSON 조건자용
OPEN_STRUCT필드 수준 인덱싱 — 키별 컬럼 저장과 키별 보조 인덱스가 필요한 반구조화 객체 컬럼용. Complex Type (Array, Map) Handling 및 Table 참조.- Geospatial support — 거리 및 공간 필터링용
- Star-tree index — 반복 집계 및 group-by 워크로드용
- Vector index — 임베딩에 대한 유사성 검색용
압축 효율성 검사
Pinot가 추적하는 압축되지 않은 값 바이트와 Pinot가 테이블의 forward index 및 사전에 저장하는 바이트를 비교해야 할 때 compression stats를 사용하세요.
인덱스 가용성
| Index Type | Segment Type |
|---|---|
| Bloom filter | Offline |
| Forward index | Realtime & Offline |
| FST index | Offline |
| Inverted index | Realtime & Offline |
| Timestamp index | Offline |
| Sorted index | Realtime & Offline |
| Range index | Offline |
| Text search support | Realtime & Offline |
| JSON index | Realtime & Offline |
| OPEN_STRUCT index | Realtime & Offline |
| Geospatial support | Realtime & Offline |
| Star-tree index | Offline |
| Vector index | Realtime & Offline |
Realtime 세그먼트에서 사용 가능한 인덱스는 소비된 행이 세그먼트에 삽입되는 동안 업데이트되므로, 데이터가 쿼리 가능해지는 대로 인덱싱돼요.
Offline 세그먼트에서만 사용 가능한 인덱스는 세그먼트 로드 중 계산돼요. 즉 offline 테이블의 경우 세그먼트가 로드되었을 때 인덱스가 사용 가능해져요. realtime 테이블의 경우 그 인덱스는 완료된(소비 중이 아닌) 세그먼트에 대해서만 사용 가능해요.
realtime 테이블이 세그먼트가 아직 변경 가능하고 소비 중일 때 다른 인덱스 레이아웃이 필요하다면 tableIndexConfig 또는 fieldConfigList에서 tierOverwrites.consuming을 정의하세요. Pinot는 그 오버라이드를 변경 가능한 consumer 세그먼트 뷰에만 적용해요. 완료된 세그먼트와 불변 세그먼트 리로드는 기본 테이블 구성을 계속 사용해요.
Pinot가 인덱스를 적용하는 방법
대부분의 인덱스 선택은 테이블 구성에서 정의되며, 보통 인덱스와 사용 중인 구성 스타일에 따라 fieldConfigList 또는 tableIndexConfig 아래에 위치해요. 정식 테이블 수준 참조는 Table이에요.
실용적인 실습은 Configure indexes를 참조하세요.
일부 워크로드에서는 인덱스를 수집 후 추가하거나 제거할 수도 있어요. 기존 테이블을 변경해야 할 때는 레거시 인덱스 설정보다 현재의 필드 수준 구성 스타일을 선호하세요.
염두에 둘 쿼리 패턴
인덱스는 실제 실행하는 쿼리를 반영해야 해요.
WHERE col = value와WHERE col IN (...)은 보통 inverted index를 원해요.WHERE col BETWEEN ...또는WHERE col > ...은 보통 범위 지향 전략을 원해요.TEXT_MATCH(...)는 text index를 원해요.JSON_MATCH(...)는 JSON index를 원해요.ST_Distance(...)또는 다른 공간 조건자는 geospatial support를 원해요.- 안정적인 차원 집합에 대한
GROUP BY는 종종 star-tree의 혜택을 받아요. VECTOR_SIMILARITY(...)는 vector indexing을 원해요.
아직 쿼리 엔진이나 함수 지원을 선택 중이라면 Querying Pinot과 SSE vs MSE 페이지로 먼저 쿼리 모델을 확인하세요.
이 페이지가 다룬 내용
이 페이지는 인덱싱 섹션, 주요 인덱스 계열, 그리고 쿼리 패턴에서 인덱스를 선택하는 기본 규칙을 소개했어요.
다음 단계
결정 가이드를 읽고 쿼리 패턴을 특정 인덱스와 구성 스타일에 매핑하세요.