pgvector против Qdrant: бенчмарк на 100 000 векторов размерности 1536

Machine Learning Mastery опубликовал практический бенчмарк расширения pgvector для Postgres и выделенной векторной базы Qdrant. Оба запускаются в Docker на ноутбуке, получают одни и те же 100 000 нормализованных векторов размерности 1536 и одинаковые параметры индекса HNSW. Главное в методике: m=16, ef_construction=64 и ef_search=64 выставлены одинаково, а запросы идут по 200 свежим векторам, которых нет в датасете. Так сравнение сводится к архитектуре, а не к разным настройкам. Замеряются p50, p95, p99 и QPS. • pgvector 0.8.6 работает с Postgres 13+ и поддерживает пять метрик расстояния • В сравнительный обзор попали Pinecone, Qdrant, Weaviate, Milvus и ChromaDB • Для запуска хватит 8 ГБ RAM и Python 3.10+

AI-обработка оригинала Machine Learning Mastery; редакция Hamidun News
pgvector против Qdrant: бенчмарк на 100 000 векторов размерности 1536
Источник: Machine Learning Mastery. Коллаж: Hamidun News.
Слушать статью
Паспорт материала и цифры
ПараметрДанные
ПервоисточникMachine Learning Mastery ↗
Главный редактор
Ключевой факт #1pgvector 0.8.6 работает с Postgres 13+ и поддерживает пять метрик расстояния
Ключевой факт #2В сравнительный обзор попали Pinecone, Qdrant, Weaviate, Milvus и ChromaDB
Ключевой факт #3Для запуска хватит 8 ГБ RAM и Python 3.10+

Спор «Postgres с расширением или отдельная векторная база» обычно ведётся на уровне уверенных заявлений. Machine Learning Mastery предложил заменить их замером: pgvector и Qdrant запускаются в Docker на одной машине, получают одинаковые 100 000 векторов размерности 1536 (как у OpenAI text-embedding-3-small) и одинаковые настройки индекса HNSW. Результат читается в четырёх метриках: медианная задержка p50, хвосты p95 и p99, а также число запросов в секунду.

Спор, в котором нет цифр

Типичная история выглядит так. Команда во вторник добавляет pgvector в уже работающий Postgres, эмбеддинги лежат рядом с реляционными данными, а один запрос сразу и фильтрует, и ищет похожее. Через полгода приходит письмо от вендора: пора мигрировать на «настоящую» векторную базу, пока не упёрлись в потолок. Бенчмарка в письме нет, есть только уверенность.

pgvector — open-source-расширение для Postgres, текущая версия 0.8.6, поддерживаются Postgres 13 и новее. Оно добавляет нативный тип vector, точный и приближённый поиск ближайших соседей. Вектор хранится в той же таблице, а при желании и в той же строке, что и описываемая им запись, запрашивается обычным SQL. Отдельного сервиса нет, синхронизировать второй источник данных не нужно, сетевого перехода между реляционной и векторной частью тоже нет. Поддерживаются векторы одинарной и половинной точности, бинарные и разреженные, а также пять функций расстояния: L2, скалярное произведение, косинус, L1 и Хэмминг.

Пять выделенных баз, с которыми сравнивают Postgres

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

  • Pinecone — полностью управляемая облачная база без настройки, рассчитана на корпоративный масштаб при минимуме эксплуатации.
  • Qdrant — высокопроизводительная база на Rust, сильна быстрыми запросами со сложной фильтрацией по JSON-payload.
  • Weaviate — open-source-система, ориентированная на ИИ, со встроенной векторизацией и гибридным поиском с BM25.
  • Milvus — распределённая база с GPU-ускорением для массивных нагрузок в миллиарды векторов.
  • ChromaDB — лёгкая встраиваемая база для локального прототипирования и разработки на Python.

Для практического сравнения выбран Qdrant: по нему существует самый подробный и методологически прозрачный публичный бенчмарк против pgvector, на который материал и опирается.

Как устроен честный замер

Postgres 17 с расширением поднимается из образа pgvector/pgvector:pg17, Qdrant — одной командой docker run на портах 6333 и 6334. В обеих системах размерность 1536 и косинусная метрика. Датасет синтетический: 100 000 векторов из нормального распределения с фиксированным seed=42, нормализованных до единичной длины, как это делают реальные модели эмбеддингов. В Qdrant данные заливаются батчами по 1000 точек, в Postgres — через адаптер pgvector-python.

