벡터 집합 확장성

벡터 집합 확장성 (Vector Sets Scalability)

벡터 집합(vector sets)은 단일 인스턴스의 한계를 넘어 여러 인스턴스로 확장(scaling)해야 할 때가 있어요. 이 페이지는 벡터 집합을 여러 인스턴스에 샤딩(sharding)하는 전략과 그때의 성능 특성, 지연 시간 고려사항을 설명합니다.

출처: Redis 공식 문서 — scalability

다중 인스턴스 확장성 (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)를 빠르게

더 알아보기 (Learn more)