Esta página descreve como as pesquisas vetoriais são implementadas em instâncias do Cloud SQL para MySQL. O Cloud SQL permite-lhe armazenar incorporações de vetores, criar índices de vetores e realizar pesquisas de vetores em conjunto com os seus outros dados armazenados.
Armazenamento de incorporações vetoriais
Armazena incorporações de vetores numa tabela em conformidade com as propriedades de atomicidade, consistência, isolamento e durabilidade (ACID). Tal como outros dados relacionais na tabela, pode aceder às incorporações de vetores na tabela com a semântica transacional existente.
Para estabelecer o mapeamento entre linhas de tabelas e representações vetoriais, tem de
criar uma coluna na tabela para armazenar as incorporações de vetores. A coluna tem de usar o tipo de dados VECTOR
do Cloud SQL e indicar o número de dimensões que a incorporação requer. A coluna de incorporação de vetores só pode
armazenar incorporações de vetores que usam exatamente as mesmas dimensões que especifica
quando define a coluna.
Uma tabela só pode ter uma coluna de incorporação de vetores. Não existem restrições quanto ao número de linhas na tabela.
Para distinguir a coluna de incorporação vetorial de outras colunas, o Cloud SQL adiciona um COMMENT
e um CONSTRAINT
especiais à coluna.
A restrição é necessária para a validação de entradas e a anotação da coluna de incorporação de vetores é visível como COMMENT
. Não pode modificar nem eliminar o comentário ou a restrição.
Se tiver armazenamento e memória suficientes disponíveis na instância do Cloud SQL, pode ter várias tabelas com as suas próprias colunas de incorporação de vetores.
A replicação de dados funciona da mesma forma para a coluna de incorporação de vetores que para outras colunas do MySQL InnoDB.
Para ver uma lista de limitações e restrições para tabelas de incorporação de vetores, colunas e declarações DML, consulte Limitações.
Índices vetoriais
Tem de usar um índice de vetores para realizar pesquisas de similaridade de ANN nas suas incorporações de vetores. O Cloud SQL cria índices vetoriais através do algoritmo Scalable Nearest Neighbors (ScANN).
Os índices vetoriais têm os seguintes requisitos:
- Só pode criar um índice vetorial por tabela.
- Se tiver várias tabelas com incorporações vetoriais na sua instância, pode criar índices vetoriais para cada uma delas.
- Se estiver a criar um índice vetorial, não pode adicionar uma restrição à chave primária da tabela indexada.
Para uma melhor qualidade de pesquisa, crie um índice vetorial apenas depois de carregar a maioria dos seus dados na tabela base. Se tiver menos de 1000 incorporações na tabela base, a criação do índice falha.
Ao decidir se deve criar um índice vetorial, se tiver um pequeno número de linhas, considere se pode fazer uma pesquisa KNN. A decisão de usar uma pesquisa KNN em vez de uma pesquisa ANN também depende do número de dimensões na incorporação de vetores. Um número maior de incorporações pode exigir um índice vetorial.
Para ver uma lista de limitações e restrições para índices vetoriais, consulte a secção Limitações. Para informações sobre como criar um índice vetorial, consulte o artigo Crie e faça a gestão de índices vetoriais.
Atualizações do índice vetorial
O Cloud SQL atualiza os índices vetoriais em tempo real. Qualquer transação que execute operações de linguagem de manipulação de dados (DML) na tabela base também propaga alterações aos índices vetoriais associados. Os índices vetoriais comportam-se da mesma forma que qualquer outro índice secundário na tabela. Os índices vetoriais são totalmente consistentes do ponto de vista transacional e estão em conformidade com o ACID. Se reverter uma transação, as alterações de reversão correspondentes também ocorrem no índice de vetores.
Replicação de índices vetoriais
O Cloud SQL replica os índices vetoriais para todas as réplicas de leitura, inclusive para a replicação em cascata. Quando cria uma nova réplica de leitura a partir de uma instância principal que tenha incorporação de vetores, a réplica de leitura herda as definições de incorporação de vetores da instância principal. Para réplicas de leitura existentes, tem de ativar o suporte de incorporação de vetores em cada uma delas.
Em termos de impacto no atraso de replicação, a criação e a manutenção de índices vetoriais funcionam da mesma forma que os índices MySQL normais.
Persistência, encerramento e impacto na manutenção
Os índices vetoriais são mantidos da mesma forma que as tabelas base, com suporte ACID completo. Os índices vetoriais estão sempre sincronizados com os dados da respetiva tabela base e têm a mesma visibilidade, isolamento e segurança em caso de falha. Não existe impacto no índice de vetores quando a instância é encerrada ou recebe manutenção.
Manutenção do índice
Depois de realizar operações DML extensivas na tabela base, o índice vetorial no qual fez a preparação com os dados iniciais (no momento da criação do índice) pode não refletir o novo estado. Isto pode afetar a qualidade da pesquisa.
O índice tem duas partes:
- A árvore de índice. Esta é criada através da preparação com base em dados existentes. Permanece inalterado durante a duração total do índice.
- O índice desaparece. Estes contêm todas as linhas de dados. Os índices das folhas nunca ficam dessincronizados.
A árvore de índice pode tornar-se menos eficiente após a execução de um grande número de declarações DML, uma vez que as linhas se movem de uma folha para outra. Para atualizar a árvore de índice, tem de reconstruir o índice.
Operações DDL não suportadas em tabelas com índices vetoriais
- Alterações às operações de tabelas que requerem o algoritmo de cópia.
- Operações de alteração de tabelas que requerem a reconstrução da tabela.
- Eliminar ou alterar a chave principal.
- Mova a tabela para um tablespace geral.
Pesquisa vetorial
O Cloud SQL fornece funções de distância vetorial que usa para realizar pesquisas de similaridade vetorial de vizinhos mais próximos (ANN) e K-vizinhos mais próximos (KNN) na sua instância. Quando 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 através de uma métrica de semelhança, como o cosseno. Os vetores com a menor distância entre eles são os mais semelhantes e são devolvidos nos resultados da pesquisa.
O Cloud SQL usa as seguintes funções para medir a distância entre vetores em pesquisas vetoriais quando realiza pesquisas vetoriais ANN e KNN:
- Cosseno: mede o cosseno do ângulo entre dois vetores. Um valor mais pequeno indica uma maior semelhança entre os vetores.
- Produto escalar: calcula o cosseno do ângulo multiplicado pelo produto das magnitudes dos vetores correspondentes.
- Distância ao quadrado L2: mede a distância euclidiana entre dois vetores adicionando a distância ao quadrado em cada dimensão.
Pesquisa KNN
Uma pesquisa vetorial KNN é o método de pesquisa preferencial quando precisa de resultados exatos ou quer adicionar uma filtragem seletiva. A pesquisa KNN executa um cálculo de distância do vetor de consulta com cada incorporação no conjunto de dados para encontrar o vizinho mais próximo. As pesquisas KNN no Cloud SQL oferecem uma capacidade de memorização perfeita. As pesquisas KNN não usam um índice de vetores, pelo que são uma boa opção quando trabalha com conjuntos de dados mais pequenos.
Para realizar uma pesquisa KNN, usa a função vector_distance
que recebe dois vetores como entrada: o vetor de consulta (o que está a pesquisar) e um vetor candidato do seu conjunto de dados. Calcula a distância entre estes dois vetores.
Usa vector_distance numa declaração SELECT
. Para mais informações, consulte o artigo
Pesquise os K vizinhos mais próximos (KNN).
Se verificar que o KNN não está a ter um bom desempenho, pode criar um índice de vetores mais tarde e continuar a usar approx_distance
na sua aplicação para pesquisas ANN.
Pesquisa de ANN
Uma pesquisa de vetores ANN é o tipo de pesquisa preferido quando a eficiência da consulta é uma preocupação. 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 o fazer, o Cloud SQL organiza os dados em clusters ou partições e, em seguida, foca a pesquisa nos clusters mais próximos da consulta. As pesquisas ANN requerem índices vetoriais. Estes índices dão prioridade à velocidade de pesquisa em detrimento da relembrança perfeita. No Cloud SQL, o tipo de índice TREE_SQ é usado para pesquisas ANN.
Para realizar uma pesquisa ANN, usa a função approx_distance
com uma opção de medição de distância. Usa approx_distance
numa lista ORDER BY
ou SELECT
e é permitida uma cláusula LIMIT
para limitar os resultados da pesquisa. Também pode adicionar uma cláusula WHERE
para realizar a filtragem posterior dos resultados da pesquisa. Para mais informações, consulte o artigo Pesquise os vizinhos mais próximos aproximados (ANN).
Existem alguns casos em que uma pesquisa ANN recorre a uma pesquisa KNN. Para mais informações, consulte o artigo Verifique o estado de alternativa para pesquisas de ANN.
Requisitos
O Cloud SQL requer que ative as incorporações de vetores na instância com a flag cloudsql_vector
antes de adicionar incorporações de vetores. Para mais
informações, consulte o artigo
Ative e desative as incorporações vetoriais na sua instância.
Limitações
Seguem-se as limitações das tabelas que têm uma coluna de incorporação de vetores:
- Só pode existir uma coluna de incorporação vetorial por tabela.
- Só pode existir um índice vetorial por tabela.
- Uma incorporação de vetor está restrita a 16 000 dimensões.
- A coluna de incorporação de vetores não pode ser uma coluna gerada.
- A partição ao nível da tabela em tabelas com colunas de incorporação de vetores não é suportada.
- As chaves primárias que usam os tipos de dados
BIT
,BINARY
,VARBINARY
,JSON
,BLOB
,TEXT
ou dados espaciais não são suportadas para índices vetoriais. As chaves principais compostas também não podem incluir nenhum destes tipos. - Se existir um índice vetorial, não pode adicionar uma restrição à chave principal da tabela base.
- Quando existe um índice vetorial numa tabela, existem algumas operações DDL que não pode realizar. Para mais informações, consulte o artigo Operações DDL não suportadas em tabelas com índices vetoriais.
Seguem-se as restrições para consultas de pesquisa vetorial:
- A função
approx_distance
só pode ser usada numa listaORDER BY
ouSELECT
. - Os predicados que envolvem a tabela base podem ser usados na condição
WHERE
em combinação com expressõesapprox_distance
na listaORDER BY
ouSELECT
. As condiçõesWHERE
são avaliadas depois de as funções vetoriaisapprox_distance
serem avaliadas.
Práticas recomendadas para trabalhar com índices vetoriais
Esta secção fornece práticas recomendadas para trabalhar com índices vetoriais. Cada carga de trabalho é diferente e pode ter de fazer ajustes em conformidade.
- Após operações DML importantes, é uma prática recomendada recriar o índice.
- Geralmente, é aceitável permitir que o Cloud SQL calcule o número de folhas a usar. Se tiver um exemplo de utilização em que quer especificar o número de folhas, recomendamos que tenha, pelo menos, 100 vetores por folha para a melhor capacidade de memorização.
O que se segue?
- Leia a vista geral sobre a pesquisa vetorial no Cloud SQL.
- Saiba como gerar incorporações vetoriais.
- Saiba como criar índices vetoriais.
- Saiba como fazer pesquisas em incorporações vetoriais.