Эта статья написана Jiquan Long и переработана Angela Ni.
В предыдущем блоге о согласованности мы объяснили, что означает согласованность в распределенной векторной базе данных, рассмотрели четыре уровня согласованности — строгий, ограниченное устаревание, сеанс и возможность, поддерживаемые в векторной базе данных Milvus, и объяснили наиболее подходящий сценарий приложения для каждого уровня согласованности.
В этом посте мы продолжим изучение механизма, позволяющего пользователям векторной базы данных Milvus гибко выбирать идеальный уровень согласованности для различных сценариев приложений. Мы также предоставим базовое руководство по настройке уровня согласованности в векторной базе данных Milvus.
Перейти к:
∘ Основной механизм отсчета времени
∘ Гарантированная отметка времени
∘ Уровни согласованности
∘ Как настроить уровень согласованности в Milvus?
Основной механизм тиков времени
Milvus использует механизм временных меток для обеспечения различных уровней согласованности при выполнении векторного поиска или запроса. Отметка времени — это водяной знак Milvus, который действует как часы в Milvus и показывает, в какой момент времени находится система Milvus. запрос. Как показано на рисунке ниже, когда новые данные вставляются, например, в очередь сообщений, Milvus не только отмечает отметку времени на этих вставленных данных, но также вставляет метки времени через регулярные промежутки времени.
В качестве примера возьмем syncTs1
на рисунке выше. Когда нижестоящие потребители, такие как узлы запросов, видят syncTs1
, компоненты-потребители понимают, что все данные, которые были вставлены до syncTs1
, были использованы. Другими словами, запросы на вставку данных, значения меток времени которых меньше syncTs1
, больше не будут появляться в очереди сообщений.
Отметка времени гарантии
Как упоминалось в предыдущем разделе, нижестоящие компоненты-потребители, такие как узлы запросов, постоянно получают сообщения о запросах на вставку данных и отметках времени из очереди сообщений. Каждый раз, когда потребляется временной такт, узел запроса помечает этот использованный временной такт как полезное время — ServiceTime
и все данные, вставленные до ServiceTime
, видны узлу запроса.
В дополнение к ServiceTime
, Milvus также использует тип временной метки - гарантированную временную метку (GuaranteeTS
), чтобы удовлетворить потребность в различных уровнях согласованности и доступности для разных пользователей. Это означает, что пользователи векторной базы данных Milvus могут указать GuaranteeTs
, чтобы информировать узлы запроса о том, что все данные до GuaranteeTs
должны быть видны и задействованы при выполнении поиска или запроса.
Обычно есть два сценария, когда узел запроса выполняет поисковый запрос в базе данных векторов Milvus.
Сценарий 1. Немедленное выполнение поискового запроса
Как показано на рисунке ниже, если GuaranteeTs
меньше ServiceTime
, узлы запроса могут немедленно выполнить поисковый запрос.
Сценарий 2: Дождитесь «ServiceTime › GuaranteeTs»
Если GuaranteeTs
больше, чем ServiceTime
, узлы запроса должны продолжать потреблять такт времени из очереди сообщений. Поисковые запросы не могут быть выполнены до тех пор, пока ServiceTime
не превысит GuaranteeTs
.
Уровни согласованности
Таким образом, GuaranteeTs
можно настроить в поисковом запросе для достижения указанного вами уровня согласованности. GuaranteeTs
с большим значением обеспечивает строгую согласованность за счет высокой задержки поиска. А GuaranteeTs
с небольшим значением уменьшает задержку поиска, но ухудшает видимость данных.
GuaranteeTs
в Milvus представляет собой гибридный формат метки времени. И пользователь понятия не имеет о TSO внутри Milvus. Поэтому указание значения GuaranteeTs
является слишком сложной задачей для пользователей. Чтобы избавить пользователей от хлопот и обеспечить оптимальное взаимодействие с пользователем, Milvus требует от пользователей только выбора определенного уровня согласованности, а векторная база данных Milvus автоматически обрабатывает значение GuaranteeTs
для пользователей. То есть пользователю Milvus нужно выбрать только один из четырех уровней согласованности: Strong
, Bounded
, Session
и Eventually
. И каждому уровню согласованности соответствует определенное значение GuaranteeTs
.
На рисунке ниже показаны GuaranteeTs
для каждого из четырех уровней согласованности в векторной базе данных Milvus.
База данных векторов Milvus поддерживает четыре уровня согласованности:
CONSISTENCY_STRONG
:GuaranteeTs
устанавливается на то же значение, что и последняя системная временная метка, и узлы запросов ждут, пока время обслуживания не перейдет к последней системной временной метке, чтобы обработать запрос на поиск или запрос.CONSISTENCY_EVENTUALLY
:GuaranteeTs
устанавливается на значение, незначительно меньшее, чем последняя временная метка системы, чтобы пропустить проверку согласованности. Узлы запроса выполняют поиск непосредственно в существующем представлении данных.CONSISTENCY_BOUNDED
:GuaranteeTs
устанавливается на значение, относительно меньшее, чем последняя временная метка системы, и узлы запроса выполняют поиск в менее обновленном представлении данных.CONSISTENCY_SESSION
: клиент использует отметку времени последней операции записи в качествеGuaranteeTs
, чтобы каждый клиент мог, по крайней мере, получить данные, вставленные им самим.
Как настроить уровень согласованности в Milvus?
Milvus поддерживает настройку уровня согласованности при создании коллекции или проведении поиска или запроса.
Провести поиск сходства векторов
Чтобы выполнить поиск сходства векторов с желаемым уровнем согласованности, просто установите значение параметра consistency_level
как Strong
, Bounded
, Session
или Eventually
. Если вы не зададите значение параметра consistency_level
, уровень согласованности по умолчанию будет Bounded
. В примере выполняется поиск сходства векторов с согласованностью Strong
.
results = collection.search(
data=[[0.1, 0.2]],
anns_field="book_intro",
param=search_params,
limit=10,
expr=None,
consistency_level="Strong"
)
Выполнение векторного запроса
Аналогично поиску сходства векторов, вы можете указать значение параметра consistency_level
при выполнении векторного запроса. В примере выполняется векторный запрос с согласованностью Strong
.
res = collection.query(
expr = "book_id in [2,4,6,8]",
output_fields = ["book_id", "book_intro"],
consistency_level="Strong"
)
Что дальше
Вместе с официальным выпуском Milvus 2.1 мы подготовили серию блогов, рассказывающих о новых функциях. Подробнее читайте в этой серии блогов:
- Как использовать строковые данные для расширения возможностей приложений поиска сходства
- Использование встроенного Milvus для мгновенной установки и запуска Milvus с Python
- Увеличьте скорость чтения базы данных векторов с помощью реплик в памяти
- Понимание уровня согласованности в базе данных Milvus Vector
- Понимание уровня согласованности в базе данных векторов Milvus (Часть II)
- Как база данных Milvus Vector обеспечивает безопасность данных?