인덱싱

인덱싱 (Indexing)

쿼리 패턴과 워크로드에 맞는 Pinot 인덱스를 선택해요.

출처: 문서

본문

Pinot 인덱스 설계는 워크로드 설계예요. 올바른 선택은 포인트 조회(point lookup), 범위 필터, 텍스트 검색, JSON 조건자, 지리 공간 쿼리, 그룹핑 중심 롤업, 또는 벡터 유사성 검색 중 무엇을 최적화하는지에 달려 있어요.

이 섹션은 세 가지를 도와줘요.

  1. 쿼리 패턴을 올바른 인덱스에 매칭하기
  2. 인덱스가 테이블 구성에 속하는지 나중에 추가할 수 있는지 결정하기
  3. 실제 실행하는 쿼리 패턴으로 선택을 검증하기

시작하기

쿼리 형태는 알지만 어떤 인덱스가 최선인지 아직 모를 때 결정 가이드를 사용하세요.

일반적인 인덱스 계열

압축 효율성 검사

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 페이지로 먼저 쿼리 모델을 확인하세요.

이 페이지가 다룬 내용

이 페이지는 인덱싱 섹션, 주요 인덱스 계열, 그리고 쿼리 패턴에서 인덱스를 선택하는 기본 규칙을 소개했어요.

다음 단계

결정 가이드를 읽고 쿼리 패턴을 특정 인덱스와 구성 스타일에 매핑하세요.

관련 페이지

더 알아보기 (Learn more)