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

milvus-logo
LFAI
  • Home
  • Blog
  • Estratégia de eliminação anterior e problemas relacionados

Estratégia de eliminação anterior e problemas relacionados

  • Engineering
December 18, 2019
Yihua Mo

autor: Yihua Mo

Data: 2019-12-18

Em Managing Data in Massive-Scale Vetor Search Engine, mencionámos o mecanismo de eliminação de ficheiros de dados. A eliminação inclui a eliminação suave e a eliminação rígida. Depois de efetuar uma operação de eliminação numa tabela, a tabela é marcada com uma eliminação suave. As operações de pesquisa ou atualização subsequentes deixam de ser permitidas. No entanto, a operação de consulta que se inicia antes da eliminação pode continuar a ser executada. A tabela é realmente eliminada juntamente com os metadados e outros ficheiros apenas quando a operação de consulta estiver concluída.

Então, quando é que os ficheiros marcados com soft-delete são realmente eliminados? Antes da versão 0.6.0, a estratégia é que um ficheiro é realmente eliminado após uma eliminação suave durante 5 minutos. A figura seguinte mostra a estratégia:

5mins 5mins

Esta estratégia baseia-se na premissa de que as consultas normalmente não duram mais de 5 minutos e não é fiável. Se uma consulta durar mais de 5 minutos, a consulta falhará. A razão é que, quando uma consulta é iniciada, o Milvus recolhe informações sobre os ficheiros que podem ser pesquisados e cria tarefas de consulta. Depois, o programador de consultas carrega os ficheiros para a memória um a um e procura os ficheiros um a um. Se um ficheiro já não existir ao carregar um ficheiro, a consulta falhará.

Aumentar o tempo pode ajudar a reduzir o risco de falhas nas consultas, mas também causa outro problema: a utilização do disco é demasiado grande. A razão é que, quando são inseridas grandes quantidades de vectores, o Milvus combina continuamente os ficheiros de dados e os ficheiros combinados não são imediatamente removidos do disco, mesmo que não ocorra nenhuma consulta. Se a inserção de dados for demasiado rápida e/ou a quantidade de dados inseridos for demasiado grande, a utilização extra do disco pode ascender a dezenas de GBs. Consulte a figura seguinte como exemplo:

result resultado

Como mostrado na figura anterior, o primeiro lote de dados inseridos (insert_1) é descarregado para o disco e torna-se ficheiro_1, depois insert_2 torna-se ficheiro_2. O thread responsável pela combinação de ficheiros combina os ficheiros no ficheiro_3. Em seguida, o ficheiro_1 e o ficheiro_2 são marcados como soft-delete. O terceiro lote de dados de inserção torna-se o ficheiro_4. A thread combina o ficheiro_3 e o ficheiro_4 com o ficheiro_5 e marca o ficheiro_3 e o ficheiro_4 como soft-delete.

Da mesma forma, insert_6 e insert_5 são combinados. Em t3, o ficheiro_5 e o ficheiro_6 são marcados como soft-delete. Entre t3 e t4, embora muitos ficheiros estejam marcados como soft-delete, eles ainda estão no disco. Os ficheiros são realmente eliminados após t4. Assim, entre t3 e t4, o uso do disco é 64 + 64 + 128 + 64 + 196 + 64 + 256 = 836 MB. Os dados inseridos são 64 + 64 + 64 + 64 + 64 = 256 MB. A utilização do disco é 3 vezes superior ao tamanho dos dados inseridos. Quanto mais rápida for a velocidade de escrita do disco, maior será a utilização do disco durante um período de tempo específico.

Melhorias da estratégia de eliminação na versão 0.6.0

Assim, alterámos a estratégia de eliminação de ficheiros na v0.6.0. O hard-delete já não usa o tempo como gatilho. Em vez disso, o gatilho é quando o ficheiro não está a ser utilizado por nenhuma tarefa.

newstrategy novaestratégia

Suponha que são inseridos dois lotes de vectores. Em t1 é dado um pedido de consulta, Milvus adquire dois ficheiros a serem consultados (ficheiro_1 e ficheiro_2, porque o ficheiro_3 ainda não existe.) Depois, a thread de backend começa a combinar os dois ficheiros com a consulta a correr ao mesmo tempo. Quando o ficheiro_3 é gerado, o ficheiro_1 e o ficheiro_2 são marcados como soft-delete. Após a consulta, nenhuma outra tarefa usará o arquivo_1 e o arquivo_2, então eles serão apagados em t4. O intervalo entre t2 e t4 é muito pequeno e depende do intervalo da consulta. Desta forma, os ficheiros não utilizados serão removidos a tempo.

Quanto à implementação interna, a contagem de referências, que é familiar aos engenheiros de software, é utilizada para determinar se um ficheiro pode ser apagado. Para explicar usando uma comparação, quando um jogador tem vidas num jogo, ele ainda pode jogar. Quando o número de vidas chega a 0, o jogo termina. O Milvus monitoriza o estado de cada ficheiro. Quando um ficheiro é utilizado por uma tarefa, é-lhe adicionada uma vida. Quando o ficheiro deixa de ser utilizado, é-lhe retirada uma vida. Quando um ficheiro é marcado com soft-delete e o número de vidas é 0, o ficheiro está pronto para hard-delete.

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