milvus-logo
LFAI
Home
  • Concepts

Bitset

Cette rubrique présente le mécanisme de bitset qui permet d'activer des fonctionnalités clés telles que le filtrage d'attributs et les opérations de suppression dans Milvus.

Vue d'ensemble

Un ensemble de bits est un ensemble de bits. Les bits sont des éléments qui n'ont que deux valeurs possibles, le plus souvent 0 et 1, ou des valeurs booléennes true et false. Dans Milvus, les ensembles de bits sont des tableaux de nombres de bits 0 et 1 qui peuvent être utilisés pour représenter certaines données de manière compacte et efficace, contrairement aux ints, aux floats ou aux chars. Un nombre de bits est 0 par défaut et n'est défini sur 1 que s'il répond à certaines exigences.

Les opérations sur les ensembles de bits sont effectuées en logique booléenne, selon laquelle une valeur de sortie est soit valide, soit invalide, également désignée par 1 et 0 respectivement. Par exemple, l'opérateur logique AND peut être utilisé pour comparer deux ensembles de bits sur la base des éléments situés dans les mêmes positions d'index et produit un nouvel ensemble de bits avec les résultats. Si deux éléments d'une position sont identiques, le nouvel ensemble binaire contiendra 1 à cette position et 0 s'ils sont différents.

Mise en œuvre

Le jeu de bits est un mécanisme simple mais puissant qui permet à Milvus d'effectuer le filtrage d'attributs, la suppression de données et l'interrogation avec Time Travel.

Filtrage des attributs

Comme les bitsets ne contiennent que deux valeurs possibles, ils sont parfaits pour stocker les résultats du filtrage d'attributs. Les données qui répondent aux exigences d'un filtre d'attribut donné sont marquées par 1.

Suppression de données

Les bitsets constituent un moyen compact de stocker des informations indiquant si une ligne d'un segment a été supprimée. Les entités supprimées sont marquées par 1 dans le jeu de bits correspondant, qui ne sera pas calculé lors d'une recherche ou d'une interrogation.

Exemples

Nous présentons ici trois exemples qui illustrent la manière dont les ensembles de bits sont utilisés dans Milvus, avec des références aux trois principales implémentations d'ensembles de bits discutées ci-dessus. Dans les trois cas, il y a un segment avec 8 entités, puis une série d'événements de langage de manipulation de données (DML) se déroule dans l'ordre indiqué ci-dessous.

  • Quatre des entités, dont les primary_keysont respectivement [1, 2, 3, 4], sont insérées lorsque l'horodatage ts est égal à 100.
  • Les quatre autres entités, dont les adresses primary_keysont [5, 6, 7, 8], sont insérées lorsque l'horodatage ts est égal à 200.
  • Les entités dont les primary_keysont [7, 8] sont supprimées lorsque l'horodatage ts est égal à 300.
  • Seules les entités dont les adresses primary_keysont [1, 3, 5, 7] satisfont aux conditions de filtrage des attributs.

Order of DML events Ordre des événements DML

Premier cas

Dans ce cas, un utilisateur définit time_travel comme étant 150, ce qui signifie qu'il effectue une requête sur des données qui satisfont à ts = 150. Le processus de génération de l'ensemble de bits est illustré par la figure 1.

Au cours de la phase de filtrage initiale, filter_bitset devrait être [1, 0, 1, 0, 1, 0, 1, 0], où les entités [1, 3, 5, 7] sont marquées comme 1 parce qu'elles sont des résultats de filtrage valides.

Cependant, les entités [4, 5, 6, 7] n'ont pas été insérées dans la base de données vectorielle lorsque ts est égal à 150. Par conséquent, ces quatre entités doivent être marquées comme 0, quelle que soit la condition de filtrage. Le résultat de l'ensemble de bits est maintenant [1, 0, 1, 0, 0, 0, 0, 0].

Comme indiqué dans Suppression des données, les entités marquées par 1 sont ignorées lors d'une recherche ou d'une interrogation. Le résultat de l'ensemble de bits doit maintenant être inversé afin d'être combiné avec le bitmap de suppression, ce qui nous donne [0, 1, 0, 1, 1, 1, 1, 1].

