milvus-logo
LFAI
Home
  • Conceptos

Conjunto de bits

Este tema presenta el mecanismo bitset que ayuda a habilitar funcionalidades clave como el filtrado de atributos y las operaciones de borrado en Milvus.

Visión general

Un conjunto de bits es un conjunto de bits. Los bits son elementos con sólo dos valores posibles, más típicamente 0 y 1, o valores booleanos true y false. En Milvus, los conjuntos de bits son matrices de números de bits 0 y 1 que pueden usarse para representar ciertos datos de forma compacta y eficiente en lugar de en ints, floats o chars. Un número de bits es 0 por defecto y sólo se establece en 1 si cumple ciertos requisitos.

Las operaciones sobre conjuntos de bits se realizan con lógica booleana, según la cual un valor de salida es válido o inválido, también denotados por 1 y 0 respectivamente. Por ejemplo, el operador lógico AND puede utilizarse para comparar dos conjuntos de bits basados en elementos en las mismas posiciones de índice y produce un nuevo conjunto de bits con los resultados. Si dos elementos en una posición son iguales, en el nuevo conjunto de bits se escribirá 1 en esa posición; 0 si son diferentes.

Implementación

Bitset es un mecanismo sencillo pero potente que ayuda a Milvus a realizar el filtrado de atributos, la eliminación de datos y la consulta con Time Travel.

Filtrado de atributos

Como los bitsets contienen sólo dos valores posibles, son perfectos para almacenar los resultados del filtrado de atributos. Los datos que cumplen los requisitos de un determinado filtro de atributos se marcan con 1.

Eliminación de datos

Los conjuntos de bits son una forma compacta de almacenar información sobre si se ha eliminado una fila de un segmento. Las entidades eliminadas se marcan con 1 en el bitset correspondiente, que no se computará durante una búsqueda o consulta.

Ejemplos

Aquí presentamos tres ejemplos que ilustran cómo se utilizan los conjuntos de bits en Milvus, con referencias a las tres principales implementaciones de conjuntos de bits comentadas anteriormente. En los tres casos, hay un segmento con 8 entidades y a continuación tiene lugar una serie de eventos del lenguaje de manipulación de datos (DML) en el orden que se muestra a continuación.

  • Cuatro de las entidades, cuyas primary_keys son [1, 2, 3, 4] respectivamente, se insertan cuando la marca de tiempo ts es igual a 100.
  • Las cuatro entidades restantes, cuyas primary_keys son [5, 6, 7, 8], se insertan cuando la marca de tiempo ts es igual a 200.
  • Las entidades cuyo primary_keys es [7, 8] se eliminan cuando la marca de tiempo ts es igual a 300.
  • Sólo las entidades cuyo primary_keys es [1, 3, 5, 7] cumplen las condiciones del filtrado de atributos.

Order of DML events Orden de los eventos DML

Caso 1

En este caso, un usuario establece time_travel como 150, lo que significa que el usuario realiza una consulta sobre datos que satisfacen ts = 150. El proceso de generación del conjunto de bits se ilustra en la Figura 1.

Durante la etapa de filtrado inicial, el filter_bitset debe ser [1, 0, 1, 0, 1, 0, 1, 0], donde las entidades [1, 3, 5, 7] se marcan como 1 porque son resultados de filtrado válidos.

Sin embargo, las entidades [4, 5, 6, 7] no se insertaron en la base de datos vectorial cuando ts es igual a 150. Por lo tanto, estas cuatro entidades deberían marcarse como 0 independientemente de la condición de filtrado. Ahora el resultado del conjunto de bits debería ser [1, 0, 1, 0, 0, 0, 0, 0].

Como se ha comentado en Eliminación de datos, las entidades marcadas con 1 se ignoran durante una búsqueda o consulta. Ahora hay que invertir el resultado del conjunto de bits para combinarlo con el mapa de bits de borrado, lo que nos da [0, 1, 0, 1, 1, 1, 1, 1].

