🚀 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 coerência na base de dados de vectores Milvus

Compreender o nível de coerência na base de dados de vectores Milvus

  • Engineering
August 29, 2022
Chenglong Li

Cover_image Imagem da capa

Este artigo foi escrito por Chenglong Li e transcrito por Angela Ni.

Já alguma vez se interrogou porque é que, por vezes, os dados que eliminou da base de dados vetorial Mlivus continuam a aparecer nos resultados da pesquisa?

Uma razão muito provável é não ter definido o nível de consistência adequado para a sua aplicação. O nível de consistência numa base de dados vetorial distribuída é fundamental, pois determina em que ponto uma determinada escrita de dados pode ser lida pelo sistema.

Por conseguinte, este artigo visa desmistificar o conceito de consistência e aprofundar os níveis de consistência suportados pela base de dados vetorial Milvus.

Saltar para:

O que é a consistência

Antes de começarmos, precisamos de clarificar a conotação de consistência neste artigo, uma vez que a palavra "consistência" é um termo sobrecarregado na indústria informática. A consistência numa base de dados distribuída refere-se especificamente à propriedade que garante que cada nó ou réplica tem a mesma visão dos dados quando escreve ou lê dados num determinado momento. Por conseguinte, estamos a falar de consistência como no teorema CAP.

Para servir grandes empresas em linha no mundo moderno, é comum adotar várias réplicas. Por exemplo, o gigante do comércio eletrónico em linha Amazon replica as suas encomendas ou dados SKU em vários centros de dados, zonas ou mesmo países para garantir uma elevada disponibilidade do sistema em caso de falha ou avaria do mesmo. Isto coloca um desafio ao sistema - a consistência dos dados em várias réplicas. Sem consistência, é muito provável que o item eliminado do seu carrinho de compras da Amazon reapareça, causando uma experiência muito má para o utilizador.

Por isso, precisamos de diferentes níveis de consistência de dados para diferentes aplicações. Felizmente, Milvus, uma base de dados para IA, oferece flexibilidade no nível de consistência e pode definir o nível de consistência que melhor se adequa à sua aplicação.

Consistência na base de dados vetorial Milvus

O conceito de nível de consistência foi introduzido pela primeira vez com o lançamento do Milvus 2.0. A versão 1.0 do Milvus não era uma base de dados vetorial distribuída, pelo que não envolvia níveis de consistência ajustáveis. O Milvus 1.0 descarrega os dados a cada segundo, o que significa que os novos dados são quase imediatamente visíveis após a sua inserção e que o Milvus lê a vista de dados mais actualizada no momento exato em que chega um pedido de pesquisa ou consulta de semelhanças vectoriais.

No entanto, o Milvus foi refacturado na sua versão 2.0 e o Milvus 2.0 é uma base de dados vetorial distribuída baseada num mecanismo pub-sub. O teorema PACELC indica que um sistema distribuído tem de fazer um compromisso entre consistência, disponibilidade e latência. Além disso, diferentes níveis de consistência servem para diferentes cenários. Por isso, o conceito de consistência foi introduzido no Milvus 2.0 e suporta o ajuste de níveis de consistência.

Quatro níveis de consistência na base de dados vetorial Milvus

O Milvus suporta quatro níveis de consistência: forte, estanqueidade limitada, sessão e eventual. E um utilizador do Milvus pode especificar o nível de consistência ao criar uma coleção ou ao efetuar uma pesquisa ou consulta de semelhança de vectores. Esta secção continuará a explicar as diferenças entre estes quatro níveis de consistência e para que cenários são mais adequados.

Forte

Forte é o nível de consistência mais elevado e mais rigoroso. Garante que os utilizadores podem ler a versão mais recente dos dados.

Strong Forte

De acordo com o teorema PACELC, se o nível de consistência for definido como forte, a latência aumentará. Por conseguinte, recomendamos que escolha uma consistência forte durante os testes funcionais para garantir a exatidão dos resultados dos testes. Além disso, a consistência forte também é mais adequada para aplicações que exigem rigorosamente a consistência dos dados à custa da velocidade de pesquisa. Um exemplo pode ser um sistema financeiro em linha que lida com pagamentos de encomendas e faturação.

Estabilidade limitada

A obsolescência limitada, como o próprio nome sugere, permite a inconsistência dos dados durante um determinado período de tempo. No entanto, geralmente, os dados são sempre globalmente consistentes fora desse período de tempo.

Bounded_staleness Staleness_limitado

A estanquicidade limitada é adequada para cenários que necessitam de controlar a latência da pesquisa e podem aceitar a invisibilidade esporádica dos dados. Por exemplo, nos sistemas de recomendação, como os motores de recomendação de vídeo, a invisibilidade dos dados tem, de vez em quando, um impacto muito pequeno na taxa de recuperação global, mas pode aumentar significativamente o desempenho do sistema de recomendação. Um exemplo pode ser uma aplicação para acompanhar o estado das suas encomendas em linha.

Sessão

A sessão garante que todas as escritas de dados podem ser imediatamente percepcionadas em leituras durante a mesma sessão. Por outras palavras, quando escreve dados através de um cliente, os dados recentemente inseridos tornam-se instantaneamente pesquisáveis.

Session Sessão

Recomendamos a escolha da sessão como nível de consistência para os cenários em que a exigência de consistência dos dados na mesma sessão é elevada. Um exemplo pode ser a eliminação dos dados de uma entrada de livro do sistema da biblioteca e, após confirmação da eliminação e atualização da página (uma sessão diferente), o livro já não deve estar visível nos resultados da pesquisa.

Eventual

Não existe uma ordem garantida de leituras e escritas, e as réplicas acabam por convergir para o mesmo estado, uma vez que não são efectuadas mais operações de escrita. Sob consistência eventual, as réplicas começam a trabalhar nos pedidos de leitura com os valores actualizados mais recentes. A consistência eventual é o nível mais fraco entre os quatro.

Eventual Eventual

No entanto, de acordo com o teorema PACELC, a latência da pesquisa pode ser tremendamente reduzida com o sacrifício da consistência. Portanto, a consistência eventual é mais adequada para cenários que não exigem muito da consistência dos dados, mas requerem um desempenho de pesquisa extremamente rápido. Um exemplo pode ser a recuperação de críticas e classificações de produtos da Amazon com consistência eventual.

Nota final

Assim, voltando à questão levantada no início deste artigo, os dados eliminados ainda são devolvidos como resultados de pesquisa porque o utilizador não escolheu o nível de consistência adequado. O valor predefinido para o nível de consistência é bounded staleness (Bounded) na base de dados vetorial Milvus. Por conseguinte, a leitura dos dados pode atrasar-se e o Milvus pode ler a vista de dados antes de o utilizador efetuar operações de eliminação durante uma pesquisa ou consulta por semelhança. No entanto, este problema é simples de resolver. Basta ajustar o nível de consistência ao criar uma coleção ou ao efetuar uma pesquisa ou consulta de semelhanças vectoriais. Simples!

Na próxima publicação, vamos revelar o mecanismo subjacente e explicar como a base de dados vetorial Milvus atinge diferentes níveis de consistência. Fique atento!

O que vem a seguir

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:

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