К основному содержимому

Векторные базы данных: сравнение Qdrant, Weaviate и Milvus

AI-агенты на VDS · 29.09.2026

Векторная база данных нужна там, где обычный WHERE title LIKE '%...%' не находит смысл, а находит только точное совпадение букв. Эмбеддинг превращает текст, картинку или аудио в вектор чисел, а векторная БД быстро ищет соседние по смыслу записи среди миллионов. Три самых частых кандидата на VDS — Qdrant, Weaviate и Milvus. Разберём, чем они отличаются на практике и что поставить в вашем случае.

Что такое векторная база данных и зачем она нужна

Классический индекс ищет точное вхождение строки. Векторный индекс ищет ближайшие точки в многомерном пространстве по метрике расстояния — косинусной близости или евклидовой. Запрос тоже превращается в вектор той же модели эмбеддингов, а база возвращает top-k ближайших записей за миллисекунды даже на десятках миллионов векторов.

Такой поиск лежит в основе RAG-систем, рекомендаций, дедупликации и поиска похожих изображений. Выбор конкретной базы влияет на потребление RAM, скорость записи и сложность эксплуатации на своём сервере.

Qdrant: простота и низкий порог входа

Qdrant написан на Rust, ставится одним бинарником или Docker-контейнером и не требует внешних зависимостей вроде ZooKeeper или etcd. Хранит векторы вместе с payload-полями и поддерживает фильтрацию по метаданным прямо во время поиска, а не после него.

docker run -d --name qdrant \
  -p 6333:6333 -p 6334:6334 \
  -v /opt/qdrant/storage:/qdrant/storage \
  qdrant/qdrant:latest

На VDS с 4 ГБ RAM Qdrant спокойно держит коллекцию на пару миллионов векторов размерности 768. Подробная установка описана в статье про настройку Qdrant на VPS.

Weaviate: модули и встроенная векторизация

Weaviate написан на Go и добавляет слой модулей: можно подключить векторизацию текста через внешний API прямо внутри базы, не гоняя данные через отдельный сервис эмбеддингов. Схема данных строится через классы с типизированными свойствами, что удобно, если у записи много атрибутов помимо вектора.

Из минусов — Weaviate требовательнее к памяти при большом числе классов и активнее использует GraphQL-интерфейс, который придётся освоить отдельно от привычного REST.

Milvus: масштабирование для больших нагрузок

Milvus рассчитан на десятки и сотни миллионов векторов и распределённую архитектуру: отдельные узлы для приёма записи, индексации и запросов. Такая схема оправдана на кластере из нескольких серверов, но на одном VDS добавляет накладные расходы — Milvus в docker-compose поднимает etcd и MinIO как обязательные зависимости.

wget https://github.com/milvus-io/milvus/releases/download/v2.4.0/milvus-standalone-docker-compose.yml -O docker-compose.yml
docker compose up -d

Standalone-режим Milvus снимает часть сложности, но всё равно потребляет больше RAM в простое, чем Qdrant или Weaviate на той же задаче.

Сравнение по ключевым параметрам

ПараметрQdrantWeaviateMilvus
Язык реализацииRustGoGo + C++
Зависимости для стартанетнетetcd, MinIO
RAM в простоеот 200 МБот 400 МБот 1.5 ГБ
Фильтрация по payloadда, встроенада, через классыда, через схему
Лучше всего подходитодин сервер, RAGсложная схема данныхкластер, сотни млн векторов

Что поставить на свой VDS

Для чат-бота с базой знаний, поиска по каталогу товаров или личного проекта на VDS с 4-8 ГБ RAM разумный выбор — Qdrant: минимум движущихся частей, один процесс, понятный REST API. Если данные уже структурированы как объекты со множеством связанных свойств и хочется встроенную векторизацию — берите Weaviate. Milvus имеет смысл только при явном плане роста до кластера и десятков миллионов записей, иначе его etcd и MinIO будут просто съедать ресурсы впустую.

Как альтернативу без отдельного сервиса стоит рассмотреть pgvector в PostgreSQL, если у проекта уже есть эта СУБД и нагрузка не превышает пары миллионов записей.

  • До 2-5 млн векторов, один сервер — Qdrant.
  • Сложная схема объектов, нужна встроенная векторизация — Weaviate.
  • Кластер, десятки-сотни миллионов векторов — Milvus.
  • Проект уже на PostgreSQL, нагрузка небольшая — pgvector вместо отдельной БД.

Чек-лист перед выбором

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

  • Посчитайте прогнозируемое число векторов и их размерность.
  • Проверьте свободную RAM: Milvus без запаса памяти будет падать по OOM.
  • Решите, нужна ли фильтрация по полям вместе с векторным поиском.
  • Начните с Qdrant, если сомневаетесь — миграция на более тяжёлое решение проще, чем откат с него.
← Назад в базу знаний Задать вопрос поддержке