milvus-logo
LFAI
Home
  • Guia do utilizador

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.

Bitmap indexing 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.

Traduzido porDeepLogo

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

Esta página foi útil?