BITMAP
L'indexation bitmap est une technique d'indexation efficace conçue pour améliorer les performances des requêtes sur des champs scalaires à faible cardinalité. La cardinalité fait référence au nombre de valeurs distinctes dans un champ. Les champs comportant moins d'éléments distincts sont considérés comme étant de faible cardinalité.
Ce type d'index permet de réduire le temps d'extraction des requêtes scalaires en représentant les valeurs des champs dans un format binaire compact et en effectuant des opérations bit à bit efficaces sur ces valeurs. Par rapport à d'autres types d'index, les index bitmap ont généralement une meilleure efficacité spatiale et des vitesses d'interrogation plus rapides lorsqu'ils traitent des champs à faible cardinalité.
Vue d'ensemble
Le terme "bitmap" combine deux mots : Bit et Map. Un bit représente la plus petite unité de données dans un ordinateur, qui ne peut contenir que la valeur 0 ou 1. Une carte, dans ce contexte, fait référence au processus de transformation et d'organisation des données en fonction de la valeur à attribuer à 0 et à 1.
Un index bitmap se compose de deux éléments principaux : les bitmaps et les clés. Les clés représentent les valeurs uniques du champ indexé. À chaque valeur unique correspond une image binaire. La longueur de ces images est égale au nombre d'enregistrements de la collection. Chaque bit dans le bitmap correspond à un enregistrement de la collection. Si la valeur du champ indexé d'un enregistrement correspond à la clé, le bit correspondant est mis à 1; sinon, il est mis à 0.
Considérons une collection de documents avec des champs Catégorie et Public. Nous voulons retrouver les documents qui appartiennent à la catégorie Tech et qui sont ouverts au public. Dans ce cas, les clés de nos index bitmap sont Tech et Public.
Indexation bitmap
Comme le montre la figure, les index bitmap pour Catégorie et Public sont les suivants.
Tech: [1, 0, 1, 0, 0], ce qui montre que seuls les 1er et 3e documents appartiennent à la catégorie Tech.
Public: [1, 0, 0, 1, 0], ce qui montre que seuls les 1er et 4e documents sont ouverts au public.
Pour trouver les documents qui correspondent aux deux critères, nous effectuons une opération ET bit à bit sur ces deux images.
- Tech AND Public: [1, 0, 0, 0, 0]
Le bitmap résultant [1, 0, 0, 0, 0] indique que seul le premier document(ID 1) répond aux deux critères. L'utilisation d'index bitmap et d'opérations bitwise efficaces permet de restreindre rapidement le champ de la recherche et d'éviter d'avoir à parcourir l'ensemble des données.
Créer un index bitmap
Pour créer un index bitmap dans Milvus, utilisez la méthode create_index()
et définissez le paramètre index_type
sur "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
)
Dans cet exemple, nous créons un index bitmap sur le champ category
de la collection my_collection
. La méthode add_index()
est utilisée pour spécifier le nom du champ, le type d'index et le nom de l'index.
Une fois l'index bitmap créé, vous pouvez utiliser le paramètre filter
dans les opérations de requête pour effectuer un filtrage scalaire basé sur le champ indexé. Cela vous permet de réduire efficacement les résultats de la recherche à l'aide de l'index bitmap. Pour plus d'informations, voir Filtrage des métadonnées.
Limites
Les index bitmap ne sont pris en charge que pour les champs scalaires qui ne sont pas des clés primaires.
Le type de données du champ doit être l'un des suivants.
BOOL
,INT8
,INT16
,INT32
,INT64
,VARCHAR
ARRAY
(les éléments doivent être l'un des suivants :BOOL
,INT8
,INT16
,INT32
,INT64
,VARCHAR
)
Les index bitmap ne prennent pas en charge les types de données suivants.
FLOAT
DOUBLE
: Les types de données à virgule flottante ne sont pas compatibles avec la nature binaire des index bitmap.JSON
: Les types de données JSON ont une structure complexe qui ne peut pas être représentée efficacement à l'aide d'index bitmap.
Les index bitmap ne conviennent pas aux champs à forte cardinalité (c'est-à-dire aux champs comportant un grand nombre de valeurs distinctes).
En règle générale, les index bitmap sont plus efficaces lorsque la cardinalité d'un champ est inférieure à 500.
Lorsque la cardinalité dépasse ce seuil, les avantages des index bitmap en termes de performances diminuent et la surcharge de stockage devient importante.
Pour les champs de cardinalité élevée, envisagez d'utiliser d'autres techniques d'indexation, telles que les index inversés, en fonction de votre cas d'utilisation spécifique et des exigences de la requête.