글로벌 테이블에서 벡터 인덱스 사용
글로벌 테이블에서 벡터 인덱스를 사용하여 여러 AWS 리전에서 유사성 검색을 실행할 수 있습니다. 벡터 인덱스가 있는 테이블에 복제본을 추가하면 DynamoDB는 자동으로 벡터 인덱스 정의를 새 복제본 리전에 복제합니다. 각 리전에서 벡터 인덱스를 별도로 생성하지는 않습니다. 복제본 리전에서 작성하는 항목은 다른 리전에 복제되고 해당 리전에서 인덱싱되므로 SearchVectors는 로컬 리전의 결과를 반환합니다.
모든 글로벌 테이블 구성에서 벡터 인덱스를 사용할 수 있습니다.
-
다중 리전 최종 일관성(MREC) – 글로벌 테이블의 기본 일관성 모드입니다. 자세한 내용은 다중 리전 최종 일관성(MREC) 섹션을 참조하세요.
-
다중 리전 강력한 일관성(MRSC) – 리전 간에 강력하게 일관된 읽기를 제공하는 일관성 모드입니다. 자세한 내용은 다중 리전 강력한 일관성(MRSC) 섹션을 참조하세요.
-
다중 계정 글로벌 테이블 – AWS 계정 간에 복제되는 글로벌 테이블입니다. 자세한 내용은 DynamoDB 다중 계정 글로벌 테이블 섹션을 참조하세요.
MRSC는 동일 계정 구성만 지원하므로 다중 계정 글로벌 테이블은 항상 MREC를 사용합니다. 이는 벡터 인덱스 제한이 아닌 글로벌 테이블 제약 조건입니다.
다음 예제에서는 이미 벡터 인덱스가 있는 Products라는 테이블에 us-west-2 리전의 복제본을 추가합니다. 테이블은 온디맨드 용량 모드를 사용해야 합니다(벡터 인덱스와 이 예제 모두에 필요함).
aws dynamodb update-table \ --table-name Products \ --region us-east-1 \ --replica-updates '[{"Create": {"RegionName": "us-west-2"}}]'
복제본이 생성되는 동안 소스 테이블 상태는 UPDATING이고 복제본의 ReplicaStatus는 CREATING입니다. DescribeTable을 사용하여 복제본이 ACTIVE에 도달했는지 확인하고 벡터 인덱스가 복제되었는지 확인합니다. 복제본 리전은 소스 리전과 동일한 벡터 인덱스 이름, 차원, 거리 함수 및 프로젝션을 보고합니다.
aws dynamodb describe-table \ --table-name Products \ --region us-west-2
복제본이 활성화되면 소스 리전과 동일한 벡터 세트를 통해 복제본 리전에 대해 SearchVectors를 실행할 수 있습니다. 복제본 리전에서 검색하기 전에 해당 리전에서 DescribeTable을 사용하고 벡터 인덱스 백필이 완료되었는지 확인합니다. IndexStatus는 ACTIVE이고 Backfilling은 false입니다. 복제본의 벡터 인덱스는 독립적으로 백필되므로 복제본 자체가 활성 상태가 된 후에도 잠시 동안 백필될 수 있습니다. 벡터 검색은 근사 최근접 이웃(ANN)을 사용하므로 동일한 데이터에서도 동일한 쿼리에 대해 리전 간에 순위가 약간 다를 수 있습니다.
aws dynamodb search-vectors \ --table-name Products \ --region us-west-2 \ --index-name ProductEmbeddingIndex \ --search-vector '[{"N": "0.1234"}, {"N": "-0.5678"}, {"N": "0.9012"}, ...]' \ --top-k 10
복제 지연은 리전 간 검색 결과에 영향을 미칩니다.
벡터 인덱스는 리전 간에 비동기적으로 전파됩니다. 다중 리전 강력한 일관성(MRSC) 글로벌 테이블의 경우에도 마찬가지입니다. 한 리전에서 작성한 벡터는 다른 리전의 SearchVectors 결과에 즉시 나타나지 않을 수 있습니다. 가장 최근 쓰기를 읽으려면 검색을 쓰기가 수행된 리전과 동일한 리전으로 전송합니다.