Carimbo de tempo
Este tópico explica o conceito de carimbo de data/hora e apresenta os quatro principais parâmetros relacionados com o carimbo de data/hora na base de dados vetorial Milvus.
Visão geral
Milvus é uma base de dados vetorial que pode pesquisar e consultar vectores convertidos a partir de dados não estruturados. Quando se efectua uma operação em linguagem de manipulação de dados (DML), incluindo a inserção e eliminação de dados, o Milvus atribui carimbos de data/hora às entidades envolvidas na operação. Por conseguinte, todas as entidades no Milvus têm um atributo de carimbo de data/hora. E os lotes de entidades na mesma operação DML partilham o mesmo valor de timestamp.
Parâmetros de carimbo de data/hora
Vários parâmetros relacionados com o timestamp estão envolvidos quando se efectua uma pesquisa ou consulta de similaridade vetorial em Milvus.
Guarantee_timestamp
Service_timestamp
Graceful_time
Travel_timestamp
Guarantee_timestamp
Guarantee_timestamp
é um tipo de carimbo de data/hora utilizado para garantir que todas as actualizações de dados efectuadas por operações DML antes de Guarantee_timestamp
são visíveis quando se efectua uma pesquisa ou consulta por semelhança de vectores. Por exemplo, se tiver inserido um lote de dados às 15h00 e outro lote às 17h00 e o valor de Guarantee_timestamp
estiver definido como 18h00 durante uma pesquisa de semelhança de vectores. Isso significa que os dois lotes de dados inseridos às 15h e às 17h, respetivamente, devem ser envolvidos na pesquisa.
Se o endereço Guarantee_timestamp
não estiver configurado, o Milvus considera automaticamente o momento em que o pedido de pesquisa é efectuado. Por conseguinte, a pesquisa é efectuada numa vista de dados com todas as actualizações de dados por operações DML antes da pesquisa.
Para evitar o trabalho de compreender o TSO dentro do Milvus, o utilizador não tem de configurar diretamente o parâmetro Guarantee_timestamp
. Basta selecionar o nível de consistência e o Milvus trata automaticamente o parâmetro Guarantee_timestamp
por si. Cada nível de consistência corresponde a um determinado valor Guarantee_timestamp
.
Guarantee_Timestamp.
Exemplo
Como mostra a ilustração acima, o valor de Guarantee_timestamp
é definido como 2021-08-26T18:15:00
(para simplificar, o carimbo de data/hora neste exemplo é representado pela hora física). Quando efectua uma pesquisa ou consulta, todos os dados anteriores a 2021-08-26T18:15:00 são pesquisados ou consultados.
Service_timestamp
Service_timestamp
é um tipo de carimbo de data/hora gerado e gerido automaticamente pelos nós de consulta em Milvus. É utilizado para indicar que operações DML são executadas pelos nós de consulta.
Os dados geridos pelos nós de consulta podem ser classificados em dois tipos:
Dados históricos (ou também chamados de dados em lote)
Dados incrementais (ou também designados por dados em fluxo contínuo).
No Milvus, é necessário carregar os dados antes de efetuar uma pesquisa ou consulta. Por isso, os dados em lote numa coleção são carregados pelo nó de consulta antes de ser feito um pedido de pesquisa ou consulta. No entanto, os dados em fluxo contínuo são inseridos ou eliminados do Milvus em tempo real, o que exige que o nó de consulta mantenha uma linha de tempo das operações DML e dos pedidos de pesquisa ou consulta. Por conseguinte, os nós de consulta utilizam Service_timestamp
para manter essa cronologia. Service_timestamp
pode ser visto como o momento em que determinados dados estão visíveis, uma vez que os nós de consulta podem garantir que todas as operações DML antes de Service_timestamp
estão concluídas.
Quando há um pedido de pesquisa ou consulta de entrada, um nó de consulta compara os valores de Service_timestamp
e Guarantee_timestamp
. Existem principalmente dois cenários.
Service_Timestamp.
Cenário 1: Service_timestamp
>= Guarantee_timestamp
Como se mostra na figura 1, o valor de Guarantee_timestamp
é definido como 2021-08-26T18:15:00
. Quando o valor de Service_timestamp
é aumentado para 2021-08-26T18:15:01
, isso significa que todas as operações DML anteriores a este momento são executadas e concluídas pelo nó de consulta, incluindo as operações DML anteriores à hora indicada por Guarantee_timestamp
. Como resultado, o pedido de pesquisa ou consulta pode ser executado imediatamente.
Cenário 2: Service_timestamp
< Guarantee_timestamp
Como mostra a figura 2, o valor de Guarantee_timestamp
é definido como 2021-08-26T18:15:00
, e o valor atual de Service_timestamp
é apenas 2021-08-26T18:14:55
. Isto significa que apenas as operações DML anteriores a 2021-08-26T18:14:55
são executadas e concluídas, deixando inacabadas parte das operações DML posteriores a este ponto temporal mas anteriores a Guarantee_timestamp
. Se a pesquisa ou consulta for executada neste ponto, alguns dos dados necessários são invisíveis e ainda não estão disponíveis, afectando seriamente a precisão dos resultados da pesquisa ou consulta. Por conseguinte, o nó de consulta precisa de adiar o pedido de pesquisa ou consulta até que as operações DML antes de guarantee_timestamp
estejam concluídas (ou seja, quando Service_timestamp
>= Guarantee_timestamp
).
Graceful_time
Tecnicamente falando, Graceful_time
não é um carimbo de data/hora, mas sim um período de tempo (por exemplo, 100ms). No entanto, vale a pena mencionar Graceful_time
porque está fortemente relacionado com Guarantee_timestamp
e Service_timestamp
. Graceful_time
é um parâmetro configurável no ficheiro de configuração do Milvus. É utilizado para indicar o período de tempo que pode ser tolerado antes de determinados dados se tornarem visíveis. Em suma, as operações DML não concluídas durante Graceful_time
podem ser toleradas.
Quando há um pedido de pesquisa ou de consulta a chegar, pode haver dois cenários.
Graceful_Time.
Cenário 1: Service_timestamp
+ Graceful_time
>= Guarantee_timestamp
Como mostra a figura 1, o valor de Guarantee_timestamp
é definido como 2021-08-26T18:15:01
, e Graceful_time
como 2s
. O valor de Service_timestamp
é aumentado para 2021-08-26T18:15:00
. Embora o valor de Service_timestamp
seja ainda inferior ao de Guarantee_timestamp
e nem todas as operações DML antes de 2021-08-26T18:15:01
estejam concluídas, é tolerado um período de 2 segundos de invisibilidade dos dados, como indicado pelo valor de Graceful_time
. Por conseguinte, o pedido de pesquisa ou consulta recebido pode ser executado imediatamente.
Cenário 2: Service_timestamp
+ Graceful_time
< Guarantee_timestamp
Como mostra a figura 2, o valor de Guarantee_timestamp
é definido como 2021-08-26T18:15:01
e o de Graceful_time
como 2s
. O valor atual de Service_timestamp
é apenas 2021-08-26T18:14:54
. Isto significa que as operações DML esperadas ainda não estão concluídas e, mesmo tendo em conta os 2 segundos de tempo de tolerância, a invisibilidade dos dados continua a ser intolerável. Por conseguinte, o nó de consulta precisa de adiar o pedido de pesquisa ou de consulta até que determinados pedidos DML estejam concluídos (ou seja, quando Service_timestamp
+ Graceful_time
>= Guarantee_timestamp
).