BITMAP
A indexação Bitmap é uma técnica de indexação eficiente concebida para melhorar o desempenho das consultas em campos escalares de baixa cardinalidade. A cardinalidade refere-se ao número de valores distintos num campo. Os campos com menos elementos distintos são considerados de baixa cardinalidade.
Este tipo de índice ajuda a reduzir o tempo de recuperação de consultas escalares, representando os valores do campo num formato binário compacto e efectuando operações bit a bit eficientes sobre eles. Em comparação com outros tipos de índices, os índices de mapa de bits têm normalmente uma maior eficiência de espaço e velocidades de consulta mais rápidas quando se trata de campos de baixa cardinalidade.
Descrição geral
O termo Bitmap combina duas palavras: Bit e Mapa. Um bit representa a unidade de dados mais pequena num computador, que só pode conter um valor de 0 ou 1. Um mapa, neste contexto, refere-se ao processo de transformação e organização de dados de acordo com o valor que deve ser atribuído a 0 e 1.
Um índice bitmap é constituído por dois componentes principais: bitmaps e chaves. As chaves representam os valores únicos no campo indexado. Para cada valor único, existe um mapa de bits correspondente. O comprimento destes mapas de bits é igual ao número de registos na coleção. Cada bit no mapa de bits corresponde a um registo na coleção. Se o valor do campo indexado num registo corresponder à chave, o bit correspondente é definido como 1; caso contrário, é definido como 0.
Considere uma coleção de documentos com os campos Categoria e Público. Queremos obter documentos que se enquadrem na categoria Técnico e que estejam abertos ao Público. Neste caso, as chaves para os nossos índices de bitmap são Tech e Public.
Indexação de bitmap
Como se mostra na figura, os índices de bitmap para Categoria e Público são.
Tech: [1, 0, 1, 0, 0], o que mostra que apenas o 1.º e o 3.º documentos pertencem à categoria Técnica.
Público: [1, 0, 0, 1, 0], o que mostra que apenas o 1º e o 4º documentos estão abertos ao público.
Para encontrar os documentos que correspondem a ambos os critérios, efectuamos uma operação AND (bit a bit) nestes dois bitmaps.
- Técnico E Público: [1, 0, 0, 0, 0]
O mapa de bits resultante [1, 0, 0, 0, 0, 0] indica que apenas o primeiro documento(ID 1) satisfaz ambos os critérios. Utilizando índices bitmap e operações bitwise eficientes, podemos restringir rapidamente o âmbito da pesquisa, eliminando a necessidade de pesquisar todo o conjunto de dados.
Criar um índice de mapa de bits
Para criar um índice bitmap no Milvus, utilize o método create_index()
e defina o parâmetro index_type
para "BITMAP"
.
from pymilvus import MilvusClient
index_params = client.create_index_params() # Prepare an empty IndexParams object, without having to specify any index parameters
index_params.add_index(
field_name="category", # Name of the scalar field to be indexed
index_type="BITMAP", # Type of index to be created
index_name="category_bitmap_index" # Name of the index to be created
)
client.create_index(
collection_name="my_collection", # Specify the collection name
index_params=index_params
)
Neste exemplo, criamos um índice de mapa de bits no campo category
da coleção my_collection
. O método add_index()
é utilizado para especificar o nome do campo, o tipo de índice e o nome do índice.
Uma vez criado o índice bitmap, pode utilizar o parâmetro filter
em operações de consulta para efetuar uma filtragem escalar com base no campo indexado. Isto permite-lhe restringir eficazmente os resultados da pesquisa utilizando o índice bitmap. Para obter mais informações, consulte Filtragem de metadados.
Limites
Os índices de bitmap são suportados apenas para campos escalares que não são chaves primárias.
O tipo de dados do campo deve ser um dos seguintes.
BOOL
,INT8
,INT16
,INT32
,INT64
,VARCHAR
ARRAY
(os elementos têm de ser um dos seguintes:BOOL
,INT8
,INT16
,INT32
,INT64
,VARCHAR
)
Os índices de mapa de bits não suportam os seguintes tipos de dados.
FLOAT
,DOUBLE
: Os tipos de vírgula flutuante não são compatíveis com a natureza binária dos índices de bitmap.JSON
: Os tipos de dados JSON têm uma estrutura complexa que não pode ser representada de forma eficiente utilizando índices de bitmap.
Os índices bitmap não são adequados para campos com elevada cardinalidade (ou seja, campos com um grande número de valores distintos).
Como orientação geral, os índices bitmap são mais eficazes quando a cardinalidade de um campo é inferior a 500.
Quando a cardinalidade aumenta para além deste limiar, as vantagens de desempenho dos índices bitmap diminuem e a sobrecarga de armazenamento torna-se significativa.
Para campos de cardinalidade elevada, considere a utilização de técnicas de indexação alternativas, como índices invertidos, dependendo do seu caso de utilização específico e dos requisitos de consulta.