Esta página descreve como as pesquisas de vetor são implementadas em instâncias do Cloud SQL para MySQL. O Cloud SQL permite armazenar embeddings vetoriais, criar índices de vetor e realizar pesquisas de vetor com outros dados armazenados.
Armazenamento de embeddings de vetor
Você armazena embeddings de vetor em uma tabela que é compatível com as propriedades de atomicidade, consistência, isolamento e durabilidade (ACID). Assim como outros dados relacionais na tabela, é possível acessar os embeddings de vetor na tabela com a semântica transacional atual.
Para estabelecer o mapeamento entre as linhas da tabela e as representações de vetor, é necessário
criar uma coluna na tabela para armazenar os embeddings de vetor. A coluna precisa usar o tipo de dados VECTOR
do Cloud SQL e indicar o número de dimensões que a incorporação exige. A coluna de embedding de vetor só pode armazenar embeddings de vetor que usam exatamente as mesmas dimensões especificadas ao definir a coluna.
Uma tabela só pode ter uma coluna de embeddings de vetor. Não há restrições para o número de linhas na tabela.
Para distinguir a coluna de embeddings de vetor de outras colunas,
o Cloud SQL adiciona um COMMENT
e um CONSTRAINT
especiais à coluna.
A restrição é obrigatória para a validação de entradas, e a anotação da coluna de embeddings de vetor
fica visível como um COMMENT
. Não é possível modificar nem excluir o comentário ou a
restrição.
Se você tiver armazenamento e memória suficientes disponíveis na sua instância do Cloud SQL, poderá ter várias tabelas com as próprias colunas de embeddings de vetor.
A replicação de dados funciona da mesma maneira para a coluna de embeddings de vetor e para outras colunas do MySQL InnoDB.
Para conferir uma lista de limitações e restrições para tabelas de incorporação de vetores, colunas e instruções DML, consulte Limitações.
Índices vetoriais
É necessário usar um índice vetorial para realizar pesquisas de similaridade de ANN nos seus embeddings vetoriais. O Cloud SQL cria índices de vetor usando o algoritmo Scalable Nearest Neighbors (ScANN).
Os índices vetoriais têm os seguintes requisitos:
- Só é possível criar um índice de vetor por tabela.
- Se você tiver várias tabelas com inclusões de vetor na sua instância, será possível criar índices de vetor para cada uma delas.
- Se você estiver criando um índice vetorial, não será possível adicionar uma restrição à chave primária da tabela indexada.
Para melhorar a qualidade da pesquisa, crie um índice de vetor somente depois de carregar a maior parte dos dados na tabela base. Se você tiver menos de 1.000 incorporações na tabela base, a criação do índice vai falhar.
Ao decidir se vai criar um índice de vetor, se você tiver um pequeno número de linhas, considere realizar uma pesquisa KNN. A decisão de usar uma pesquisa KNN em vez de uma ANN também depende do número de dimensões na incorporação de vetores. Um número maior de embeddings pode exigir um índice de vetor.
Para conferir uma lista de limitações e restrições para índices vetoriais, consulte Limitações. Para informações sobre como criar um índice vetorial, consulte Criar e gerenciar índices vetoriais.
Atualizações do índice vetorial
O Cloud SQL atualiza índices de vetor em tempo real. Qualquer transação que realiza operações de linguagem de manipulação de dados (DML) na tabela base também propaga alterações nos índices de vetor associados. Os índices de vetor se comportam da mesma forma que qualquer outro índice secundário na tabela. Os índices de vetor são totalmente consistentes com transações e compatíveis com ACID. Se você reverter uma transação, as mudanças de reversão correspondentes também ocorrerão no índice de vetor.
Replicação de índices vetoriais
O Cloud SQL replica índices de vetor em todas as réplicas de leitura, inclusive para a replicação em cascata. Quando você cria uma nova réplica de leitura de uma instância principal que tem a incorporação de vetor, a réplica de leitura herda as configurações de incorporação de vetor da instância principal. Para réplicas de leitura atuais, é necessário ativar o suporte a embeddings de vetor em cada uma delas.
Em termos de impacto no atraso de replicação, a criação e a manutenção de índices de vetor funcionam da mesma maneira que os índices normais do MySQL.
Permanência, encerramento e impacto na manutenção
Os índices de vetor são mantidos da mesma forma que as tabelas de base, com suporte total ao ACID. Os índices de vetores estão sempre sincronizados com os dados da tabela base e têm a mesma visibilidade, isolamento e segurança contra falhas. Não há impacto no índice de vetor quando a instância é encerrada ou recebe manutenção.
Manutenção de índice
Depois que operações extensas de DML forem realizadas na tabela base, o índice de vetor que você treinou nos dados iniciais (no momento da criação do índice) poderá não refletir o novo estado. Isso pode afetar a qualidade da pesquisa.
O índice tem duas partes:
- A árvore de índice. Ele é criado com base em dados atuais. Ele permanece inalterado durante o ciclo de vida do índice.
- As folhas do índice. Eles contêm todas as linhas de dados. As folhas do índice nunca ficam dessincronizadas.
A árvore de índice pode ficar menos eficiente depois que um grande número de instruções DML for executado, porque as linhas se movem de uma folha para outra. Para atualizar a árvore de índices, é necessário recriar o índice.
Operações DDL não compatíveis em tabelas com índices de vetor
- Alterar operações de tabela que exigem algoritmo de cópia.
- Altere as operações de tabela que exigem a reconstrução da tabela.
- Excluir ou mudar a chave primária.
- Mova a tabela para um espaço de tabela geral.
Pesquisa vetorial
O Cloud SQL oferece funções de distância de vetor que você usa para realizar pesquisas de similaridade de vetor de vizinho mais próximo (KNN) e de vizinho aproximado mais próximo (ANN) na sua instância. Quando você executa uma consulta, o vetor de consulta é comparado com os vetores no seu conjunto de dados. As funções de distância calculam a distância entre os vetores usando uma métrica de similaridade, como o cosseno. Os vetores com a menor distância entre eles são os mais semelhantes e são retornados nos resultados da pesquisa.
O Cloud SQL usa as seguintes funções para medir a distância entre vetores em pesquisas de vetor quando você realiza pesquisas de vetor ANN e KNN:
- Cosseno: mede o cosseno do ângulo entre dois vetores. Um valor menor indica maior semelhança entre os vetores.
- Produto escalar: calcula o cosseno do ângulo multiplicado pelo produto das magnitudes de vetor correspondentes.
- Distância quadrada L2: mede a distância euclidiana entre dois vetores somando a distância quadrada em cada dimensão.
Pesquisa KNN
Uma pesquisa de vetor KNN é o método de pesquisa preferido quando você precisa de resultados exatos ou quer adicionar uma filtragem seletiva. A pesquisa KNN realiza um cálculo de distância do vetor de consulta com todos os embeddings no conjunto de dados para encontrar o vizinho mais próximo. As pesquisas KNN no Cloud SQL oferecem recall perfeito. As pesquisas KNN não usam um índice vetorial, então são uma boa opção para trabalhar com conjuntos de dados menores.
Para realizar uma pesquisa de KNN, use a função vector_distance
, que recebe dois
vetores como entrada: o vetor de consulta (o que você está procurando) e um vetor
candidato do seu conjunto de dados. Ele calcula a distância entre esses dois vetores.
Você usa vector_distance em uma instrução SELECT
. Para mais informações, consulte
Pesquisar vizinhos k-mais próximos (KNN).
Se você perceber que a KNN não está funcionando bem, crie um índice de vetor mais tarde
e continue usando approx_distance
no seu aplicativo para pesquisas de ANN.
Pesquisa ANN
Uma pesquisa vetorial ANN é o tipo de pesquisa preferido quando a eficiência da consulta é uma preocupação. Ele acelera as pesquisas de similaridade calculando a distância entre o vetor de consulta e apenas uma parte dos vetores no conjunto de dados. Para isso, o Cloud SQL organiza os dados em clusters ou partições e concentra a pesquisa nos clusters mais próximos da consulta. As pesquisas de ANN exigem índices vetoriais. Esses índices priorizam a velocidade de pesquisa em vez do recall perfeito. No Cloud SQL, o tipo de índice TREE_SQ é usado para pesquisas de ANN.
Para realizar uma pesquisa de NNA, use a função
approx_distance
com uma
opção de medição de distância. Você usa approx_distance
em uma lista ORDER BY
ou
SELECT
, e uma cláusula LIMIT
é permitida para limitar os resultados da pesquisa. Você também
pode adicionar uma cláusula WHERE
para realizar o pós-filtro dos resultados da pesquisa. Para
mais informações, consulte
Pesquisar vizinhos aproximados mais próximos (ANN).
Há alguns casos em que uma pesquisa de ANN volta para uma pesquisa de KNN. Para mais informações, consulte Verificar o status de substituição para pesquisas de ANN.
Requisitos
O Cloud SQL exige que você ative as embeddings de vetor na instância
usando a flag cloudsql_vector
antes de adicionar embeddings de vetor. Para mais
informações, consulte
Ativar e desativar embeddings de vetor na sua instância.
Limitações
Confira a seguir as limitações em tabelas que têm uma coluna de embeddings de vetor:
- Só pode haver uma coluna de embeddings de vetor para cada tabela.
- Só pode haver um índice de vetor por tabela.
- Um embedding de vetor é restrito a 16.000 dimensões.
- A coluna de embeddings de vetor não pode ser uma coluna gerada.
- Não é possível o particionamento no nível da tabela em tabelas com colunas de embeddings de vetor.
- As chaves primárias que usam os tipos de dados
BIT
,BINARY
,VARBINARY
,JSON
,BLOB
ou dados espaciais não são compatíveis com índices vetoriais.TEXT
Chaves primárias compostas também não podem incluir nenhum desses tipos. - Se houver um índice de vetor, não será possível adicionar uma restrição à chave primária da tabela base.
- Quando um índice de vetor está presente em uma tabela, há algumas operações DDL que não podem ser realizadas. Para mais informações, consulte Operações DDL sem suporte em tabelas com índices de vetor.
Confira a seguir as restrições para consultas de pesquisa vetorial:
- A função
approx_distance
só pode ser usada em uma listaORDER BY
ouSELECT
. - Predicados que envolvem a tabela base podem ser usados na condição
WHERE
em combinação com expressõesapprox_distance
na listaORDER BY
ouSELECT
. Os predicados de condiçãoWHERE
são avaliados depois que as funções vetoriaisapprox_distance
são avaliadas.
Práticas recomendadas para trabalhar com índices de vetor
Esta seção apresenta as práticas recomendadas para trabalhar com índices de vetor. Cada carga de trabalho é diferente, e talvez você precise ajustá-la de acordo.
- Após operações DML importantes, é recomendável recriar o índice.
- Geralmente, é aceitável deixar o Cloud SQL calcular o número de folhas a serem usadas. Se você quiser especificar o número de folhas em um caso de uso, é recomendável ter pelo menos 100 vetores por folha para uma melhor recuperação.
A seguir
- Leia a visão geral sobre a pesquisa de vetor no Cloud SQL.
- Saiba como gerar embeddings de vetor.
- Saiba como criar índices de vetor.
- Saiba como realizar pesquisas em embeddings vetoriais.