🚀 Попробуйте Zilliz Cloud, полностью управляемый Milvus, бесплатно — ощутите 10-кратное увеличение производительности! Попробовать сейчас>

milvus-logo
LFAI
  • Home
  • Blog
  • Понимание уровня согласованности в базе данных Milvus Vector

Понимание уровня согласованности в базе данных Milvus Vector

  • Engineering
August 29, 2022
Chenglong Li

Cover_image Cover_image

Эта статья написана Ченглонг Ли (Chenglong Li ) и переработана Анжелой Ни (Angela Ni).

Вы когда-нибудь задумывались, почему иногда данные, которые вы удалили из векторной базы данных Mlivus, все равно появляются в результатах поиска?

Вполне вероятно, что причина в том, что вы не установили соответствующий уровень согласованности для своего приложения. Уровень согласованности в распределенной векторной базе данных очень важен, поскольку он определяет, в какой момент определенная запись данных может быть прочитана системой.

Поэтому в этой статье мы постараемся раскрыть концепцию согласованности и рассмотреть уровни согласованности, поддерживаемые векторной базой данных Milvus.

Перейти к разделу:

Что такое согласованность

Прежде чем начать, нам необходимо прояснить значение термина "согласованность" в этой статье, поскольку слово "согласованность" является перегруженным термином в компьютерной индустрии. Под согласованностью в распределенной базе данных понимается свойство, которое обеспечивает одинаковое представление данных на каждом узле или реплике при записи или чтении данных в определенный момент времени. Таким образом, здесь мы говорим о согласованности, как в теореме CAP.

В современном мире для обслуживания крупных онлайн-компаний обычно используется несколько реплик. Например, гигант электронной коммерции Amazon реплицирует данные о своих заказах или SKU в нескольких центрах обработки данных, зонах или даже странах, чтобы обеспечить высокую доступность системы в случае сбоя или отказа. Это ставит перед системой непростую задачу - согласованность данных в нескольких репликах. Без согласованности данных велика вероятность того, что удаленный товар в корзине Amazon появится снова, что вызовет неприятные ощущения у пользователей.

Следовательно, для разных приложений нужны разные уровни согласованности данных. К счастью, Milvus, база данных для искусственного интеллекта, предлагает гибкий уровень согласованности, и вы можете установить тот уровень согласованности, который лучше всего подходит для вашего приложения.

Согласованность в векторной базе данных Milvus

Концепция уровня согласованности была впервые введена с выходом Milvus 2.0. Версия Milvus 1.0 не была распределенной векторной базой данных, поэтому тогда мы не использовали настраиваемые уровни согласованности. Milvus 1.0 обновляет данные каждую секунду, что означает, что новые данные становятся видны практически сразу после их вставки, и Milvus считывает наиболее обновленное представление данных именно в тот момент, когда поступает запрос на поиск или запрос векторного сходства.

Однако в версии 2.0 Milvus был подвергнут рефакторингу, и Milvus 2.0 представляет собой распределенную векторную базу данных, основанную на механизме pub-sub. Теорема PACELC указывает на то, что распределенная система должна находить компромисс между согласованностью, доступностью и задержкой. Кроме того, различные уровни согласованности служат для различных сценариев. Поэтому в Milvus 2.0 была введена концепция согласованности, которая поддерживает настройку уровней согласованности.

Четыре уровня согласованности в векторной базе данных Milvus

Milvus поддерживает четыре уровня согласованности: сильную, ограниченную, сессионную и временную. Пользователь Milvus может указать уровень согласованности при создании коллекции или выполнении поиска или запроса векторного сходства. В этом разделе мы продолжим объяснять, чем отличаются эти четыре уровня согласованности и для какого сценария они лучше всего подходят.

Strong

Strong - это самый высокий и самый строгий уровень согласованности. Он гарантирует, что пользователи смогут прочитать самую последнюю версию данных.

Strong Strong

Согласно теореме PACELC, если уровень согласованности установлен на сильный, то задержка увеличится. Поэтому мы рекомендуем выбирать сильную согласованность при функциональном тестировании, чтобы обеспечить точность результатов тестирования. Кроме того, сильная согласованность лучше всего подходит для приложений, в которых предъявляются жесткие требования к согласованности данных ценой снижения скорости поиска. Примером может служить финансовая онлайн-система, работающая с оплатой заказов и выставлением счетов.

Ограниченная неизменность

Ограниченная неизменность, как следует из названия, допускает непоследовательность данных в течение определенного периода времени. Однако, как правило, данные всегда глобально согласованы вне этого периода времени.

Bounded_staleness Ограниченная_стабильность

Ограниченная неизменность подходит для сценариев, в которых необходимо контролировать задержку поиска и допускать спорадическую невидимость данных. Например, в рекомендательных системах, таких как системы рекомендаций видео, невидимость данных время от времени оказывает действительно небольшое влияние на общий коэффициент отзыва, но может значительно повысить производительность рекомендательной системы. Примером может служить приложение для отслеживания статуса ваших онлайн-заказов.

Сессия

Сессия гарантирует, что все записанные данные могут быть немедленно восприняты при чтении в течение той же сессии. Другими словами, когда вы записываете данные через один клиент, вновь вставленные данные мгновенно становятся доступными для поиска.

Session Сессия

Мы рекомендуем выбирать сеанс в качестве уровня согласованности для тех сценариев, где высока потребность в согласованности данных в одной и той же сессии. Примером может служить удаление данных о записи в книге из библиотечной системы, причем после подтверждения удаления и обновления страницы (в другой сессии) книга больше не должна отображаться в результатах поиска.

В конечном итоге

Порядок чтения и записи не гарантируется, и реплики в конечном итоге сходятся к одному и тому же состоянию, если больше не выполнять никаких операций записи. При эвентуальной согласованности реплики начинают работать с запросами на чтение с последними обновленными значениями. Эвентуальная согласованность - самый слабый уровень из четырех.

Eventual Eventual

Однако, согласно теореме PACELC, задержка поиска может быть значительно сокращена, если пожертвовать согласованностью. Поэтому эвентуальная согласованность лучше всего подходит для сценариев, в которых нет высоких требований к согласованности данных, но требуется молниеносная производительность поиска. В качестве примера можно привести поиск отзывов и оценок товаров на Amazon с использованием эвентуальной согласованности.

Конечная сноска

Итак, возвращаясь к вопросу, поднятому в начале статьи, можно сказать, что удаленные данные все еще возвращаются в результатах поиска, потому что пользователь не выбрал нужный уровень согласованности. По умолчанию для уровня согласованности в векторной базе данных Milvus используется значение bounded staleness (Bounded). Поэтому чтение данных может запаздывать, и Milvus может считать данные до того, как вы выполнили операции удаления во время поиска или запроса по сходству. Однако эту проблему легко решить. Все, что вам нужно сделать, - это настроить уровень согласованности при создании коллекции или выполнении поиска или запроса векторного сходства. Просто!

В следующем посте мы раскроем механизм и объясним, как в векторной базе данных Milvus достигаются различные уровни согласованности. Оставайтесь с нами!

Что дальше

После официального выхода Milvus 2.1 мы подготовили серию блогов, в которых рассказываем о новых возможностях. Читайте подробнее в этой серии блогов:

Like the article? Spread the word

Продолжить чтение