이 페이지에서는 MySQL용 Cloud SQL 인스턴스에서 벡터 검색이 구현되는 방식을 설명합니다. Cloud SQL을 사용하면 벡터 임베딩을 저장하고, 벡터 색인을 만들고, 저장된 다른 데이터와 함께 벡터 검색을 실행할 수 있습니다.
벡터 임베딩 스토리지
원자성, 일관성, 격리, 내구성 (ACID) 속성을 준수하는 테이블에 벡터 임베딩을 저장합니다. 테이블의 다른 관계형 데이터와 마찬가지로 기존 트랜잭션 시맨틱으로 테이블의 벡터 임베딩에 액세스할 수 있습니다.
테이블 행과 벡터 표현 간에 매핑을 설정하려면 테이블에 벡터 임베딩을 저장할 열을 만들어야 합니다. 열은 Cloud SQL VECTOR
데이터 유형을 사용해야 하며 임베딩에 필요한 측정기준 수를 표시해야 합니다. 벡터 임베딩 열은 열을 정의할 때 지정한 것과 크기가 정확히 동일한 벡터 임베딩만 저장할 수 있습니다.
테이블에는 벡터 임베딩 열이 하나만 있을 수 있습니다. 테이블의 행 수에는 제한이 없습니다.
벡터 임베딩 열을 다른 열과 구분하기 위해 Cloud SQL은 열에 특별한 COMMENT
및 CONSTRAINT
를 추가합니다.
이 제약조건은 입력 검증에 필요하며 벡터 임베딩 열 주석은 COMMENT
로 표시됩니다. 주석 또는 제약조건은 수정하거나 삭제할 수 없습니다.
Cloud SQL 인스턴스에 사용 가능한 스토리지와 메모리가 충분하면 자체 벡터 임베딩 열이 있는 여러 테이블을 보유할 수 있습니다.
데이터 복제는 다른 MySQL InnoDB 열과 마찬가지로 벡터 임베딩 열에 대해 동일하게 작동합니다.
벡터 임베딩 테이블, 열, DML 문에 대한 제한사항 목록은 제한사항을 참고하세요.
벡터 색인
벡터 임베딩에서 ANN 유사성 검색을 실행하려면 벡터 색인을 사용해야 합니다. Cloud SQL은 확장 가능한 최근접 이웃 (ScANN) 알고리즘을 사용하여 벡터 색인을 만듭니다.
벡터 색인의 요구사항은 다음과 같습니다.
- 테이블당 벡터 색인은 하나만 만들 수 있습니다.
- 인스턴스에 벡터 임베딩이 있는 테이블이 여러 개인 경우 각 테이블에 대해 벡터 색인을 만들 수 있습니다.
- 벡터 색인을 만드는 경우 색인 생성된 테이블의 기본 키에 제약조건을 추가할 수 없습니다.
검색 품질을 개선하려면 기본 테이블에 데이터의 대부분을 로드한 후에만 벡터 색인을 만드세요. 기본 테이블에 임베딩이 1, 000개 미만이면 색인 생성이 실패합니다.
벡터 색인을 만들지 결정할 때 행 수가 적은 경우 대신 KNN 검색을 실행할 수 있는지 고려하세요. KNN 검색과 ANN 검색 중 어떤 것을 사용할지는 벡터 임베딩의 크기에 따라 달라집니다. 임베딩 수가 많으면 벡터 색인이 필요할 수 있습니다.
벡터 색인의 제한사항 목록은 제한사항을 참고하세요. 벡터 색인 만들기에 관한 자세한 내용은 벡터 색인 만들기 및 관리를 참고하세요.
벡터 색인 업데이트
Cloud SQL은 벡터 색인을 실시간으로 업데이트합니다. 기본 테이블에서 데이터 조작 언어 (DML) 작업을 실행하는 모든 트랜잭션은 연결된 벡터 색인에도 변경사항을 전파합니다. 벡터 색인은 테이블의 다른 보조 색인과 동일한 방식으로 작동합니다. 벡터 색인은 완전히 트랜잭션 일관성이 있으며 ACID를 준수합니다. 트랜잭션을 롤백하면 해당 롤백 변경사항이 벡터 색인에도 적용됩니다.
벡터 색인 복제
Cloud SQL은 연쇄 복제를 포함하여 모든 읽기 복제본에 벡터 색인을 복제합니다. 벡터 임베딩이 있는 기본 인스턴스에서 새 읽기 복제본을 만들면 읽기 복제본이 기본 인스턴스에서 벡터 임베딩 설정을 상속합니다. 기존 읽기 복제본의 경우 각 읽기 복제본에서 벡터 임베딩 지원을 사용 설정해야 합니다.
복제 지연 영향 측면에서 벡터 색인을 만들고 유지보수하는 방법은 일반 MySQL 색인과 동일한 방식으로 수행됩니다.
지속성, 종료, 유지보수 영향
벡터 색인은 전체 ACID 지원과 함께 기본 테이블과 동일한 방식으로 유지됩니다. 벡터 색인은 항상 기본 테이블 데이터와 동기화되며 동일한 가시성, 격리, 비정상 종료 안전성을 갖습니다. 인스턴스가 종료되거나 유지보수를 받더라도 벡터 색인은 영향을 받지 않습니다.
색인 유지 관리
기본 테이블에 광범위한 DML 작업이 실행된 후에는 색인 생성 시 초기 데이터로 학습한 벡터 색인이 새 상태를 반영하지 않을 수 있습니다. 이로 인해 검색 품질에 영향을 미칠 수 있습니다.
색인은 두 부분으로 구성됩니다.
- 색인 트리 기존 데이터를 학습하여 구축됩니다. 색인의 전체 기간 동안 변경되지 않습니다.
- 색인 리프입니다. 여기에는 모든 데이터 행이 포함됩니다. 색인 리프는 동기화되지 않습니다.
행이 한 리프에서 다른 리프로 이동하므로 DML 문이 다량 실행된 후 색인 트리의 효율성이 떨어질 수 있습니다. 색인 트리를 새로고침하려면 색인을 다시 빌드해야 합니다.
벡터 색인이 있는 테이블에서 지원되지 않는 DDL 작업
- 복사 알고리즘이 필요한 테이블 작업을 변경합니다.
- 테이블을 다시 빌드해야 하는 Alter Table 작업
- 기본 키를 삭제하거나 변경합니다.
- 테이블을 일반 테이블스페이스로 이동합니다.
벡터 검색
Cloud SQL은 인스턴스에서 근사 최근접 이웃 (ANN) 및 K-최근접 이웃 (KNN) 벡터 유사성 검색을 실행하는 데 사용하는 벡터 거리 함수를 제공합니다. 쿼리를 실행하면 쿼리 벡터가 데이터 세트의 벡터와 비교됩니다. 거리 함수는 코사인과 같은 유사성 측정항목을 사용하여 벡터 간의 거리를 계산합니다. 거리가 가장 짧은 벡터가 가장 유사하며 검색 결과에 반환됩니다.
Cloud SQL은 ANN 및 KNN 벡터 검색을 실행할 때 벡터 검색에서 벡터 간의 거리를 측정하기 위해 다음 함수를 사용합니다.
- 코사인: 두 벡터 간의 각도 코사인을 측정합니다. 값이 작을수록 벡터 간의 유사도가 높습니다.
- 내적: 각도에 해당 벡터 크기의 곱을 곱하여 코사인을 계산합니다.
- L2 제곱 거리: 각 측정기준의 제곱 거리를 더하여 두 벡터 간의 유클리드 거리를 측정합니다.
KNN 검색
KNN 벡터 검색은 정확한 결과가 필요하거나 선택적 필터링을 추가하려는 경우에 권장되는 검색 방법입니다. KNN 검색은 데이터 세트의 모든 임베딩을 사용하여 쿼리 벡터의 거리 계산을 실행하여 최근접 이웃을 찾습니다. Cloud SQL의 KNN 검색은 정확한 검색을 제공합니다. KNN 검색은 벡터 색인을 사용하지 않으므로 소규모 데이터 세트를 사용할 때 적합한 옵션입니다.
KNN 검색을 실행하려면 두 개의 벡터 (검색어 벡터 및 데이터 세트의 후보 벡터)를 입력으로 사용하는 vector_distance
함수를 사용합니다. 이 두 벡터 간의 거리를 계산합니다.
SELECT
문에 vector_distance를 사용합니다. 자세한 내용은 K-최근접 이웃 (KNN) 검색을 참고하세요.
KNN의 성능이 좋지 않다면 나중에 벡터 색인을 빌드하고 애플리케이션에서 ANN 검색을 위해 approx_distance
를 계속 사용할 수 있습니다.
ANN 검색
쿼리 효율성이 우려되는 경우 ANN 벡터 검색이 선호되는 검색 유형입니다. 쿼리 벡터와 데이터 세트의 일부 벡터 간의 거리만 계산하여 유사성 검색 속도를 높입니다. 이를 위해 Cloud SQL은 데이터를 클러스터 또는 파티션으로 구성한 다음 쿼리에 가장 가까운 클러스터에 검색을 집중합니다. ANN 검색에는 벡터 색인이 필요합니다. 이러한 색인은 완벽한 검색 재현율보다 검색 속도를 우선합니다. Cloud SQL에서는 ANN 검색에 TREE_SQ 색인 유형이 사용됩니다.
ANN 검색을 실행하려면 거리 측정 옵션과 함께 approx_distance
함수를 사용합니다. ORDER BY
또는 SELECT
목록에서 approx_distance
를 사용하고 LIMIT
절이 검색 결과를 제한하도록 허용됩니다. WHERE
절을 추가하여 검색 결과의 후처리 필터링을 실행할 수도 있습니다. 자세한 내용은 근사 최근접 이웃 (ANN) 검색을 참고하세요.
ANN 검색이 KNN 검색으로 대체되는 경우가 있습니다. 자세한 내용은 ANN 검색의 대체 상태 확인을 참고하세요.
요구사항
Cloud SQL에서는 벡터 임베딩을 추가하기 전에 cloudsql_vector
플래그를 사용하여 인스턴스에서 벡터 임베딩을 사용 설정해야 합니다. 자세한 내용은 인스턴스에서 벡터 임베딩 사용 설정 및 중지를 참고하세요.
제한사항
벡터 임베딩 열이 있는 테이블에는 다음과 같은 제한사항이 적용됩니다.
- 벡터 임베딩 열은 테이블당 하나만 있을 수 있습니다.
- 벡터 색인은 테이블당 하나만 있을 수 있습니다.
- 벡터 임베딩은 16,000개의 차원으로 제한됩니다.
- 벡터 임베딩 열은 생성된 열일 수 없습니다.
- 벡터 임베딩 열이 있는 테이블에서는 테이블 수준 파티셔닝이 지원되지 않습니다.
BIT
,BINARY
,VARBINARY
,JSON
,BLOB
,TEXT
데이터 유형 또는 공간 데이터를 사용하는 기본 키는 벡터 색인에 지원되지 않습니다. 복합 기본 키에도 이러한 유형이 포함될 수 없습니다.- 벡터 색인이 있으면 기본 테이블의 기본 키에 제약조건을 추가할 수 없습니다.
- 테이블에 벡터 색인이 있으면 수행할 수 없는 DDL 작업이 있습니다. 자세한 내용은 벡터 색인이 있는 테이블에서 지원되지 않는 DDL 작업을 참고하세요.
다음은 벡터 검색 쿼리의 제한사항입니다.
approx_distance
함수는ORDER BY
또는SELECT
목록에서만 사용할 수 있습니다.- 기본 테이블과 관련된 조건자는
ORDER BY
또는SELECT
목록의approx_distance
표현식과 함께WHERE
조건에서 사용할 수 있습니다.WHERE
조건자는approx_distance
벡터 함수가 평가된 후에 평가됩니다.
벡터 색인 작업 권장사항
이 섹션에서는 벡터 색인 작업을 위한 권장사항을 제공합니다. 모든 워크로드가 서로 다르며 그에 따라 조정이 필요할 수 있습니다.
- 주요 DML 작업 후에는 색인을 다시 빌드하는 것이 좋습니다.
- 일반적으로 Cloud SQL에서 사용할 리프 수를 계산하도록 허용하는 것이 좋습니다. 리프 수를 지정해야 하는 사용 사례가 있는 경우 최적의 검색 결과를 얻으려면 리프당 벡터가 100개 이상 있어야 합니다.
다음 단계
- Cloud SQL의 벡터 검색 개요를 읽어보세요.
- 벡터 임베딩을 생성하는 방법을 알아봅니다.
- 벡터 색인을 만드는 방법 알아보기
- 벡터 임베딩에서 검색하는 방법을 알아보세요.