🚀 Experimente o Zilliz Cloud, o Milvus totalmente gerenciado, gratuitamente—experimente um desempenho 10x mais rápido! Experimente Agora>>

milvus-logo
LFAI
  • Home
  • Blog
  • Como o Bitset permite a versatilidade da pesquisa de similaridade de vectores

Como o Bitset permite a versatilidade da pesquisa de similaridade de vectores

  • Engineering
February 14, 2022
Yudong Cai

Bitset Cover Image Imagem de capa do Bitset

Por Yudong Cai e Angela Ni.

Várias novas caraterísticas essenciais de uma base de dados vetorial são fornecidas juntamente com o lançamento do Milvus 2.0. Entre as novas funcionalidades, a viagem no tempo, a filtragem de atributos e as operações de eliminação estão correlacionadas, uma vez que estas três funcionalidades são obtidas através de um mecanismo comum - o conjunto de bits.

Assim, este artigo tem como objetivo clarificar o conceito de bitset no Milvus e explicar como funciona para suportar operações de eliminação, Time Travel e filtragem de atributos com três exemplos.

O que é um conjunto de bits?

Um conjunto de bits é uma matriz de números de bits ("0" e "1") que pode ser utilizada para representar determinadas informações de dados. Com os conjuntos de bits, é possível armazenar determinados tipos de dados de forma compacta e eficiente, em vez de os armazenar em Ints, floats ou chars. Os conjuntos de bits funcionam com base na lógica booleana, de acordo com a qual o valor de uma saída é válido ou inválido, normalmente indicado por "1" e "0", respetivamente. "1" significa válido e "0" significa inválido. Como os conjuntos de bits são altamente eficientes e podem economizar armazenamento, eles também podem ser usados para obter muitos recursos, como filtragem de atributos, operações de exclusão, viagem no tempo e muito mais.

A partir da versão 0.7.0, o conceito de bitset foi introduzido no Milvus para permitir a função de eliminação. Mais especificamente, o bitset é utilizado para marcar se cada linha do segmento é eliminada. As entidades eliminadas são marcadas com "1" no conjunto de bits correspondente e, como resultado, as entidades eliminadas não serão computadas durante uma pesquisa ou consulta.

Na versão 2.0 do Milvus, a aplicação do conjunto de bits é alargada para permitir mais funcionalidades, como a filtragem de atributos e a viagem no tempo. O princípio geral de um conjunto de bits permanece o mesmo. Ou seja, se uma entidade estiver marcada com "1" no conjunto de bits correspondente, a entidade será ignorada durante uma pesquisa ou consulta. Os conjuntos de bits são utilizados para ativar 3 funcionalidades no Milvus:

  • Filtragem de atributos
  • Eliminação de dados
  • Consulta com viagem no tempo

Como é que o bitset funciona em Milvus?

Os exemplos abaixo são usados para ilustrar como o bitset funciona no Milvus.

Pré-requisitos

Suponha que há um segmento com oito entidades e uma série de eventos de linguagem de manipulação de dados (DML) acontece na ordem mostrada na figura abaixo.

  • Quatro das entidades, cujos primary_keys são [1, 2, 3, 4] respetivamente, são inseridas quando o timestamp ts é igual a 100.
  • As restantes quatro entidades, cujos primary_keys são [5, 6, 7, 8], são inseridas quando o carimbo de data/hora ts é igual a 200.
  • As entidades cujo primary_keys é [7, 8] são eliminadas quando o carimbo de data/hora ts é igual a 300.
  • Apenas as entidades, cujos primary_keys são [1, 3, 5, 7], satisfazem as condições de filtragem de atributos.

DML events Eventos DML

Caso um

Suponha-se que o valor que um utilizador define para time_travel é 150. Por outras palavras, o utilizador faz uma consulta dos dados armazenados no Milvus quando ts = 150. O processo de geração do conjunto de bits é ilustrado na Figura 1.

Durante a fase inicial de filtragem, o resultado do filter_bitset deveria ser [1, 0, 1, 0, 1, 0, 1, 1, 0], uma vez que as entidades [1, 3, 5, 7] são resultados válidos da filtragem e estão marcadas como "1" no conjunto de bits. No entanto, as entidades [4, 5, 6, 7] nem sequer foram inseridas na base de dados vetorial quando ts é igual a 150. Por conseguinte, estas quatro entidades devem ser marcadas como "0", independentemente da condição de filtragem. Agora, o resultado do conjunto de bits deve ser [1, 0, 1, 0, 0, 0, 0, 0, 0]. Como em Milvus o princípio geral da computação em bitset é que as entidades marcadas com "1" no bitset são ignoradas durante uma pesquisa ou consulta, o resultado do bitset após a Viagem no Tempo e a filtragem de atributos tem de ser invertido para ser combinado com o mapa de bits de eliminação. O resultado invertido de filter_bitset deve ser [0, 1, 0, 1, 1, 1, 1, 1, 1, 1].