En cuanto al conjunto de bits de borrado del_bitset, el valor inicial debería ser [0, 0, 0, 0, 0, 0, 1, 1]. Sin embargo, las entidades 7 y 8 no se borran hasta que ts es 300. Por lo tanto, cuando ts es 150, las entidades 7 y 8 siguen siendo válidas. Como resultado, el valor de del_bitset después del Viaje en el Tiempo es [0, 0, 0, 0, 0, 0, 0, 0].

Ahora tenemos dos conjuntos de bits después del Viaje en el Tiempo y el filtrado de atributos: filter_bitset [0, 1, 0, 1, 1, 1, 1, 1] y del_bitset [0, 0, 0, 0, 0, 0, 0, 0] . Combina estos dos conjuntos de bits con el operador lógico binario OR. El valor final de result_bitset es [0, 1, 0, 1, 1, 1, 1, 1], lo que significa que sólo se computarán las entidades 1 y 3 en la siguiente etapa de búsqueda o consulta.

Figure 1. Search with Time Travel = 150. Figura 1. Búsqueda con Time Travel = 150.

Caso 2

En este caso, el usuario establece time_travel como 250. El proceso de generación del conjunto de bits se ilustra en la Figura 2.

Como en el caso uno, el filter_bitset inicial es [1, 0, 1, 0, 1, 0, 1, 0].

Todas las entidades están en la base de datos vectorial cuando ts = 250. Por lo tanto, filter_bitset sigue siendo el mismo cuando introducimos la marca de tiempo. De nuevo, tenemos que voltear el resultado y obtener [0, 1, 0, 1, 0, 1, 0, 1].

En cuanto al conjunto de bits de borrado del_bitset, el valor inicial es [0, 0, 0, 0, 0, 0, 1, 1]. Sin embargo, las entidades 7 y 8 no se borraron hasta que ts es 300. Por lo tanto, cuando ts es 250, las entidades 7 y 8 siguen siendo válidas. Como resultado, el del_bitset después del Viaje en el Tiempo es [0, 0, 0, 0, 0, 0, 0, 0].

Ahora tenemos dos conjuntos de bits después del Viaje en el Tiempo y el filtrado de atributos: filter_bitset [0, 1, 0, 1, 0, 1, 0, 1] y del_bitset [0, 0, 0, 0, 0, 0, 0, 0] . Combina estos dos conjuntos de bits con el operador lógico binario OR. El conjunto_de_bits resultante es [0, 1, 0, 1, 0, 1, 0, 1]. Es decir, sólo las entidades [1, 3, 5, 7] se computarán en la siguiente etapa de búsqueda o consulta.

Figure 2. Search with Time Travel = 250. Figura 2. Búsqueda con Time Travel = 250.

Caso 3

En este caso, el usuario establece time_travel como 350. El proceso de generación del conjunto de bits se ilustra en la Figura 3.

Como en los casos anteriores, el filter_bitset inicial es [0, 1, 0, 1, 0, 1, 0, 1].

Todas las entidades se encuentran en la base de datos vectorial cuando ts= 350. Por lo tanto, el filter_bitset final volteado es [0, 1, 0, 1, 0, 1, 0, 1], igual que en el caso dos.

En cuanto al conjunto de bits de borrado del_bitset, puesto que las entidades 7 y 8 ya han sido borradas cuando ts = 350, por lo tanto, el resultado de del_bitset es [0, 0, 0, 0, 0, 0, 1, 1].

Ahora tenemos dos conjuntos de bits después del viaje en el tiempo y el filtrado de atributos: filter_bitset [0, 1, 0, 1, 0, 1, 0, 1] y del_bitset [0, 0, 0, 0, 0, 0, 1, 1] . Combina estos dos conjuntos de bits con el operador lógico binario OR. El último result_bitset es [0, 1, 0, 1, 0, 1, 1, 1]. Es decir, en la siguiente etapa de búsqueda o consulta sólo se computarán las entidades [1, 3, 5].

Figure 3. Search with Time Travel = 350. Figura 3. Búsqueda con Time Travel = 350.

Lo que sigue

Ahora que ya sabe cómo funcionan los conjuntos de bits en Milvus, puede que también quiera

Traducido porDeepLogo

Try Managed Milvus for Free

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

Get Started
Feedback

¿Fue útil esta página?