Временная метка
В этой теме объясняется понятие временной метки и представлены четыре основных параметра, связанных с временной меткой, в векторной базе данных Milvus.
Обзор
Milvus - это векторная база данных, которая может искать и запрашивать векторы, преобразованные из неструктурированных данных. При выполнении операций на языке манипулирования данными (DML), включая вставку и удаление данных, Milvus присваивает метки времени сущностям, участвующим в операции. Поэтому все сущности в Milvus имеют атрибут timestamp. И партии сущностей в одной операции DML имеют одно и то же значение временной метки.
Параметры временной метки
При выполнении поиска или запроса векторного сходства в Milvus задействуется несколько параметров, связанных с меткой времени.
Guarantee_timestamp
Service_timestamp
Graceful_time
Travel_timestamp
Guarantee_timestamp
Guarantee_timestamp
это тип временной метки, используемый для обеспечения того, чтобы все данные, обновленные операциями DML до Guarantee_timestamp
, были видны при выполнении поиска или запроса по векторному подобию. Например, если вы вставили партию данных в 15:00, другую партию в 17:00, а значение Guarantee_timestamp
установлено как 18:00 во время поиска векторного подобия. Это означает, что две партии данных, вставленные в 15:00 и 17:00 соответственно, должны быть задействованы в поиске.
Если значение Guarantee_timestamp
не настроено, Milvus автоматически берет момент времени, когда был сделан запрос на поиск. Поэтому поиск ведется на представлении данных, в котором все данные были обновлены операциями DML до начала поиска.
Чтобы избавить вас от необходимости разбираться в TSO внутри Milvus, вам, как пользователю, не нужно напрямую настраивать параметр Guarantee_timestamp
. Вам нужно только выбрать уровень согласованности, а Milvus автоматически обработает параметр Guarantee_timestamp
для вас. Каждому уровню согласованности соответствует определенное значение Guarantee_timestamp
.
Гарантированный_временной метки.
Пример
Как показано на рисунке выше, значение Guarantee_timestamp
установлено как 2021-08-26T18:15:00
(для простоты временная метка в этом примере представлена физическим временем). При выполнении поиска или запроса будут искаться или запрашиваться все данные до 2021-08-26T18:15:00.
Service_timestamp
Service_timestamp
это тип временной метки, автоматически генерируемой и управляемой узлами запросов в Milvus. Он используется для указания того, какие операции DML выполняются узлами запросов.
Данные, управляемые узлами запросов, можно разделить на два типа:
Исторические данные (или также называемые пакетными данными)
Инкрементные данные (или также называемые потоковыми данными).
В Milvus необходимо загружать данные перед выполнением поиска или запроса. Поэтому пакетные данные в коллекции загружаются узлом запроса перед выполнением запроса на поиск или запрос. Однако потоковые данные вставляются в Milvus или удаляются из него на лету, что требует от узла запроса вести хронологию операций DML и запросов поиска или запроса. В результате узлы запросов используют Service_timestamp
для хранения такой временной шкалы. Service_timestamp
можно рассматривать как момент времени, когда определенные данные становятся видимыми, поскольку узлы запросов могут убедиться, что все операции DML до Service_timestamp
завершены.
Когда поступает запрос на поиск или запрос, узел запроса сравнивает значения Service_timestamp
и Guarantee_timestamp
. В основном существует два сценария.
Service_Timestamp.
Сценарий 1: Service_timestamp
>= Guarantee_timestamp
Как показано на рисунке 1, значение Guarantee_timestamp
устанавливается как 2021-08-26T18:15:00
. Когда значение Service_timestamp
увеличивается до 2021-08-26T18:15:01
, это означает, что все операции DML до этого момента времени выполняются и завершаются узлом запроса, включая те операции DML до времени, указанного на Guarantee_timestamp
. В результате запрос на поиск или запрос может быть выполнен немедленно.
Сценарий 2: Service_timestamp
< Guarantee_timestamp
Как показано на рисунке 2, значение Guarantee_timestamp
установлено как 2021-08-26T18:15:00
, а текущим значением Service_timestamp
является только 2021-08-26T18:14:55
. Это означает, что выполняются и завершаются только операции DML до 2021-08-26T18:14:55
, оставляя часть операций DML после этой временной точки, но до Guarantee_timestamp
незавершенными. Если поиск или запрос выполняется в этот момент, некоторые из требуемых данных еще не видны и недоступны, что серьезно повлияет на точность результатов поиска или запроса. Поэтому узел запроса должен отложить запрос на поиск или запрос до завершения операций DML перед guarantee_timestamp
(т. е. когда Service_timestamp
>= Guarantee_timestamp
).
Graceful_time
Технически говоря, Graceful_time
- это не временная метка, а скорее период времени (например, 100 мс). Тем не менее, Graceful_time
стоит упомянуть, поскольку он тесно связан с Guarantee_timestamp
и Service_timestamp
. Graceful_time
- настраиваемый параметр в конфигурационном файле Milvus. Он используется для указания периода времени, который можно выдержать, прежде чем определенные данные станут видимыми. Короче говоря, незавершенные операции DML во время Graceful_time
могут быть терпимы.
Когда поступает запрос на поиск или запрос, может быть два сценария.
Graceful_Time.
Сценарий 1: Service_timestamp
+ Graceful_time
>= Guarantee_timestamp
Как показано на рисунке 1, значение Guarantee_timestamp
устанавливается как 2021-08-26T18:15:01
, а Graceful_time
- как 2s
. Значение Service_timestamp
увеличивается до 2021-08-26T18:15:00
. Хотя значение Service_timestamp
все еще меньше, чем Guarantee_timestamp
, и не все операции DML до 2021-08-26T18:15:01
завершены, период невидимости данных в 2 секунды допускается, о чем свидетельствует значение Graceful_time
. Поэтому входящий запрос на поиск или запрос может быть выполнен немедленно.
Сценарий 2: Service_timestamp
+ Graceful_time
< Guarantee_timestamp
Как показано на рисунке 2, значение Guarantee_timestamp
устанавливается как 2021-08-26T18:15:01
, а Graceful_time
- как 2s
. Текущее значение Service_timestamp
равно только 2021-08-26T18:14:54
. Это означает, что ожидаемые операции DML еще не завершены, и даже с учетом 2 секунд льготного времени невидимость данных все еще невыносима. Поэтому узел запроса должен отложить поиск или запрос до завершения определенных DML-запросов (т. е. когда Service_timestamp
+ Graceful_time
>= Guarantee_timestamp
).