Понимание моделей согласованности для векторных баз данных
Распределённые системы для ваших приложений векторного поиска становятся незаменимыми — от масштабируемости и отказоустойчивости до повышенной производительности и глобальной доступности. Фундаментальные принципы, которые делают распределённые системы основой устойчивых, высокопроизводительных приложений, требуют от нас учитывать компромиссы между согласованностью, доступностью и задержкой.
Например, согласованность критически важна для определённых сценариев использования векторного поиска в вашем распределённом приложении. Разве не было бы ужасно, если бы вы запросили данные, которые ожидали там увидеть, но их там не оказалось? Это произошло бы, если бы ваши данные не были согласованы между всеми репликами в ваших распределённых системах. На первый взгляд это звучит просто. Конечно, мои данные должны быть там после того, как я их туда поместил и реплицировал на несколько узлов. Но когда они должны там появиться? Как это обеспечить?
В ответ на проблему согласованности полностью распределённая векторная база данных Milvus предлагает настраиваемую согласованность. У Milvus уникальная архитектура, которая позволяет масштабировать способ записи ваших данных и обеспечивать согласованность без необходимости использовать дополнительные инструменты. Используя распределённую инфраструктуру, Milvus представляет собой слабосвязанную систему pub-sub, что означает, что согласованностью можно легко управлять и настраивать её с помощью временных меток.
В этой статье мы рассмотрим:
Что такое согласованность?
- Требования к согласованности векторных баз данных
Согласованность, доступность и разделения
Какие уровни согласованности предлагает Milvus?
Итоговая согласованность
Сессионная согласованность
Ограниченная согласованность
Строгая согласованность
Краткое изложение понимания согласованности для векторных баз данных
Что такое согласованность?
Одно из определений согласованности — это «достижение уровня производительности, качество которого со временем существенно не меняется». В отношении согласованности вашей распределённой базы данных это означает, что она предоставляет вам наиболее точные и актуальные данные, которые вы запрашиваете. Именно поэтому Milvus предлагает возможность «настраивать» согласованность в зависимости от того, насколько свежими должны быть данные, к которым вам нужен доступ.
Разные типы баз данных имеют дополнительные требования к согласованности. Например, нереляционные базы данных часто имеют требования «итоговой» или ослабленной ACID (атомарность, согласованность, изоляция и долговечность). При работе с базами данных NoSQL вы можете получить частично обновлённые данные.
С другой стороны, SQL-базы данных, соответствующие ACID, такие как Postgres, имеют другие требования к согласованности. Эти базы данных гарантируют, что вы не получите частично обновлённые данные, обеспечивая согласованность на уровне изменения. Поэтому при запросе вы должны дождаться завершения всего изменения, чтобы получить данные, относящиеся к этому изменению.
Требования к согласованности векторных баз данных
Между тем векторные базы данных имеют иные требования к согласованности, чем реляционные или нереляционные базы данных. У вас могут быть корректные данные ещё до полного завершения пакетного изменения. Однако у вас не может быть частично обновлённых данных. Векторные базы данных работают в рамках теоремы PACELC. Именно это и делает Milvus благодаря своей схеме pub-sub. Каждая строка «публикуется» через конвейер записи и «подписывается» необходимыми узлами. Такая схема позволяет выполнять поиск или запросы в Milvus и получать результаты на основе различий во временных метках.
Согласованность, доступность и разделения (CAP)
Теорема CAP — это концепция информатики, утверждающая, что существует компромисс между согласованностью, доступностью и устойчивостью к разделению. Вы можете выбрать только два из трёх. При возникновении сетевого разделения необходимо выбирать между доступностью и согласованностью. Система, требующая высокой доступности данных, нуждается в репликах, что затрудняет обеспечение согласованности.
Теорема PACELC — это расширение теоремы CAP. Это теорема CAP + else + latency + consistency. Она утверждает, что в системе без сетевых разделений вам не нужно беспокоиться о компромиссах между доступностью и согласованностью. Однако вам всё равно приходится выбирать между задержкой и согласованностью, поскольку нужно ждать синхронизации данных.
Какие уровни согласованности предлагает Milvus?
Milvus предлагает четыре разных уровня согласованности. В порядке от наименее до наиболее согласованного это: Eventual, Session, Bounded и Strong. Итоговая согласованность означает, что вы готовы ждать, пока это произойдёт “... whenever”. Строгая согласованность означает, что вы хотите включить все данные в момент отправки запроса. Сессионная и ограниченная находятся посередине. Давайте рассмотрим подробнее.
Можете угадать, какие эмодзи соответствуют каким уровням?
Итоговая согласованность
Итоговая (или “Eventually”) согласованность означает, что данные в конечном итоге станут согласованными во всех репликах. Мы используем итоговую согласованность, когда нам важнее скорость приложения, чем самые актуальные данные или повторяемые запросы. Для Milvus этот тип согласованности означает, что мы реализуем требование согласованности, пропуская проверку временной метки при чтении.
Примером использования такого уровня согласованности может быть получение отзывов о продукте. Большинство пользователей не будут читать все отзывы о продукте, поэтому получение самых свежих отзывов не имеет высокой важности. Если вы хотите создать коллекцию с таким уровнем согласованности, код ниже показывает, как создать коллекцию с уровнем согласованности “Eventually” в Milvus. Важно отметить, что consistency_level ожидает ключевое слово “Eventually.”
Сессионная согласованность
Сессионная согласованность означает, что каждая сессия актуальна как минимум относительно собственных записей. У сессии может быть несколько реплик, так что это первый компромисс между задержкой и согласованностью. Мы используем сессионную согласованность, когда нам нужно сохранять наше состояние только один раз за сессию. Milvus реализует этот тип согласованности, устанавливая требуемую временную метку на время последней записи.
На практике вы можете использовать сессионную согласованность, когда вам нужно, чтобы каждый экземпляр клиент-сервер обладал согласованностью данных. Примером является сервер видеоигры. Вы не хотите позволять игрокам выполнять бесконечные глитчи, поэтому должны обеспечить согласованность внутри каждого экземпляра или сессии. Код ниже показывает, как выполнить векторный поиск с использованием уровня согласованности “Session.”
Ограниченная согласованность
Ограниченная согласованность (или ограниченная устаревшесть) на один шаг “более согласованна”, чем сессионная согласованность. При уровне согласованности “Session” другие экземпляры, или сессии, рассматриваются как в конечном итоге согласованные. Ограниченная устаревшесть принуждает каждый экземпляр и реплику синхронизироваться в течение определённого периода.
Примером ограниченной устаревшести может быть рекомендательная система видео. Пользователям не нужны самые новые видео немедленно, но они должны увидеть их вскоре. Изменения пользователя также должны оперативно распространяться за пределы его сессии. Код ниже показывает, как выполнять поиск в Milvus с требованием ограниченной согласованности.
Строгая согласованность
Строгая согласованность делает данные доступными в момент их вставки. Разумеется, такая согласованность связана с компромиссом по задержке — мы должны ждать, пока система изменится. На практике Milvus реализует эту согласованность, устанавливая требуемую временную метку чтения на последнее обновление в системе. Это повышает нашу задержку поиска минимум до 200 мс.
Примером строгой согласованности может быть обнаружение мошенничества. Если кто-то использует ваш банковский счёт для мошенничества, вы должны узнать об этом и остановить это немедленно. Приложениям, которым нужна настройка типа read-after-write, требуется строгая согласованность. Код ниже показывает, как выполнить запрос к коллекции (фильтрованный поиск без векторов) с требованием строгой согласованности.
Краткое изложение понимания согласованности для векторных баз данных
Согласованность данных — один из самых важных аспектов, которые следует учитывать при создании распределённого приложения. Каждому приложению нужны данные, и для любых данных необходимы определённые требования к согласованности. Что касается векторных данных, мы должны оценивать согласованность данных с точки зрения требований к построчной согласованности.
В соответствии с этими требованиями Milvus предлагает четыре уровня согласованности на основе проставления временных меток для данных. Обратите внимание, что это возможно только для построчной согласованности и не реализовано в базах данных SQL или NoSQL. Четыре уровня согласованности, от наиболее до наименее согласованного, — это strong, bound, session и eventually.
Строгая согласованность гарантирует, что все самые актуальные данные доступны по всей системе (почти) немедленно. Этот уровень согласованности достигается путём обновления временной метки до временной метки последней вставки, что гарантирует возможность запрашивать все данные, вставленные до момента запроса.
Ограниченная согласованность гарантирует, что все самые актуальные данные доступны по всей системе в течение фиксированного периода. Ограниченная согласованность устанавливает временную метку для проверки в пределах определённого периода от момента запроса. Таким образом, у нас есть все данные в пределах ограниченного периода. Ограниченная согласованность является настройкой по умолчанию в Milvus.
Сессионная согласованность гарантирует, что все самые актуальные данные доступны в текущей сессии, в которой мы работаем. Milvus достигает этого уровня согласованности, устанавливая временную метку для каждого экземпляра на момент последней вставки данных этим экземпляром. Таким образом, у нас есть все данные, вставленные (как минимум) в экземпляре, который мы используем.
Наконец, конечная согласованность (с ключевым словом “Eventually”) гарантирует, что в конечном итоге данные по всей системе станут согласованными. Данные могут быстро распространяться и синхронизируются с репликами с той скоростью, которая имеет смысл. Хотя мы жертвуем некоторой согласованностью данных, взамен получаем лучшую доступность и производительность. На практике этот уровень согласованности не занимает много времени. Milvus реализует конечную согласованность, пропуская проверку временной метки и немедленно выполняя поисковые операции или запросы.
Читать далее

Zilliz Skills Breakdown: How AI Agents Master Vector Databases
Zilliz's Milvus Skill (pymilvus, 7 files) and Zilliz Cloud Skill (zilliz-cli, 14 modules) bring vector-DB dev and ops into one Claude Code session.

3 Easiest Ways to Use Claude Code on Your Mobile Phone
Run Claude Code from your phone with Remote Control, Happy Coder, or SSH + Tailscale. Comparison table, setup steps, and tools for typing, memory, and parallel tasks.

Introducing DeepSearcher: A Local Open Source Deep Research
In contrast to OpenAI’s Deep Research, this example ran locally, using only open-source models and tools like Milvus and LangChain.



