Понимание уровня согласованности в базе данных Milvus Vector - часть II
Cover_image
Эта статья написана Джикуаном Лонгом и переработана Анжелой Ни.
В предыдущем блоге о согласованности мы объяснили, что подразумевается под согласованностью в распределенной векторной базе данных, рассказали о четырех уровнях согласованности - сильном, ограниченном, сессионном и конечном, поддерживаемых в векторной базе данных Milvus, и объяснили, какой сценарий применения лучше всего подходит для каждого уровня согласованности.
В этом посте мы продолжим рассматривать механизм, который позволяет пользователям векторной базы данных Milvus гибко выбирать идеальный уровень согласованности для различных сценариев применения. Мы также предоставим базовое руководство по настройке уровня согласованности в векторной базе данных Milvus.
Перейти к:
- Базовый механизм временных меток
- Гарантированная временная метка
- Уровни согласованности
- Как настроить уровень согласованности в Milvus?
Базовый механизм временных тиков
Milvus использует механизм временных тиков для обеспечения различных уровней согласованности при выполнении векторного поиска или запроса. Time Tick - это водяной знак Milvus, который действует как часы в Milvus и указывает, в какой момент времени находится система Milvus. Всякий раз, когда в векторную базу данных Milvus отправляется запрос на языке манипулирования данными (DML), он присваивает запросу временную метку. Как показано на рисунке ниже, при вставке новых данных, например, в очередь сообщений, Milvus не только проставляет временную метку на этих вставленных данных, но и вставляет временные метки через регулярный интервал.
временная метка
В качестве примера возьмем syncTs1
на рисунке выше. Когда последующие потребители, например узлы запросов, видят syncTs1
, компоненты-потребители понимают, что все данные, вставленные ранее syncTs1
, были потреблены. Другими словами, запросы на вставку данных, чьи значения временной метки меньше, чем syncTs1
, больше не будут появляться в очереди сообщений.
Гарантированная временная метка
Как уже говорилось в предыдущем разделе, компоненты-потребители, такие как узлы запросов, постоянно получают сообщения о запросах на вставку данных и временных метках из очереди сообщений. Каждый раз, когда потребляется временная метка, узел запроса отмечает эту потребленную временную метку как обслуживаемую - ServiceTime
, и все данные, вставленные до ServiceTime
, видны узлу запроса.
В дополнение к ServiceTime
в Milvus также принят тип временной метки - гарантийная временная метка (GuaranteeTS
), чтобы удовлетворить потребности различных пользователей в различных уровнях согласованности и доступности. Это означает, что пользователи векторной базы данных Milvus могут указать GuaranteeTs
, чтобы сообщить узлам запроса, что все данные до GuaranteeTs
должны быть видны и задействованы при выполнении поиска или запроса.
Обычно существует два сценария, когда узел запроса выполняет поисковый запрос в векторной базе данных Milvus.
Сценарий 1: Выполнение поискового запроса немедленно
Как показано на рисунке ниже, если GuaranteeTs
меньше, чем ServiceTime
, узлы запроса могут выполнить поисковый запрос немедленно.
выполнить_немедленно
Сценарий 2: Подождать, пока "ServiceTime > GuaranteeTs".
Если GuaranteeTs
больше, чем ServiceTime
, узлы запросов должны продолжать потреблять временные тики из очереди сообщений. Поисковые запросы не могут быть выполнены до тех пор, пока ServiceTime
не станет больше GuaranteeTs
.
wait_search
Уровни согласованности
Таким образом, значение 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 мы подготовили серию блогов, в которых рассказываем о новых возможностях. Подробнее читайте в этой серии блогов:
- Как использовать строковые данные для расширения возможностей приложений поиска по сходству
- Использование Embedded Milvus для мгновенной установки и запуска Milvus с Python
- Увеличение пропускной способности базы данных Vector с помощью реплик в памяти
- Понимание уровня согласованности в векторной базе данных Milvus
- Понимание уровня согласованности в векторной базе данных Milvus (часть II)
- Как база данных Milvus Vector обеспечивает безопасность данных?
- Базовый механизм временных тиков
- Гарантированная временная метка
- Уровни согласованности
- Как настроить уровень согласованности в Milvus?
- Что дальше
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word