En ce qui concerne le jeu de bits de suppression del_bitset, la valeur initiale devrait être [0, 0, 0, 0, 0, 0, 1, 1]. Cependant, les entités 7 et 8 ne sont pas supprimées tant que ts n'a pas atteint la valeur 300. Par conséquent, lorsque ts vaut 150, les entités 7 et 8 sont encore valides. Par conséquent, la valeur de del_bitset après le voyage dans le temps est [0, 0, 0, 0, 0, 0, 0, 0].

Nous avons maintenant deux ensembles de bits après le voyage dans le temps et le filtrage des attributs : filter_bitset [0, 1, 0, 1, 1, 1, 1, 1] et del_bitset [0, 0, 0, 0, 0, 0, 0, 0] . Combinez ces deux ensembles de bits avec l'opérateur logique binaire OR. La valeur finale de result_bitset est [0, 1, 0, 1, 1, 1, 1, 1], ce qui signifie que seules les entités 1 et 3 seront calculées lors de l'étape suivante de recherche ou d'interrogation.

Figure 1. Search with Time Travel = 150. Figure 1. Recherche avec déplacement dans le temps = 150.

Deuxième cas

Dans ce cas, l'utilisateur fixe la valeur de time_travel à 250. Le processus de génération de l'ensemble de bits est illustré par la figure 2.

Comme dans le premier cas, la valeur initiale de filter_bitset est [1, 0, 1, 0, 1, 0, 1, 0].

Toutes les entités se trouvent dans la base de données vectorielle lorsque ts = 250. Par conséquent, le filter_bitset reste le même lorsque nous prenons en compte l'horodatage. Une fois de plus, nous devons inverser le résultat et obtenir [0, 1, 0, 1, 0, 1, 0, 1].

En ce qui concerne l'ensemble de bits de suppression del_bitset, la valeur initiale est [0, 0, 0, 0, 0, 0, 1, 1]. Cependant, les entités 7 et 8 n'ont pas été supprimées avant que ts ne soit 300. Par conséquent, lorsque ts est à 250, les entités 7 et 8 sont encore valides. Par conséquent, le jeu de bits del_bitset après le voyage dans le temps est [0, 0, 0, 0, 0, 0, 0, 0].

Nous avons maintenant deux ensembles de bits après le voyage dans le temps et le filtrage des attributs : filter_bitset [0, 1, 0, 1, 0, 1, 0, 1] et del_bitset [0, 0, 0, 0, 0, 0, 0, 0] . Combinez ces deux ensembles de bits avec l'opérateur logique binaire OR. L'ensemble de bits résultant est [0, 1, 0, 1, 0, 1, 0, 1]. En d'autres termes, seules les entités [1, 3, 5, 7] seront calculées lors de l'étape suivante de recherche ou d'interrogation.

Figure 2. Search with Time Travel = 250. Figure 2. Recherche avec déplacement dans le temps = 250.

Troisième cas

Dans ce cas, l'utilisateur fixe time_travel à 350. Le processus de génération de l'ensemble de bits est illustré par la figure 3.

Comme dans les cas précédents, la valeur initiale de filter_bitset est [0, 1, 0, 1, 0, 1, 0, 1].

Toutes les entités se trouvent dans la base de données vectorielle lorsque ts= 350. Par conséquent, le jeu de bits final inversé filter_bitset est [0, 1, 0, 1, 0, 1, 0, 1], comme dans le deuxième cas.

Quant à l'ensemble de bits de suppression del_bitset, les entités 7 et 8 ayant déjà été supprimées lors de ts = 350, le résultat de del_bitset est donc [0, 0, 0, 0, 0, 0, 1, 1].

Nous avons maintenant deux ensembles binaires après le voyage dans le temps et le filtrage des attributs : filter_bitset [0, 1, 0, 1, 0, 1, 0, 1] et del_bitset [0, 0, 0, 0, 0, 0, 1, 1] . Combinez ces deux ensembles de bits avec l'opérateur logique binaire OR. L'ultime result_bitset est [0, 1, 0, 1, 0, 1, 1, 1]. En d'autres termes, seules les entités [1, 3, 5] seront calculées lors de l'étape suivante de recherche ou d'interrogation.

Figure 3. Search with Time Travel = 350. Figure 3. Recherche avec voyage dans le temps = 350.

Et maintenant ?

Maintenant que vous savez comment fonctionnent les ensembles de bits dans Milvus, vous pouvez également :

Traduit parDeepL

Try Managed Milvus for Free

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

Get Started
Feedback

Cette page a-t - elle été utile ?