Processamento de dados

Este artigo fornece uma descrição detalhada da implementação da inserção de dados, construção de índices e consulta de dados no Milvus.

Inserção de dados

É possível escolher quantos shards uma coleção usa no Milvus - cada shard é mapeado para um canal virtual(vchannel). Conforme ilustrado abaixo, o Milvus atribui cada vchannel a um canal físico(pchannel), e cada pchannel é vinculado a um nó de streaming específico.

VChannel PChannel and StreamingNode VChannel PChannel e StreamingNode

Após a verificação dos dados, o proxy dividirá a mensagem escrita em vários pacotes de dados de fragmentos, de acordo com as regras de encaminhamento de fragmentos especificadas.

Channels 1 Canais 1

Em seguida, os dados escritos de um fragmento(vchannel) são enviados para o nó de transmissão correspondente do pchannel.

write flow fluxo de escrita

O Nó de Fluxo atribui um Oráculo de Carimbo de Tempo (TSO) a cada pacote de dados para estabelecer uma ordenação total das operações. Ele executa verificações de consistência na carga útil antes de escrevê-la no log de escrita antecipada (WAL) subjacente. Uma vez que os dados são confirmados de forma duradoura no WAL, é garantido que não serão perdidos - mesmo no caso de uma falha, o nó de streaming pode reproduzir o WAL para recuperar totalmente todas as operações pendentes.

Enquanto isso, o StreamingNode também corta de forma assíncrona as entradas do WAL confirmadas em segmentos discretos. Existem dois tipos de segmentos:

  • Segmento crescente: quaisquer dados que não tenham sido pré-sistemados no armazenamento de objetos.
  • Segmentoselado: todos os dados foram persistidos no armazenamento de objectos, os dados do segmento selado são imutáveis.

A transição de um segmento crescente para um segmento selado é chamada de descarga. O nó de streaming aciona um flush assim que ingere e escreve todas as entradas WAL disponíveis para esse segmento, ou seja, quando não há mais registros pendentes no log de gravação antecipada subjacente, momento em que o segmento é finalizado e otimizado para leitura.

Construção de índice

A construção do índice é executada pelo nó de dados. Para evitar a construção frequente de índices para atualizações de dados, uma coleção no Milvus é dividida em segmentos, cada um com seu próprio índice.

Index building Construção de índices

Milvus suporta a construção de índices para cada campo vetorial, campo escalar e campo primário. Tanto a entrada como a saída da construção de índices estão ligadas ao armazenamento de objectos: O nó de dados carrega os instantâneos de registo para indexar a partir de um segmento (que está no armazenamento de objectos) para a memória, desserializa os dados e metadados correspondentes para construir o índice, serializa o índice quando a construção do índice está concluída e escreve-o de volta para o armazenamento de objectos.

A criação de índices envolve principalmente operações vectoriais e matriciais e, por isso, exige muita computação e memória. Os vectores não podem ser indexados de forma eficiente com índices tradicionais baseados em árvores devido à sua natureza de elevada dimensão, mas podem ser indexados com técnicas mais maduras neste domínio, como os índices baseados em clusters ou grafos. Independentemente do seu tipo, a construção de índices envolve cálculos iterativos maciços para vectores de grande dimensão, como o Kmeans ou o graph traverse.

Ao contrário da indexação para dados escalares, a construção de índices vectoriais tem de tirar o máximo partido da aceleração SIMD (instrução única, dados múltiplos). O Milvus tem suporte inato para conjuntos de instruções SIMD, por exemplo, SSE, AVX2 e AVX512. Dado o "soluço" e a natureza intensiva de recursos da construção de índices vectoriais, a elasticidade torna-se crucialmente importante para o Milvus em termos económicos. As futuras versões do Milvus irão explorar mais a computação heterogénea e a computação sem servidor para reduzir os custos associados.

Para além disso, o Milvus também suporta filtragem escalar e consulta de campos primários. Tem índices incorporados para melhorar a eficiência da consulta, por exemplo, índices de filtro Bloom, índices de hash, índices baseados em árvores e índices invertidos, e planeia introduzir mais índices externos, por exemplo, índices de mapa de bits e índices aproximados.

Consulta de dados

A consulta de dados refere-se ao processo de pesquisa de uma coleção especificada para o número k de vectores mais próximos de um vetor alvo ou para todos os vectores dentro de um intervalo de distância especificado para o vetor. Os vectores são devolvidos juntamente com a chave primária e os campos correspondentes.

Data query Consulta de dados

Uma coleção em Milvus é dividida em vários segmentos; o nó de fluxo contínuo carrega segmentos crescentes e mantém os dados em tempo real, enquanto os nós de consulta carregam segmentos selados.

Quando chega um pedido de consulta/pesquisa, o proxy transmite o pedido a todos os Streaming Nodes responsáveis pelos shards relacionados para pesquisa simultânea.

Quando um pedido de consulta chega, o proxy solicita simultaneamente aos nós de fluxo contínuo que detêm os fragmentos correspondentes para executar a pesquisa.

Cada nó de fluxo contínuo gera um plano de consulta, pesquisa os seus dados crescentes locais e contacta simultaneamente nós de consulta remotos para obter resultados históricos, agregando-os depois num único resultado de fragmento.

Finalmente, o proxy recolhe todos os resultados dos fragmentos, funde-os no resultado final e devolve-o ao cliente.

Handoff Handoff

Quando o segmento crescente em um Streaming Node é descarregado em um segmento selado - ou quando um Data Node completa uma compactação - o Coordinator inicia uma operação de handoff para converter esses dados crescentes em dados históricos. Em seguida, o coordenador distribui uniformemente os segmentos selados entre todos os nós de consulta, equilibrando o uso da memória, a sobrecarga da CPU e a contagem de segmentos, e libera qualquer segmento redundante.

O que vem a seguir

Try Managed Milvus for Free

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

Get Started
Feedback

Esta página foi útil?