운영: 인덱싱과 리소스 관리

운영: 인덱싱과 리소스 관리 (Production)

Weaviate는 빠르고 확장 가능한 검색·필터링을 위해 두 종류의 인덱스를 사용해요. 벡터 인덱스는 벡터 검색에, 역인덱스(inverted index) 는 필터링·키워드 검색에 쓰입니다. 이 페이지는 사용 가능한 벡터/역인덱스를 소개해서, 데이터 규모와 쿼리 특성에 맞는 인덱싱 전략을 세울 수 있게 도와줘요.

출처: 공식문서 - Indexing (Starter guides: managing resources)

상황부터 — 인덱스 타입과 리소스

벡터 인덱스는 타입에 따라 핫(hot) 또는 웜(warm) 리소스를 쓰고, 역인덱스는 리소스를 사용해요. 핫 리소스는 메모리에, 웜 리소스는 디스크에 상주한다고 이해하면 됩니다.

인덱싱 권장 사항

  • 멀티테넌트 구성이면 dynamic 인덱스.
  • 데이터셋 크기를 기준으로 인덱스 타입 선택:
    • 객체 수가 적으면 flat 인덱스
    • 데이터셋이 크면 HNSW 인덱스
    • 잘 모르겠으면 dynamic 인덱스
  • 정확도를 조금 희생할 수 있으면 압축(compression) 을 고려:
    • HNSW 인덱스: PQ/SQ/BQ로 메모리 요구량 감소
    • Flat 인덱스: BQ(이진 양자화)로 검색 속도 개선
  • 역인덱스는 쿼리 요구사항에 맞게 구성:
    • 디스크가 넉넉하면 검색·필터링용으로 모든 속성 인덱싱
    • 메타데이터 필터링이 중요하면 컬렉션 레벨에서 인덱싱

벡터 인덱스 네 가지와 리소스 특성

Weaviate는 HNSW·Flat·Dynamic·HFresh 네 가지 벡터 인덱스를 제공해요.

  • HNSW — 대규모 데이터셋에서도 빠른 확장 가능한 벡터 검색. 그래프 구조와 벡터를 메모리에 로드하므로 핫 리소스를 많이 씁니다.
  • Flat — 메모리 효율적, 소규모 데이터셋에 최적. 디스크 기반 brute-force 검색. 검색 속도가 객체 수에 선형으로 증가.
  • Dynamic — 컬렉션·테넌트가 임계 크기에 도달하면 flat→HNSW 전환.
  • HFreshv1.36 추가. 중심(centroid)에 HNSW를 쓰는 클러스터 기반. 대부분 데이터를 디스크에 두어 메모리 효율. HFresh는 cosinel2-squared 거리 메트릭만 지원.

HNSW 메모리 줄이기 — 압축

HNSW는 핫 리소스(메모리)를 많이 쓰므로 압축(quantization) 을 고려하세요. Weaviate의 압축 옵션:

  • RQ(회전 양자화) (권장) — 차원당 32비트→8비트(또는 1비트) 로 축소, 훈련 불필요. 벡터에 빠른 의사 난수 회전을 적용한 뒤 차원을 양자화. 회전이 정보를 차원에 고르게 퍼뜨려 구성·훈련 단계 없이도 최대 98-99% recall.
  • PQ(곱 양자화) — 두 가지 방식으로 임베딩 축소. 데이터에 훈련해 커스텀 세그먼트 생성. 차원 수를 줄이고, 세그먼트를 32비트 float 대신 8비트 정수로 저장. 세그먼트 수·세분도·훈련셋 크기를 설정 가능.
  • BQ(이진 양자화) — 차원당 1비트로 축소. 고차원 벡터에 가장 효과적.
  • SQ(스칼라 양자화) — 차원당 32비트→8비트. 데이터에 훈련해 차원별 커스텀 버킷을 만들어 32비트 정보를 8비트 버킷에 매핑할 때 특성 보존.

Dynamic 인덱스와 비동기 인덱싱

⚠️ Dynamic 인덱스는 비동기 인덱싱(ASYNC_INDEXING) 필수 — 셀프호스팅은 ASYNC_INDEXING 환경변수를 true로, Weaviate Cloud는 콘솔에서 활성화.

Dynamic 인덱스는 flat으로 시작해 객체 수가 임계값(기본 10,000)에 도달하면 HNSW로 자동 전환됩니다. 멀티테넌트 구성에서 테넌트마다 객체 수가 다를 때 유용해요. HNSW가 필요 없는 테넌트는 flat을 쓰므로 오버헤드가 줄어듭니다.

예시 구성(dynamic, 전환 임계값 10,000 / flat+BQ / HNSW+SQ, SQ 훈련 임계 100,000):

객체 수 인덱스 타입 압축 비고
0 - 9,999 Flat BQ Flat+BQ 활성
10,000 Flat → HNSW 없음 HNSW로 전환, RAM에 저장
100,000 HNSW 훈련 중 SQ 훈련 임계 도달
100,001 HNSW SQ HNSW+SQ 활성

비동기 벡터 인덱싱

HNSW 인덱스 구축은 리소스 집약적이라 객체 임포트를 느리게 만들 수 있어요. 비동기 벡터 인덱싱을 켜면 HNSW 인덱스가 완성될 때까지 기다리지 않고 객체를 임포트할 수 있어요. 데이터 수집과 벡터 인덱스 생성이 분리됩니다.

주의: 그 사이 벡터 검색은 불완전한 인덱스를 기반으로 할 수 있어 검색 결과에 영향이 있을 수 있어요.

역인덱스 (Inverted index)

Weaviate는 키워드 검색과 필터링에 역인덱스를 씁니다. 종류는:

  • indexSearchable — 키워드 검색용
  • indexFilterable — 더 빠른 매칭 기반 필터링
  • indexRangeFilters — 숫자 범위 필터링 가속

컬렉션 레벨 설정이 BM25 파라미터와 필터링용 메타데이터(타임스탬프·null 상태·속성 길이 등)를 정하고, 속성 레벨에서는 개별 인덱스 on/off와 키워드 토큰화 옵션을 정해요.

요약

  • 인덱스 타입은 데이터셋 크기와 쿼리 특성에 따라: 소규모 flat, 대규모 HNSW, 불확실·멀티테넌트 dynamic.
  • 메모리를 줄이려면 압축 — HNSW에서 RQ(권장)/PQ/BQ/SQ, Flat에서 BQ.
  • Dynamic 인덱스·비동기 인덱싱은 ASYNC_INDEXING 필요.
  • 역인덱스(indexSearchable/indexFilterable/indexRangeFilters)로 키워드·필터 성능을 조정.

더 알아보기 (Learn more)