O TairRoaring é uma estrutura de dados baseada no Tair para bitmaps do tipo Roaring. Este tópico descreve o TairRoaring e seus comandos suportados.
Introdução ao TairRoaring
Bitmap (também conhecido como bitset) é uma estrutura de dados comum que utiliza pouco armazenamento para otimizar consultas em grandes volumes de dados. Os bitmaps economizam mais espaço do que implementações baseadas em hash, mas não são adequados para armazenar dados esparsos. Para resolver essa questão, foram desenvolvidos os bitmaps compactados. Os Roaring bitmaps são um tipo de bitmap reconhecido pela indústria, sendo mais eficientes e equilibrados do que outros bitmaps compactados.
O TairRoaring otimiza os Roaring bitmaps das seguintes formas:
Consegue equilibrar desempenho e complexidade de espaço em diversos cenários por meio de índices de dois níveis e contêineres dinâmicos.
Utiliza técnicas de otimização como SIMD (Single Instruction, Multiple Data), vetorização e algoritmos popcount para aumentar a eficiência computacional, garantindo boa complexidade de tempo e espaço.
Aproveita o alto poder de processamento e a estabilidade oferecidos pelo Tair para atender a cenários de negócios exigentes.
Cenários típicos
O TairRoaring é ideal para setores como transmissões ao vivo, música e comércio eletrônico. Ele permite adicionar tags multidimensionais aos usuários, viabilizando casos de uso como recomendação personalizada e marketing de precisão.
Notas de versão
Alterações no TairRoaring V2:
TR.RANGEINTARRAY: O comando TR.RANGEINTARRAY do TairRoaring V1 foi renomeado para TR.RANGE no TairRoaring V2.
TR.SETRANGE: Na V1, a saída do comando era
OK. Na V2, a saída passou a ser a quantidade de bits definidos como 1. Os demais comportamentos do comando permanecem inalterados.
Em 13 de setembro de 2021, o TairRoaring V1 foi lançado para instâncias com versão secundária 1.7.20 ou superior.
-
Em 11 de março de 2022, o TairRoaring V2 foi disponibilizado para instâncias com versão secundária 1.7.27 ou superior.
Essa versão otimizou a implementação de alguns comandos e melhorou o desempenho geral. O TairRoaring V2 introduziu nove novos comandos, incluindo TR.SETBITS e TR.CLEARBITS, atualizou três comandos (dois deles ainda compatíveis com a V1) e renomeou um comando.
-
Em 20 de abril de 2022, o TairRoaring V2.2 foi lançado para instâncias com versão secundária 1.8.1 ou superior.
Esta versão adicionou os comandos TR.JACCARD, TR.CONTAINS e TR.RANK, além de ajustar as mensagens de erro retornadas quando uma chave não existe (o erro
ERR key not foundfoi removido).
Melhores práticas
Segmentação de público usando TairRoaring
Requisitos
A instância deve ser do tipo Tair otimizada para memória. Caso sua instância otimizada para memória seja compatível com Redis 5.0, a versão secundária precisa ser 1.7.7 ou superior.
Versões secundárias mais recentes oferecem mais recursos e maior estabilidade. Recomendamos atualizar sua instância para a versão secundária mais recente. Para mais informações, consulte Atualizar a versão secundária de uma instância. Se a instância for do tipo cluster ou com divisão de leitura/escrita, recomendamos também atualizar os nós proxy para a versão secundária mais recente, garantindo que todos os comandos funcionem conforme o esperado.
Observações de uso
As operações descritas aplicam-se a dados TairRoaring em uma instância Tair.
Lista de comandos
|
Tipo |
Comando |
Sintaxe |
Descrição |
Alteração de versão |
|
Operação de escrita |
|
Define o bit especificado em uma chave TairRoaring como 1 ou 0 e retorna o valor original do bit. O deslocamento começa em 0. |
- (N/A) |
|
|
|
Define o valor dos bits especificados em uma chave TairRoaring como 1. É possível especificar múltiplos valores de bit. |
Adicionado na V2 |
||
|
|
Define o valor dos bits especificados em uma chave TairRoaring como 0. Se o bit já tiver valor 0, nenhuma operação é executada. É possível especificar múltiplos valores de bit. |
Adicionado na V2 |
||
|
|
Define os bits dentro do intervalo especificado em uma chave TairRoaring como 1. O intervalo é fechado. |
Atualizado na V2. Após a atualização do comando na V2, a saída passou a ser a quantidade de bits definidos como 1. |
||
|
|
Insere um array de bits após a posição especificada em um Roaring Bitmap, sobrescrevendo os dados originais. O array de bits consiste em 0 e 1. |
Adicionado na V2 |
||
|
|
Inverte os valores dos bits dentro do intervalo especificado em uma chave TairRoaring, alterando de 0 para 1 ou de 1 para 0. O intervalo é fechado. Se a chave não existir, ela será criada como um conjunto vazio antes da execução da operação. |
Adicionado na V2 |
||
|
|
Define o valor dos bits especificados em uma chave TairRoaring como 1. É possível especificar múltiplos valores de bit. Nota
No TairRoaring V2, recomendamos usar TR.SETBITS em vez deste comando. |
- |
||
|
|
Cria uma chave TairRoaring com base no array de inteiros especificado. Se a chave já existir, este comando sobrescreve os dados nela contidos. Nota
No TairRoaring V2, recomendamos usar TR.SETBITS em vez deste comando. |
- |
||
|
|
Cria uma chave TairRoaring com base na string de array de bits especificada. A string consiste em 0 e 1. Se a chave já existir, este comando sobrescreve os dados nela contidos. Nota
No TairRoaring V2, recomendamos usar TR.APPENDBITARRAY em vez deste comando. |
- |
||
|
|
Executa operações de conjunto em Roaring Bitmaps e armazena o resultado em destkey. O comando suporta as operações AND, OR, XOR, NOT e DIFF. Nota
Este comando não está disponível para chaves distribuídas em diferentes slots em instâncias cluster. |
- |
||
|
|
Executa uma operação bitwise em múltiplas chaves TairRoaring. As operações bitwise AND, OR, XOR, NOT e DIFF são suportadas. Nota
Este comando não está disponível para chaves distribuídas em diferentes slots em instâncias cluster. |
Adicionado na V2 |
||
|
|
Otimiza o armazenamento de uma chave TairRoaring. Execute este comando se a chave for relativamente grande e usada principalmente para operações de leitura após sua criação. |
- |
||
|
Operação de leitura |
|
Recupera o valor do bit especificado de uma chave TairRoaring. |
- |
|
|
|
Recupera o valor dos bits especificados de uma chave TairRoaring. É possível especificar múltiplos bits para recuperação. |
Adicionado na V2 |
||
|
|
Conta o número de bits com valor 1 dentro do intervalo especificado em uma chave TairRoaring. O intervalo é fechado. |
Atualizado na V2 com compatibilidade retroativa. |
||
|
|
Recupera o deslocamento do bit que possui o número ordinal count. O bit pode ter valor 1 ou 0. O parâmetro count é opcional e tem valor padrão 1. O valor 1 indica o primeiro bit encontrado usando a contagem da esquerda para a direita. |
Atualizado na V2 com compatibilidade retroativa. |
||
|
|
Varre todos os bits localizados após um bit especificado em uma chave TairRoaring e retorna os deslocamentos correspondentes à contagem de bits varridos com valor 1. O cursor retornado corresponde ao deslocamento da chave. Nota
Este comando pode ou não varrer e retornar elementos adicionados ou excluídos. |
Adicionado na V2 |
||
|
|
Retorna os deslocamentos dos bits com valor 1 dentro do intervalo especificado em uma chave TairRoaring. O intervalo é fechado. |
Renomeado de TR.RANGEINTARRAY na V1 para TR.RANGE na V2. |
||
|
|
Recupera uma string composta pelos valores de bit 0 e 1 dentro do intervalo especificado em uma chave TairRoaring. O intervalo é fechado. |
Adicionado na V2 |
||
|
|
Recupera o deslocamento do primeiro bit com valor 1 em uma chave TairRoaring. Se nenhum bit tiver valor 1, retorna -1. |
- |
||
|
|
Recupera o deslocamento do último bit com valor 1 em um Roaring Bitmap. Se nenhum bit tiver valor 1, retorna -1. |
- |
||
|
|
Retorna informações estatísticas da chave TairRoaring especificada, incluindo o número de contêineres e o uso de memória. |
Adicionado na V2 |
||
|
|
Recupera o coeficiente de similaridade de Jaccard entre duas chaves TairRoaring. Quanto maior o coeficiente, maior a similaridade. Nota
Este comando não está disponível para chaves distribuídas em diferentes slots em instâncias cluster. |
Adicionado na V2.2 |
||
|
|
Verifica se key2 contém key1. Em caso afirmativo, key1 é subconjunto de key2 e o valor 1 é retornado. Caso contrário, key1 não é subconjunto de key2 e o valor 0 é retornado. Nota
Este comando não está disponível para chaves distribuídas em diferentes slots em instâncias cluster. |
Adicionado na V2.2 |
||
|
|
Recupera o número de bits com valor 1 no intervalo entre o primeiro bit e o bit especificado. O intervalo é fechado. |
Adicionado na V2.2 |
||
|
Operação de uso geral |
|
Exclui uma ou mais chaves TairRoaring. |
- |
-
A sintaxe dos comandos segue as convenções abaixo:
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 sem colchetes são obrigatórios.A|B: indica que os parâmetros separados por barras verticais (|) são mutuamente exclusivos. Apenas um deles deve ser especificado....: indica que o parâmetro anterior pode ser repetido várias vezes.
-
Neste tópico, as letras usadas nas expressões de complexidade de tempo têm os seguintes significados:
C representa o argc ou o intervalo de parâmetros.
M representa o número de bits definidos como 1 em uma estrutura de dados, como o número de nós em uma lista ou campos em um hash.
TR.SETBIT
|
Categoria |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(1) |
|
Descrição do comando |
Define o bit especificado em uma chave TairRoaring como 1 ou 0 e retorna o valor original do bit. O deslocamento começa em 0. |
|
Parâmetro |
|
|
Saída |
|
|
Exemplo |
Comando de exemplo:
Saída de exemplo:
|
TR.SETBITS
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(C) |
|
Descrição do comando |
Define o valor dos bits especificados em uma chave TairRoaring como 1. É possível especificar múltiplos valores de bit. |
|
Opções |
|
|
Saída |
|
|
Exemplo |
Comando de exemplo:
Saída de exemplo:
|
TR.CLEARBITS
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(C) |
|
Descrição do comando |
Define o valor dos bits especificados em uma chave TairRoaring como 0. Se o bit já tiver valor 0, nenhuma operação é executada. É possível especificar múltiplos valores de bit. |
|
Parâmetro |
|
|
Saída |
|
|
Exemplo |
Comando de exemplo:
Saída de exemplo:
|
TR.SETRANGE
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(C) |
|
Descrição do comando |
Define os bits dentro do intervalo especificado em uma chave TairRoaring como 1. O intervalo é fechado. Por exemplo, ao executar o comando |
|
Opções |
|
|
Saída |
|
|
Exemplo |
Comando de exemplo:
Saída de exemplo:
|
TR.APPENDBITARRAY
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(C) |
|
Descrição do comando |
Insere um array de bits em uma posição após o bit especificado em um Roaring Bitmap e substitui os dados originais. O array de bits consiste em 0 e 1. |
|
Parâmetro |
|
|
Saída |
|
|
Exemplo |
Execute previamente o comando Comando de exemplo:
Saída de exemplo:
Neste caso, a chave TairRoaring foo é "101101". |
TR.FLIPRANGE
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(C) |
|
Descrição do comando |
Inverte os valores dos bits dentro do intervalo especificado em uma chave TairRoaring de 0 para 1 ou de 1 para 0. O intervalo é fechado. Se a chave não existir, ela será criada como um conjunto de dados vazio e a operação será executada na chave. |
|
Parâmetro |
|
|
Saída |
|
|
Exemplo |
Execute previamente o comando Comando de exemplo:
Saída de exemplo:
Neste caso, a chave TairRoaring foo é "01001". |
TR.APPENDINTARRAY
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(C) |
|
Descrição do comando |
Define o valor do bit especificado em uma chave TairRoaring como 1. É possível especificar vários valores de bits. Nota
No TairRoaring V2, recomendamos o uso de TR.SETBITS em vez deste comando. |
|
Parâmetro |
|
|
Saída |
|
|
Exemplo |
Comando de exemplo:
Saída de exemplo:
|
TR.SETINTARRAY
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(C) |
|
Descrição do comando |
Cria uma chave TairRoaring com base no array de inteiros especificado. Se a chave já existir, este comando substituirá os dados nela contidos. Nota
No TairRoaring V2, recomendamos o uso de TR.SETBITS em vez deste comando. |
|
Parâmetro |
|
|
Saída |
|
|
Exemplo |
Comando de exemplo:
Saída de exemplo:
|
TR.SETBITARRAY
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(C) |
|
Descrição do comando |
Cria uma chave TairRoaring com base na string de array de bits especificada. A string de array de bits consiste em 0 e 1. Se a chave já existir, este comando substituirá os dados nela contidos. Nota
No TairRoaring V2, recomendamos o uso de TR.APPENDBITARRAY em vez deste comando. |
|
Parâmetro |
|
|
Saída |
|
|
Exemplo |
Comando de exemplo:
Saída de exemplo:
|
TR.BITOP
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(C * M) |
|
Descrição do comando |
Executa operações de conjunto em Roaring Bitmaps e armazena o resultado em destkey. O comando suporta as operações AND, OR, XOR, NOT e DIFF. Nota
Este comando não está disponível para chaves que residem em slots diferentes em instâncias cluster. |
|
Opções |
|
|
Saída |
|
|
Exemplo |
Comando de exemplo:
Saída de exemplo:
|
TR.BITOPCARD
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(C * M) |
|
Descrição do comando |
Executa uma operação bit a bit em várias chaves TairRoaring. As operações bit a bit AND, OR, XOR, NOT e DIFF são suportadas. Nota
Este comando não está disponível para chaves que residem em slots diferentes em instâncias cluster. |
|
Opções |
|
|
Saída |
|
|
Exemplo |
Comando de exemplo:
Saída de exemplo:
|
TR.OPTIMIZE
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(M) |
|
Descrição do comando |
Otimiza o armazenamento de uma chave TairRoaring. Execute este comando se a chave for relativamente grande e utilizada principalmente para operações de leitura após sua criação. |
|
Opções |
|
|
Saída |
|
|
Exemplo |
Comando de exemplo:
Saída de exemplo:
|
TR.GETBIT
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(1) |
|
Descrição do comando |
Recupera o valor do bit especificado de uma chave TairRoaring. |
|
Opções |
|
|
Saída |
|
|
Exemplo |
Comando de exemplo:
Saída de exemplo:
|
TR.GETBITS
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(C) |
|
Descrição do comando |
Recupera o valor dos bits especificados de uma chave TairRoaring. É possível especificar vários bits para recuperação de valor. |
|
Parâmetro |
|
|
Saída |
|
|
Exemplo |
Comando de exemplo:
Saída de exemplo:
|
TR.BITCOUNT
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(M) |
|
Descrição do comando |
Conta o número de bits com valor 1 dentro do intervalo especificado em uma chave TairRoaring. O intervalo é fechado. |
|
Parâmetro |
|
|
Saída |
|
|
Exemplo |
Comando de exemplo:
Saída de exemplo:
|
TR.BITPOS
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(C) |
|
Descrição do comando |
Recupera o deslocamento do bit que possui um número ordinal igual a count. Um bit pode ter valor 1 ou 0. O parâmetro count é opcional e tem valor padrão de 1. O valor 1 indica o primeiro bit recuperado usando a abordagem de contagem da esquerda para a direita. |
|
Parâmetro |
|
|
Saída |
|
|
Exemplo |
Comando de exemplo:
Saída de exemplo:
|
TR.SCAN
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(C) |
|
Descrição do comando |
Varre todos os bits localizados após um bit especificado em uma chave TairRoaring e retorna os deslocamentos correspondentes a uma contagem dos bits varridos que possuem valor 1. O cursor retornado é o deslocamento correspondente à chave. Nota
Este comando pode ou não varrer e retornar elementos adicionados ou excluídos. |
|
Parâmetro |
|
|
Saída |
|
|
Exemplo |
Comando de exemplo:
Saída de exemplo:
|
TR.RANGE
|
Categoria |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(C) |
|
Descrição do comando |
Retorna os deslocamentos dos bits com valor 1 dentro do intervalo especificado em uma chave TairRoaring. O intervalo é fechado. |
|
Parâmetro |
|
|
Saída |
|
|
Exemplo |
Execute o comando Comando de exemplo:
Saída de exemplo:
|
TR.RANGEBITARRAY
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(C) |
|
Descrição do comando |
Recupera uma string composta por valores de bit 0 e 1 dentro do intervalo especificado em uma chave TairRoaring. O intervalo é fechado. |
|
Parâmetro |
|
|
Saída |
|
|
Exemplo |
Execute o comando Comando de exemplo:
Saída de exemplo:
|
TR.MIN
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(1) |
|
Descrição do comando |
Recupera o deslocamento do primeiro bit com valor 1 em uma chave TairRoaring. Se nenhum bit tiver valor 1, um valor de -1 será retornado. |
|
Parâmetro |
|
|
Saída |
|
|
Exemplo |
Comando de exemplo:
Saída de exemplo:
|
TR.MAX
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(1) |
|
Descrição do comando |
Recupera o deslocamento do último bit com valor 1 em um Roaring Bitmap. Se nenhum bit tiver valor 1, -1 será retornado. |
|
Opções |
|
|
Saída |
|
|
Exemplo |
Comando de exemplo:
Saída de exemplo:
|
TR.STAT
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(M) |
|
Descrição do comando |
Retorna as informações estatísticas da chave TairRoaring especificada. Essas informações incluem o número de containers e o uso de memória. |
|
Parâmetro |
|
|
Saída |
|
|
Exemplo |
Comando de exemplo:
Saída de exemplo:
|
TR.JACCARD
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(M) |
|
Descrição do comando |
Obtém o coeficiente de similaridade de Jaccard de duas chaves TairRoaring. Quanto maior o coeficiente, maior a similaridade. Nota
Este comando não está disponível para chaves que residem em slots diferentes em instâncias de cluster. |
|
Parâmetro |
|
|
Saída |
|
|
Exemplo |
Comando de exemplo:
Saída de exemplo:
|
TR.CONTAINS
|
Categoria |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(M) |
|
Descrição do comando |
Verifica se key2 contém key1. Em caso afirmativo, key1 é um subconjunto de key2 e o valor 1 é retornado. Caso contrário, key1 não é um subconjunto de key2 e o valor 0 é retornado. Nota
Este comando não está disponível para chaves que residem em slots diferentes em instâncias de cluster. |
|
Opções |
|
|
Saída |
|
|
Exemplo |
Execute previamente os comandos Comando de exemplo:
Saída de exemplo:
|
TR.RANK
|
Item |
Descrição |
|
Sintaxe |
|
|
Complexidade de tempo |
O(M) |
|
Descrição do comando |
Obtém o número de bits com valor 1 no intervalo do primeiro bit até o bit especificado. O intervalo é fechado. |
|
Opções |
|
|
Saída |
|
|
Exemplo |
Execute previamente o comando Comando de exemplo:
Saída de exemplo:
|
Mensagens de erro
|
Mensagem de erro |
Descrição |
|
|
Tipo de objeto incorreto: A chave não é um objeto TairRoaring. |
|
|
Tipo de parâmetro incorreto: Os valores dos parâmetros não podem ser convertidos em inteiros de 32 bits. |
|
|
Parâmetros inválidos:
|
|
|
A chave TairRoaring já existe e seus dados não podem ser sobrescritos. Nota
Este erro foi corrigido no TairRoaring V2.2. |
|
|
O objeto Roaring Bitmap não existe. Esta operação não é suportada. Nota
Este erro foi corrigido no TairRoaring V2.2. |