O TairVector é uma estrutura de dados estendida do Tair, projetada para armazenamento e recuperação de vetores em tempo real com alto desempenho.
TairVector
O TairVector utiliza uma estrutura de dados de hash multicamadas.
O TairVector oferece dois algoritmos de indexação: Hierarchical Navigable Small World (HNSW) e busca plana (flat search):
HNSW: Cria índices baseados em grafos para busca vetorial e suporta recuperação assíncrona de espaço. Essa abordagem garante alta precisão nas consultas, equilibrando desempenho com atualizações em tempo real.
flat search: Oferece 100% de precisão nas consultas e inserção rápida de dados, sendo ideal para pequenos conjuntos de dados.
O TairVector também suporta diversas métricas de distância, como distância euclidiana, produto interno, distância do cosseno e distância de Jaccard. Em comparação com os serviços tradicionais de busca vetorial, o TairVector apresenta as seguintes vantagens:
Armazena todos os dados na memória e permite atualizações de índice em tempo real, resultando em menor latência de leitura e escrita.
Utiliza uma estrutura de dados em memória otimizada para reduzir o consumo de memória.
Disponibiliza um serviço de nuvem pronto para uso, com arquitetura simples e eficiente, sem dependências complexas de componentes.
Suporta busca híbrida, combinando busca vetorial com busca de texto completo.
Permite a criação de índices invertidos em escalares, como atributos de tag. Isso possibilita que uma busca pelos k-vizinhos mais próximos (KNN) filtre primeiro pelos escalares e depois realize a busca vetorial nos resultados filtrados.
Notas de versão
13 de outubro de 2022: Lançamento do TairVector em instâncias baseadas em DRAM do Tair compatíveis com Redis 6.0.
22 de novembro de 2022 (Versão 6.2.2.0): Adicionado suporte à métrica de distância de Jaccard. O comando TVS.GETINDEX foi aprimorado para retornar estatísticas de uso de memória de cada índice nos campos
index_data_sizeeattribute_data_size.26 de dezembro de 2022 (Versão 6.2.3.0): Adicionado suporte ao modo proxy em clusters, ao tipo de dados vetoriais FLOAT16 e aos comandos TVS.MINDEXKNNSEARCH e TVS.MINDEXMKNNSEARCH.
4 de julho de 2023 (Versão 6.2.8.2): Adicionado suporte à métrica de distância do cosseno e à coleta de lixo automática para índices HNSW.
3 de agosto de 2023 (Versão 23.8.0.0): Adicionado suporte para definir tempo de vida (TTL) no nível de chave com comandos como TVS.HEXPIREAT e TVS.HPEXPIREAT, além de buscas por vizinhos mais próximos em listas de chaves especificadas com o comando TVS.GETDISTANCE. Esta versão também introduziu a busca de texto completo por meio da atualização de comandos como TVS.CREATEINDEX e TVS.KNNSEARCH, habilitando a busca híbrida.
6 de junho de 2024 (Versão 24.5.1.0): Adicionados os comandos TVS.KNNSEARCHFIELD e TVS.MINDEXKNNSEARCHFIELD para retornar informações de atributos de tag durante buscas por vizinhos mais próximos.
22 de julho de 2024 (Versão 24.7.0.0): Habilitados índices HNSW para vetores esparsos.
Melhores práticas
Pré-requisitos
A instância deve ser baseada em DRAM e compatível com Redis 6.0 ou superior.
Não é possível atualizar uma instância baseada em DRAM executando Redis 5.0 para o Redis 6.0. Para utilizar o Redis 6.0, crie uma nova instância baseada em DRAM.
Observações
Essas operações aplicam-se aos dados do TairVector em uma instância Tair.
O TairVector não suporta o recurso de hashtags do Redis em campos como index_name e Key.
O TairVector não suporta comandos como MOVE.
Para requisitos elevados de persistência de dados, ative o modo de replicação semissíncrona.
Referência de comandos
Tabela 1. Comandos do TairVector
|
Tipo |
Comando |
Sintaxe |
Descrição |
|
Operações de índice |
|
Cria um índice vetorial, especificando o algoritmo para construção e consulta do índice, bem como a função de distância. O índice só pode ser excluído com o comando |
|
|
|
Recupera os metadados de um índice vetorial especificado. |
||
|
|
Exclui um índice vetorial especificado e todos os dados que ele contém. |
||
|
|
Varre incrementalmente os índices vetoriais em uma instância Tair que correspondem aos critérios especificados. |
||
|
Operações de dados vetoriais |
|
Insere um registro de dados em um índice vetorial. Se já existir um registro com a chave especificada, o registro existente será sobrescrito. |
|
|
|
Recupera todos os atributos e valores do registro de dados para a chave especificada em um índice vetorial. |
||
|
|
Retorna os valores das chaves de atributo especificadas para uma determinada chave em um índice vetorial. |
||
|
|
Exclui o registro de dados especificado (chave) do índice vetorial indicado. |
||
|
|
Exclui uma ou mais attribute_keys e seus respectivos valores de um registro (chave) em um índice vetorial. |
||
|
|
Varre registros de dados (identificados por chave) que atendem às condições especificadas dentro de um determinado índice vetorial. |
||
|
|
Incrementa o valor inteiro de |
||
|
|
Incrementa o valor de |
||
|
|
Define o tempo de expiração absoluto em milissegundos para um registro de dados, identificado por sua chave, dentro de um índice vetorial especificado. |
||
|
|
Define um tempo de expiração relativo em milissegundos para uma chave especificada em um índice vetorial. |
||
|
|
Define um tempo de expiração absoluto para uma chave especificada em um índice vetorial, com precisão de segundos. |
||
|
|
Define um tempo de expiração relativo em segundos para um vetor especificado (chave) em um índice vetorial. |
||
|
|
Retorna o TTL, em milissegundos, para um registro de dados especificado (chave) em um índice vetorial. |
||
|
|
Recupera o TTL em segundos para um registro de dados especificado (chave) em um índice vetorial determinado. |
||
|
|
Retorna o tempo de expiração absoluto de um registro de dados especificado (chave) em um índice vetorial, como um timestamp Unix em milissegundos. |
||
|
|
Retorna o tempo de expiração absoluto de um registro de dados especificado (chave) em um índice vetorial como um timestamp Unix em segundos. |
||
|
Consultas de vizinhos mais próximos vetoriais |
|
Realiza uma consulta de vizinhos mais próximos para um vetor especificado em um índice vetorial e retorna até topN resultados. |
|
|
|
Busca em um índice vetorial os vizinhos mais próximos de um vetor especificado. A lógica de busca é idêntica à do TVS.KNNSEARCH, mas este comando também retorna atributos de tag. |
||
|
|
Encontra os vizinhos mais próximos de um vetor de consulta a partir de uma lista especificada de chaves dentro de um índice vetorial. |
||
|
|
Executa uma busca em lote por vizinhos mais próximos para múltiplos vetores em um índice vetorial especificado. |
||
|
|
Busca os vizinhos mais próximos de um vetor especificado em vários índices vetoriais. |
||
|
|
Realiza uma consulta de vizinhos mais próximos para um vetor especificado em vários índices vetoriais e, opcionalmente, retorna tags. |
||
|
|
Busca em vários índices vetoriais os vizinhos mais próximos de múltiplos vetores. |
||
|
Geral |
|
Exclui um ou mais índices do TairVector usando o comando nativo DEL do Redis. |
A lista a seguir descreve as convenções para a sintaxe de comandos utilizada neste tópico:
Palavra-chave em maiúsculas: indica a palavra-chave do comando.Texto em itálico: indica variáveis.
[opções]: indica que os parâmetros entre colchetes são opcionais. Parâmetros não delimitados por colchetes devem ser obrigatoriamente especificados.A|B: indica que os parâmetros separados por barras verticais (|) são mutuamente exclusivos. Apenas um deles pode ser especificado....: indica que o parâmetro anterior a este símbolo pode ser repetido várias vezes.
TVS.CREATEINDEX
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(1) |
|
Descrição do comando |
Cria um índice vetorial, especificando o algoritmo para construção e consulta do índice, bem como a função de distância. O índice só pode ser excluído com o comando |
|
Parâmetros |
|
|
Valor de retorno |
|
|
Exemplo |
Comandos de exemplo:
Saída de exemplo:
|
TVS.GETINDEX
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(1) |
|
Descrição do comando |
Recupera os metadados de um índice vetorial especificado. |
|
Parâmetro |
|
|
Saída |
|
|
Exemplo |
Execute primeiro os seguintes comandos:
Exemplo de comando para um índice HNSW:
Exemplo de saída:
|
TVS.DELINDEX
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(N), onde N é o número de chaves no índice vetorial. |
|
Descrição |
Exclui um índice vetorial especificado e todos os dados que ele contém. |
|
Parâmetro |
|
|
Valor de retorno |
|
|
Exemplo |
Comando:
Saída:
|
TVS.SCANINDEX
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(N), onde N é o número de índices vetoriais na instância Tair. |
|
Descrição do comando |
Varre incrementalmente os índices vetoriais em uma instância Tair que correspondem aos critérios especificados. |
|
Opções |
|
|
Saída |
|
|
Exemplo |
Exemplo de comando:
Exemplo de saída:
Exemplo de comando com padrão:
Exemplo de saída:
|
TVS.HSET
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
A complexidade de tempo é O(1) se nenhum dado vetorial for criado ou atualizado; caso contrário, é O(log(N)), onde N é o número de chaves no índice vetorial. |
|
Descrição do comando |
Insere um registro de dados em um índice vetorial. Se já existir um registro com a key especificada, o registro existente será sobrescrito. |
|
Parâmetros |
|
|
Valor de retorno |
|
|
Exemplo |
Exemplo de comando:
Exemplo de saída:
|
TVS.HGETALL
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(1) |
|
Descrição do comando |
Recupera todos os atributos e valores do registro de dados para a key especificada em um índice vetorial. |
|
Parâmetro |
|
|
Valor de retorno |
|
|
Exemplo |
Exemplo de comando:
Exemplo de retorno:
|
TVS.HMGET
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(1) |
|
Descrição do comando |
Retorna os valores das attribute keys especificadas para uma determinada key em um índice vetorial. |
|
Parâmetros |
|
|
Retornos |
|
|
Exemplo |
Exemplo de comando:
Exemplo de saída:
|
TVS.DEL
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(1) |
|
Descrição do comando |
Exclui o registro de dados especificado (key) do índice vetorial especificado. |
|
Parâmetro |
|
|
Valor de retorno |
|
|
Exemplo |
Exemplo de comando:
Exemplo de saída:
|
TVS.HDEL
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(1) |
|
Descrição do comando |
Exclui uma ou mais attribute_keys e seus valores de um registro (key) em um índice vetorial. |
|
Parâmetros |
|
|
Valor de retorno |
|
|
Exemplo |
Exemplo de comando:
Exemplo de saída:
|
TVS.SCAN
|
Categoria |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(N), onde N é o número de chaves no índice vetorial. |
|
Descrição do comando |
Varre registros de dados (identificados por key) que atendem às condições especificadas dentro de um determinado índice vetorial. |
|
Parâmetros |
|
|
Valor de retorno |
|
|
Exemplo |
Exemplo de comando:
Exemplo de valor de retorno:
|
TVS.HINCRBY
|
Categoria |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(1) |
|
Descrição do comando |
Incrementa o valor inteiro de Se |
|
Parâmetros |
|
|
Valor de retorno |
|
|
Exemplo |
Exemplo de comando:
Exemplo de saída:
|
TVS.HINCRBYFLOAT
|
Categoria |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(1) |
|
Descrição do comando |
Incrementa o valor de Caso a |
|
Parâmetros |
|
|
Valor retornado |
|
|
Exemplo |
Comando de exemplo:
Saída de exemplo:
|
TVS.HPEXPIREAT
|
Categoria |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(1) |
|
Descrição do comando |
Define o tempo absoluto de expiração, em milissegundos, para um registro de dados identificado por sua key dentro de um índice vetorial especificado. |
|
Parâmetros |
|
|
Valor retornado |
|
|
Exemplo |
Comando de exemplo:
Saída de exemplo:
|
TVS.HPEXPIRE
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(1) |
|
Descrição do comando |
Define um tempo relativo de expiração, em milissegundos, para uma key específica em um índice vetorial. |
|
Parâmetros |
|
|
Valor retornado |
|
|
Exemplo |
Comando de exemplo:
Saída de exemplo:
|
TVS.HEXPIREAT
|
Categoria |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(1) |
|
Descrição do comando |
Define um tempo absoluto de expiração para uma key específica em um índice vetorial, com precisão de segundos. |
|
Opções |
|
|
Valor retornado |
|
|
Exemplo |
Exemplo de comando:
Exemplo de retorno:
|
TVS.HEXPIRE
|
Categoria |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(1) |
|
Descrição do comando |
Define um tempo relativo de expiração, em segundos, para um vetor específico (key) em um índice vetorial. |
|
Parâmetros |
|
|
Saída |
|
|
Exemplo |
Comando de exemplo:
Saída de exemplo:
|
TVS.HPTTL
|
Categoria |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(1) |
|
Descrição do comando |
Retorna o TTL, em milissegundos, de um registro de dados específico (key) em um índice vetorial. |
|
Parâmetros |
|
|
Valor retornado |
|
|
Exemplo |
Comando de exemplo:
Saída de exemplo:
|
TVS.HTTL
|
Categoria |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(1) |
|
Descrição do comando |
Obtém o TTL em segundos de um registro de dados específico (key) em um índice vetorial informado. |
|
Parâmetros |
|
|
Valor retornado |
|
|
Exemplo |
Exemplo de comando:
Exemplo de retorno:
|
TVS.HPEXPIRETIME
|
Categoria |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(1) |
|
Descrição do comando |
Retorna o tempo absoluto de expiração de um registro de dados específico (key) em um índice vetorial, como um timestamp Unix em milissegundos. |
|
Parâmetro |
|
|
Valor retornado |
|
|
Exemplo |
Comando de exemplo:
Saída de exemplo:
|
TVS.HEXPIRETIME
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(1) |
|
Descrição do comando |
Retorna o tempo absoluto de expiração de um registro de dados específico (key) em um índice vetorial como um timestamp Unix em segundos. |
|
Parâmetros |
|
|
Saída |
|
|
Exemplo |
Comando de exemplo:
Saída de exemplo:
|
TVS.KNNSEARCH
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
N representa o número de chaves no índice vetorial. |
|
Descrição do comando |
Executa uma consulta de vizinhos mais próximos para um vetor específico em um índice vetorial e retorna até topN resultados. |
|
Parâmetros |
|
|
Valor retornado |
|
|
Exemplos |
Execute os seguintes comandos antecipadamente:
Exemplo 1:
Resposta 1:
Exemplo 2:
Resposta 2:
|
TVS.KNNSEARCHFIELD
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
N representa o número de chaves no índice vetorial. |
|
Descrição do comando |
Busca os vizinhos mais próximos de um vetor especificado em um índice vetorial. A lógica de pesquisa é idêntica à do TVS.KNNSEARCH, mas este comando também retorna atributos de tag. |
|
Parâmetro |
|
|
Valor de retorno |
|
|
Exemplo |
Execute primeiro os seguintes comandos:
Comando de exemplo:
Saída de exemplo:
|
TVS.GETDISTANCE
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
N representa o número de chaves no índice vetorial. |
|
Descrição do comando |
Localiza os vizinhos mais próximos de um vetor de consulta a partir de uma lista específica de chaves dentro de um índice vetorial. |
|
Parâmetro |
|
|
Saída |
|
|
Exemplo |
Execute primeiro os seguintes comandos:
Comando de exemplo:
Saída de exemplo:
|
TVS.MKNNSEARCH
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
N representa o número de chaves no índice vetorial. |
|
Descrição do comando |
Realiza uma busca em lote pelos vizinhos mais próximos de múltiplos vetores em um índice vetorial especificado. |
|
Parâmetros |
|
|
Valor de retorno |
|
|
Exemplo |
Execute antecipadamente os seguintes comandos:
Comando de exemplo:
Saída de exemplo:
|
TVS.MINDEXKNNSEARCH
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
N representa o número de chaves no índice vetorial. |
|
Descrição do comando |
Busca os vizinhos mais próximos de um vetor especificado em vários índices vetoriais. |
|
Parâmetro |
|
|
Saída |
|
|
Exemplo |
Execute estes comandos primeiro:
Comando de exemplo:
Saída de exemplo:
|
TVS.MINDEXKNNSEARCHFIELD
|
Categoria |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
N representa o número de chaves no índice vetorial. |
|
Descrição do comando |
Executa uma consulta de vizinhos mais próximos para um vetor especificado em vários índices vetoriais e, opcionalmente, retorna tags. |
|
Parâmetros |
|
|
Saída |
|
|
Exemplo |
Execute os seguintes comandos primeiro:
Comando de exemplo:
Saída de exemplo:
|
TVS.MINDEXMKNNSEARCH
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
N representa o número de chaves no índice vetorial. |
|
Descrição do comando |
Busca os vizinhos mais próximos de múltiplos vetores em vários índices vetoriais. |
|
Parâmetros |
|
|
Valor de retorno |
|
|
Exemplo |
Execute estes comandos primeiro:
Comando de exemplo:
Saída de exemplo:
|