O TairVector é uma estrutura de dados estendida do Tair para armazenamento e recuperação de vetores em tempo real com alta performance.
TairVector
O TairVector utiliza uma estrutura de dados 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 performance 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 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 para obter 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 cloud pronto para uso, com arquitetura simples e eficiente, sem dependências complexas de componentes.
Suporta busca híbrida, que combina busca vetorial com busca de texto completo.
Permite criar um índice invertido em escalares, como atributos de tag. Isso possibilita que uma busca de k-vizinhos mais próximos (KNN) filtre primeiro por escalares e depois realize a busca vetorial nos resultados filtrados.
Notas de versão
13 de outubro de 2022: O TairVector foi lançado 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 automática de lixo 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 de vizinhos mais próximos vetoriais em listas de chaves especificadas com o comando TVS.GETDISTANCE. Esta versão também introduziu a busca de texto completo ao atualizar comandos como TVS.CREATEINDEX e TVS.KNNSEARCH, o que habilita 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 de 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 uma instância DRAM-based compatível com Redis 6.0 ou superior.
Uma instância baseada em DRAM executando Redis 5.0 não pode ser atualizada para Redis 6.0. Para usar Redis 6.0, você deve criar uma nova instância baseada em DRAM.
Observações
Essas operações aplicam-se a 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 semi-synchronous replication mode.
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 í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 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. |
||
|
|
Realiza uma busca em lote de 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. |
||
|
|
Executa 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 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 especificados.A|B: indica que os parâmetros separados por barras verticais (|) são mutuamente exclusivos. Apenas um dos parâmetros pode ser especificado....: indica que o parâmetro anterior a este símbolo pode ser especificado repetidamente.
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:
Comando de exemplo para um índice HNSW:
Saída de exemplo:
|
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 |
Comando de exemplo:
Saída de exemplo:
Comando de exemplo com um padrão:
Saída de exemplo:
|
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 de dados com a key especificada, o registro existente será sobrescrito. |
|
Parâmetros |
|
|
Valor de retorno |
|
|
Exemplo |
Comando de exemplo:
Saída de exemplo:
|
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 |
Comando de exemplo:
Saída de exemplo:
|
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 |
Comando de exemplo:
Saída de exemplo:
|
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 |
Comando de exemplo:
Saída de exemplo:
|
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 a condições especificadas dentro de um determinado índice vetorial. |
|
Parâmetros |
|
|
Valor de retorno |
|
|
Exemplo |
Comando de exemplo:
Valor de retorno de exemplo:
|
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 |
Comando de exemplo:
Saída de exemplo:
|
TVS.HINCRBYFLOAT
|
Categoria |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(1) |
|
Descrição do comando |
Incrementa o valor de Caso a |
|
Parâmetros |
|
|
Valor de retorno |
|
|
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 de retorno |
|
|
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 de retorno |
|
|
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 de retorno |
|
|
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 de retorno |
|
|
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 especificado. |
|
Parâmetros |
|
|
Valor de retorno |
|
|
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 de retorno |
|
|
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 especificado em um índice vetorial e retorna até topN resultados. |
|
Parâmetros |
|
|
Valor de retorno |
|
|
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 |
Pesquisa os vizinhos mais próximos de um vetor especificado em um índice vetorial. A lógica de busca é 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 |
Pesquisa em vários índices vetoriais os vizinhos mais próximos de múltiplos vetores. |
|
Parâmetros |
|
|
Valor de retorno |
|
|
Exemplo |
Execute estes comandos primeiro:
Comando de exemplo:
Saída de exemplo:
|