milvus-logo
LFAI
Home
  • Conceitos

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 especificar um número de fragmentos para cada coleção no Milvus, cada fragmento correspondendo a um canal virtual(vchannel). Como mostra a figura a seguir, o Milvus atribui a cada vchannel no broker de log um canal físico(pchannel). Qualquer pedido de inserção/eliminação de entrada é encaminhado para os fragmentos com base no valor de hash da chave primária.

A validação dos pedidos DML é transferida para o proxy porque o Milvus não tem transacções complicadas. O proxy solicita um carimbo de data/hora para cada pedido de inserção/eliminação ao TSO (Timestamp Oracle), que é o módulo de cronometragem que se encontra no coordenador de raiz. Com o carimbo de data/hora mais antigo a ser substituído pelo mais recente, os carimbos de data/hora são utilizados para determinar a sequência dos pedidos de dados que estão a ser processados. O proxy recupera informações em lotes a partir da coordenação de dados, incluindo segmentos de entidades e chaves primárias, para aumentar o rendimento global e evitar sobrecarregar o nó central.

Channels 1 Canais 1

Tanto as operações DML (linguagem de manipulação de dados) como as operações DDL (linguagem de definição de dados) são escritas na sequência de registo, mas às operações DDL só é atribuído um canal devido à sua baixa frequência de ocorrência.

Channels 2 Canais 2

Os canais V são mantidos nos nós subjacentes do corretor de registos. Cada canal é fisicamente indivisível e está disponível para qualquer nó, mas apenas para um. Quando a taxa de ingestão de dados atinge o ponto de estrangulamento, considere duas coisas: Se o nó do corretor de registos está sobrecarregado e precisa de ser escalado, e se existem fragmentos suficientes para garantir o equilíbrio da carga para cada nó.

Write log sequence Sequência de registo de escrita

O diagrama acima encapsula quatro componentes envolvidos no processo de escrita da sequência de registos: proxy, corretor de registos, nó de dados e armazenamento de objectos. O processo envolve quatro tarefas: validação dos pedidos DML, publicação-assinatura da sequência de registos, conversão do registo em fluxo contínuo para instantâneos de registos e persistência dos instantâneos de registos. As quatro tarefas são dissociadas umas das outras para garantir que cada tarefa é tratada pelo seu tipo de nó correspondente. Os nós do mesmo tipo são iguais e podem ser escalados de forma elástica e independente para acomodar várias cargas de dados, nomeadamente dados de fluxo contínuo maciços e altamente flutuantes.

Construção de índices

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

Index building Construção de índices

O 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 índice 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 é concluída e escreve-o novamente no 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 em 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 no Milvus é dividida em vários segmentos e os nós de consulta carregam os índices por segmento. Quando um pedido de pesquisa chega, ele é transmitido para todos os nós de consulta para uma pesquisa simultânea. Cada nó poda então os segmentos locais, procura vectores que satisfaçam os critérios, reduz e devolve os resultados da pesquisa.

Os nós de consulta são independentes uns dos outros numa consulta de dados. Cada nó é responsável apenas por duas tarefas: Carregar ou libertar segmentos seguindo as instruções do coordenador da consulta; efetuar uma pesquisa dentro dos segmentos locais. E o proxy é responsável por reduzir os resultados da pesquisa de cada nó de consulta e devolver os resultados finais ao cliente.

Handoff Transferência

Existem dois tipos de segmentos, segmentos crescentes (para dados incrementais) e segmentos selados (para dados históricos). Os nós de consulta subscrevem o vchannel para receber actualizações recentes (dados incrementais) como segmentos crescentes. Quando um segmento crescente atinge um limiar predefinido, a coordenação de dados sela-o e começa a construção do índice. Em seguida, uma operação de handoff iniciada pelo coordenador da consulta transforma os dados incrementais em dados históricos. A coordenação da consulta distribuirá os segmentos selados uniformemente entre todos os nós de consulta de acordo com o uso da memória, a sobrecarga da CPU e o número de segmentos.

O que vem a seguir

Traduzido porDeepLogo

Try Managed Milvus for Free

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

Get Started
Feedback

Esta página foi útil?