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

milvus-logo
LFAI
  • Home
  • Blog
  • Compreender o nível de consistência na base de dados de vectores Milvus - Parte II

Compreender o nível de consistência na base de dados de vectores Milvus - Parte II

  • Engineering
September 13, 2022
Jiquan Long

Cover_image Imagem da capa

Este artigo foi escrito por Jiquan Long e transcrito por Angela Ni.

No blogue anterior sobre consistência, explicámos o que é a conotação de consistência numa base de dados vetorial distribuída, abordámos os quatro níveis de consistência - forte, estanquicidade limitada, sessão e eventual - suportados na base de dados vetorial Milvus e explicámos o cenário de aplicação mais adequado para cada nível de consistência.

Nesta publicação, continuaremos a examinar o mecanismo que permite aos utilizadores da base de dados de vectores Milvus escolher de forma flexível o nível de consistência ideal para vários cenários de aplicação. Também forneceremos um tutorial básico sobre como ajustar o nível de consistência na base de dados vetorial Milvus.

Saltar para:

O mecanismo de marcação do tempo subjacente

Milvus utiliza o mecanismo de time tick para garantir diferentes níveis de consistência quando uma pesquisa ou consulta vetorial é realizada. O Time Tick é a marca de água do Milvus que funciona como um relógio e indica em que momento se encontra o sistema Milvus. Sempre que é enviado um pedido em linguagem de manipulação de dados (DML) à base de dados vetorial do Milvus, este atribui um carimbo de data/hora ao pedido. Como mostra a figura abaixo, quando são inseridos novos dados na fila de mensagens, por exemplo, o Milvus não só marca um carimbo de data/hora nesses dados inseridos, como também insere marcações de tempo a intervalos regulares.

timetick marca de tempo

Tomemos como exemplo o endereço syncTs1 na figura acima. Quando os consumidores a jusante, como os nós de consulta, vêem syncTs1, os componentes do consumidor compreendem que todos os dados inseridos antes de syncTs1 foram consumidos. Por outras palavras, os pedidos de inserção de dados cujos valores de carimbo de data/hora são inferiores a syncTs1 deixarão de aparecer na fila de mensagens.

Garantia de carimbo de data/hora

Tal como mencionado na secção anterior, os componentes consumidores a jusante, como os nós de consulta, obtêm continuamente mensagens de pedidos de inserção de dados e marcações temporais da fila de mensagens. Sempre que um tique de tempo é consumido, o nó de consulta marca esse tique de tempo consumido como o tempo útil - ServiceTime e todos os dados inseridos antes de ServiceTime são visíveis para o nó de consulta.

Para além do ServiceTime, o Milvus adopta também um tipo de marca temporal - a marca temporal de garantia (GuaranteeTS) para satisfazer a necessidade de vários níveis de consistência e disponibilidade por parte de diferentes utilizadores. Isto significa que os utilizadores da base de dados vetorial Milvus podem especificar GuaranteeTs para informar os nós de consulta de que todos os dados anteriores a GuaranteeTs devem estar visíveis e envolvidos quando é efectuada uma pesquisa ou consulta.

Existem normalmente dois cenários quando o nó de consulta executa um pedido de pesquisa na base de dados vetorial Milvus.

Cenário 1: Executar o pedido de pesquisa imediatamente

Como mostra a figura abaixo, se GuaranteeTs for mais pequeno do que ServiceTime, os nós de consulta podem executar o pedido de pesquisa imediatamente.

execute_immediately execute_immediately

Cenário 2: esperar até "ServiceTime > GuaranteeTs"

Se GuaranteeTs for maior do que ServiceTime, os nós de consulta devem continuar a consumir tempo da fila de mensagens. Os pedidos de pesquisa não podem ser executados até que ServiceTime seja superior a GuaranteeTs.

wait_search wait_search

Níveis de consistência

Portanto, o GuaranteeTs é configurável no pedido de pesquisa para atingir o nível de consistência especificado pelo utilizador. Um GuaranteeTs com um valor grande garante uma consistência forte ao custo de uma alta latência de pesquisa. E um GuaranteeTs com um valor pequeno reduz a latência da pesquisa, mas a visibilidade dos dados fica comprometida.

GuaranteeTs em Milvus é um formato de carimbo de data/hora híbrido. E o utilizador não faz ideia do TSO dentro do Milvus. Por conseguinte, especificar o valor deGuaranteeTs é uma tarefa demasiado complicada para os utilizadores. Para evitar problemas aos utilizadores e proporcionar-lhes uma experiência de utilização óptima, Milvus apenas exige que os utilizadores escolham o nível de consistência específico, e a base de dados vetorial Milvus tratará automaticamente do valor GuaranteeTs para os utilizadores. Ou seja, o utilizador do Milvus só precisa de escolher entre os quatro níveis de consistência: Strong, Bounded, Session, e Eventually. E cada um dos níveis de consistência corresponde a um determinado valor de GuaranteeTs.

A figura seguinte ilustra o GuaranteeTs para cada um dos quatro níveis de consistência da base de dados vetorial Milvus.

guarantee_ts garantia_ts

A base de dados vetorial Milvus suporta quatro níveis de consistência:

  • CONSISTENCY_STRONG GuaranteeTs está definido para o mesmo valor que o carimbo de data/hora mais recente do sistema, e os nós de consulta aguardam até que o tempo de serviço avance para o carimbo de data/hora mais recente do sistema para processar o pedido de pesquisa ou consulta.

  • CONSISTENCY_EVENTUALLY GuaranteeTs O nó de consulta espera até que o tempo de serviço passe para o último carimbo de data/hora do sistema para processar o pedido de pesquisa ou consulta. Os nós de consulta pesquisam imediatamente na vista de dados existente.

  • CONSISTENCY_BOUNDED GuaranteeTs é definido para um valor relativamente menor do que o último carimbo de data/hora do sistema e os nós de consulta pesquisam numa vista de dados toleravelmente menos actualizada.

  • CONSISTENCY_SESSION: O cliente utiliza o carimbo de data/hora da última operação de escrita como GuaranteeTs para que cada cliente possa, pelo menos, recuperar os dados inseridos por si próprio.

Como ajustar o nível de consistência no Milvus?

O Milvus permite ajustar o nível de consistência ao criar uma coleção ou ao efetuar uma pesquisa ou consulta.

Para efetuar uma pesquisa de semelhança vetorial com o nível de consistência pretendido, basta definir o valor do parâmetro consistency_level como Strong, Bounded, Session, ou Eventually. Se não definir o valor do parâmetro consistency_level, o nível de consistência será Bounded por defeito. O exemplo efectua uma pesquisa de semelhança de vectores com a consistência Strong.

results = collection.search(
        data=[[0.1, 0.2]], 
        anns_field="book_intro", 
        param=search_params, 
        limit=10, 
        expr=None,
        consistency_level="Strong"
)

Realizar uma consulta de vetor

À semelhança da realização de uma pesquisa de semelhança de vectores, pode especificar o valor para o parâmetro consistency_level ao realizar uma consulta de vectores. O exemplo efectua uma consulta de vetor com a consistência Strong.

res = collection.query(
  expr = "book_id in [2,4,6,8]", 
  output_fields = ["book_id", "book_intro"],
  consistency_level="Strong"
)

O que se segue

Com o lançamento oficial do Milvus 2.1, preparámos uma série de blogues que apresentam as novas funcionalidades. Leia mais nesta série de blogues:

Like the article? Spread the word

Continue Lendo