Compreender o nível de consistência na base de dados de vectores Milvus - Parte II
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 de tempo subjacente
- Carimbo de data/hora de garantia
- Níveis de consistência
- Como ajustar o nível de consistência em Milvus?
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.
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
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
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.
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 comoGuaranteeTs
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.
Efetuar uma pesquisa de semelhança de vectores
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:
- Como utilizar dados de cadeias de caracteres para potenciar as suas aplicações de pesquisa por semelhança
- Usando o Embedded Milvus para instalar e executar instantaneamente o Milvus com Python
- Aumente a taxa de transferência de leitura do seu banco de dados vetorial com réplicas na memória
- Entendendo o nível de consistência no banco de dados vetorial do Milvus
- Entendendo o nível de consistência no banco de dados vetorial do Milvus (Parte II)
- Como o banco de dados vetorial Milvus garante a segurança dos dados?
- O mecanismo de marcação do tempo subjacente
- Garantia de carimbo de data/hora
- Níveis de consistência
- Como ajustar o nível de consistência no Milvus?
- O que se segue
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word