Quanto ao conjunto de bits de eliminação del_bitset, o valor inicial deve ser [0, 0, 0, 0, 0, 0, 0, 1, 1]. No entanto, as entidades 7 e 8 não são eliminadas até que ts seja 300. Portanto, quando ts é 150, as entidades 7 e 8 ainda são válidas. Como resultado, o valor de del_bitset após a Viagem no Tempo deve ser [0, 0, 0, 0, 0, 0, 0, 0, 0, 0].

Agora temos dois conjuntos de bits após a Viagem no Tempo e a filtragem de atributos: filter_bitset [0, 1, 0, 1, 1, 1, 1, 1, 1] e del_bitset [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]. Combine estes dois conjuntos de bits com o operador lógico binário "OR". O valor final de result_bitset é [0, 1, 0, 1, 1, 1, 1, 1, 1]. Ou seja, apenas as entidades 1 e 3 serão computadas na fase de pesquisa ou consulta seguinte.

Figure 1 Figura 1

Caso dois

Suponha que o valor que o utilizador define para time_travel é 250. Por outras palavras, o utilizador efectua uma consulta dos dados armazenados no Milvus quando ts = 250. O processo de geração do conjunto de bits é ilustrado na Figura 2.

Tal como no caso um, o resultado filter_bitset da fase inicial de filtragem de atributos deve ser [1, 0, 1, 0, 1, 0, 1, 1, 0].

Todas as entidades [1, 2, 3, 4, 5, 6, 7, 8] são inseridas na base de dados vetorial quando ts= 250. Portanto, o resultado anterior de filter_bitset permanece o mesmo. Mais uma vez, temos de inverter o resultado de filter_bitset, e obteremos [0, 1, 0, 1, 0, 1, 0, 1, 0, 1].

Quanto ao conjunto de bits de eliminação del_bitset, o valor inicial deveria ser [0, 0, 0, 0, 0, 0, 0, 1, 1]. No entanto, as entidades 7 e 8 não foram eliminadas até ts ser 300. Portanto, quando ts é 250, as entidades 7 e 8 ainda são válidas. Como resultado, o valor de del_bitset após a Viagem no Tempo deve ser [0, 0, 0, 0, 0, 0, 0, 0, 0, 0].

Agora temos dois conjuntos de bits após a Viagem no Tempo e a filtragem de atributos: filter_bitset [0, 1, 0, 1, 0, 1, 0, 0, 1] e del_bitset [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]. Combine estes dois conjuntos de bits com o operador lógico binário "OR". O valor final de result_bitset é [0, 1, 0, 1, 0, 1, 0, 1, 0, 1]. Ou seja, apenas as entidades [1, 3, 5, 7] serão computadas na fase de pesquisa ou consulta seguinte.

Figure 2 Figura 2

Caso três

Suponha que o valor que o utilizador define para time_travel é 350. Por outras palavras, o utilizador efectua uma consulta dos dados armazenados no Milvus quando ts = 350. O processo de geração do conjunto de bits é ilustrado na Figura 3.

Tal como nos casos um e dois, o resultado filter_bitset da fase inicial de filtragem de atributos é [0, 1, 0, 1, 0, 1, 0, 0, 1].

Todas as entidades [1, 2, 3, 4, 5, 6, 7, 8] são inseridas na base de dados vetorial quando ts= 350. Por conseguinte, o resultado final invertido do filter_bitset é [0, 1, 0, 1, 0, 1, 0, 1, 0, 1], o mesmo que no caso dois.

Quanto ao conjunto de bits de eliminação del_bitset, como as entidades 7 e 8 já foram eliminadas quando ts=350, o resultado de del_bitset deve ser [0, 0, 0, 0, 0, 0, 0, 1, 1].

Agora temos dois conjuntos de bits após a Viagem no Tempo e a filtragem de atributos: filter_bitset [0, 1, 0, 1, 0, 1, 0, 1] e del_bitset [0, 0, 0, 0, 0, 0, 0, 1, 1]. Combine estes dois conjuntos de bits com o operador lógico binário "OR". O valor final de result_bitset é [0, 1, 0, 1, 0, 1, 1, 1, 1]. Ou seja, apenas as entidades [1, 3, 5] serão computadas na fase de pesquisa ou consulta seguinte.

Figure 3 Figura 3

O que é que se segue?

No blogue da série de novas funcionalidades 2.0, pretendemos explicar a conceção das novas funcionalidades. Leia mais nesta série de blogues!

Try Managed Milvus for Free

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

Get Started

Like the article? Spread the word

Continue Lendo