벡터 집합 확장성
벡터 집합 확장성 (Vector Sets Scalability)
벡터 집합(vector sets)은 단일 인스턴스의 한계를 넘어 여러 인스턴스로 확장(scaling)해야 할 때가 있어요. 이 페이지는 벡터 집합을 여러 인스턴스에 샤딩(sharding)하는 전략과 그때의 성능 특성, 지연 시간 고려사항을 설명합니다.
다중 인스턴스 확장성 (Multi-instance scalability)
예제 전략 (Example strategy)
일관된 해시(consistent hash)를 사용해 데이터를 샤딩할 수 있어요:
key_index = crc32(item) % 3
key = f"vset:{key_index}"
그런 다음 요소들을 서로 다른 키에 추가합니다:
VADD vset:0 VALUES 3 0.1 0.2 0.3 item1
VADD vset:1 VALUES 3 0.4 0.5 0.6 item2
모든 샤드에 걸친 유사도 검색을 실행하려면 각 키에 VSIM 명령을 보낸 뒤 그 결과를 클라이언트에서 병합하면 돼요:
VSIM vset:0 VALUES ... WITHSCORES
VSIM vset:1 VALUES ... WITHSCORES
VSIM vset:2 VALUES ... WITHSCORES
그다음 결과를 점수(score) 기준으로 합치고 정렬합니다.
핵심 속성 (Key properties)
- 쓰기 연산(
VADD,VREM)은 선형적으로 확장됩니다 — 인스턴스들에 걸쳐 병렬로 삽입할 수 있어요. - 읽기 연산(
VSIM)은 선형적으로 확장되지 않습니다 — 완전한 결과 집합을 얻으려면 모든 샤드를 질의해야 해요. - 벡터 집합이 작을수록 질의가 빨라지므로, 데이터를 분산하면 노드당 질의 시간을 줄이는 데 도움이 됩니다.
지연 시간 고려사항 (Latency considerations)
N개 인스턴스에 걸친 지연 시간이 더해지는(additive) 것을 피하려면:
- 질의를 모든 샤드에 병렬로 보내세요.
- 가장 느린 응답까지 기다립니다.
이렇게 하면 전체 지연 시간이 "모든 시간의 합"이 아니라 최악(가장 느린) 샤드 시간에 가깝게 됩니다.
요약 (Summary)
| 목표 (Goal) | 방법 (Approach) |
|---|---|
| 삽입 확장 (Scale inserts) | 데이터를 여러 키와 인스턴스로 분할 |
| 읽기 확장 (Scale reads) | 모든 샤드를 질의하고 결과를 병합 |
| 고가용성 (High availability) | 일부 샤드가 실패해도 부분 결과를 수용 |
| 성능 유지 (Maintain performance) | 더 작은 샤드를 사용해 노드당 순회(traversal)를 빠르게 |