Ключевое решение: индексы идентичны. В pgvector создаётся HNSW с m=16 и ef_construction=64 (его дефолты), в Qdrant задаются те же значения через HnswConfigDiff. Автор прямо пишет, что сравнение при разных параметрах индекса даёт два несопоставимых результата. На стороне запросов hnsw.ef_search также равен 64, лимит выдачи — 10.

Запросы делаются по 200 новым векторам, которых нет в загруженном наборе. Иначе вектор, уже лежащий в индексе, находил бы сам себя на нулевом расстоянии, и замер потерял бы смысл. Время считается через perf_counter, задержки сортируются, p95 и p99 берутся по позициям в отсортированном списке, QPS — как число запросов к общему времени прогона.

Как применить это у себя

Для повторения нужны Docker с Compose, Python 3.10+ и около 8 ГБ свободной памяти. Облачные аккаунты не требуются.

Практическая логика выбора вытекает из самой архитектуры. Если данные и так живут в Postgres, а запрос должен совмещать фильтр по реляционным полям с поиском по сходству, pgvector избавляет от второй системы и синхронизации. Если нужны фильтрация по сложным JSON-полям на высокой скорости, подойдёт Qdrant. Для миллиардных коллекций рассматривают Milvus, для нулевой эксплуатации — Pinecone, для встроенной векторизации и BM25 — Weaviate.

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

Сюжет

Вопросы и ответы по материалу

Что известно по теме: спор, в котором нет цифр?

Типичная история выглядит так. Команда во вторник добавляет pgvector в уже работающий Postgres, эмбеддинги лежат рядом с реляционными данными, а один запрос сразу и фильтрует, и ищет похожее. Через полгода приходит письмо от вендора: пора мигрировать на «настоящую» векторную базу, пока не упёрлись в потолок. Бенчмарка в письме нет, есть только уверенность. pgvector — open-source-расширение для Postgres, текущая версия 0.8.6, поддерживаются Postgres 13 и новее. Оно добавляет нативный тип vector, точный и приближённый поиск ближайших соседей. Вектор хранится в той же таблице,

Что известно по теме: пять выделенных баз, с которыми сравнивают Postgres?

Выделенная векторная база — отдельный сервис со своим процессом и хранилищем, спроектированный под векторный поиск с нуля. Цена такого выбора понятна: новую систему нужно развернуть, мониторить, бэкапить и синхронизировать с источником истины. Автор разбирает пять самых популярных вариантов: Pinecone — полностью управляемая облачная база без настройки, рассчитана на корпоративный масштаб при минимуме эксплуатации. Qdrant — высокопроизводительная база на Rust, сильна быстрыми запросами со сложной фильтрацией по JSON-payload. Weaviate — open-source-система, ориентированная на

Что известно по теме: как устроен честный замер?

Postgres 17 с расширением поднимается из образа pgvector/pgvector:pg17, Qdrant — одной командой docker run на портах 6333 и 6334. В обеих системах размерность 1536 и косинусная метрика. Датасет синтетический: 100 000 векторов из нормального распределения с фиксированным seed=42, нормализованных до единичной длины, как это делают реальные модели эмбеддингов. В Qdrant данные заливаются батчами по 1000 точек, в Postgres — через адаптер pgvector-python. Ключевое решение: индексы идентичны. В pgvector создаётся HNSW с m=16 и ef_construction=64 (его дефолты), в Qdrant задаются те

ЖХ
Жемал Хамидун — CPO Alpina Digital, продакт-менеджер AlpinaGPT. Делает AI-продукты с 2019 года. Hamidun News — pet project, который вырос в production-агрегатор с 6000+ читателей.
✦ Единое AI-пространство · Nomad

Протестируйте новые LLM и мультимодальные модели в одном окне

Платформа Nomad AI (nomadnet.ai) даёт прямой доступ к Claude Opus 5.5, GPT-6, Gemini 3.1, DeepSeek и автономным агентам без VPN, зарубежных карт и зоопарка подписок.

Открыть Nomad AI →Автономный Nomad Agent
Что вы думаете?
Загружаем комментарии…