운영: 인덱싱과 리소스 관리
운영: 인덱싱과 리소스 관리 (Production)
Weaviate는 빠르고 확장 가능한 검색·필터링을 위해 두 종류의 인덱스를 사용해요. 벡터 인덱스는 벡터 검색에, 역인덱스(inverted index) 는 필터링·키워드 검색에 쓰입니다. 이 페이지는 사용 가능한 벡터/역인덱스를 소개해서, 데이터 규모와 쿼리 특성에 맞는 인덱싱 전략을 세울 수 있게 도와줘요.
상황부터 — 인덱스 타입과 리소스
벡터 인덱스는 타입에 따라 핫(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 전환.
- HFresh —
v1.36추가. 중심(centroid)에 HNSW를 쓰는 클러스터 기반. 대부분 데이터를 디스크에 두어 메모리 효율. HFresh는cosine과l2-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)로 키워드·필터 성능을 조정.