pgvector, Qdrant, Pinecone или Weaviate: сравнение векторных БД
Практика3 минРедакция Innovialabs
Коротко
Если у вас уже есть PostgreSQL и данных немного — начните с pgvector. Для крупного поиска со сложными фильтрами и своим хостингом подойдёт Qdrant, для полностью управляемого сервиса без DevOps — Pinecone, для встроенного гибридного поиска — Weaviate.
Короткий ответ
- pgvector — расширение PostgreSQL. Лучший старт, если Postgres уже есть, а векторов не слишком много.
- Qdrant — специализированная open-source векторная БД. Сильна в фильтрации и производительности, можно разворачивать у себя или в облаке.
- Pinecone — только управляемый облачный сервис. Минимум администрирования, но данные и инфраструктура у провайдера.
- Weaviate — open-source БД с акцентом на гибридный поиск и встроенные модули векторизации; есть self-hosted и облачный вариант.
Сравнение по ключевым параметрам
| pgvector | Qdrant | Pinecone | Weaviate | |
|---|---|---|---|---|
| Тип | Расширение Postgres | Отдельная БД | Управляемый сервис | Отдельная БД |
| Self-hosted | Да | Да | Нет | Да |
| Облачный вариант | У провайдеров Postgres | Да | Да (единственный) | Да |
| Фильтрация | SQL WHERE, JOIN | Фильтры по payload, встроенные в поиск | Фильтры по метаданным | Фильтры по свойствам |
| Гибридный поиск | Через полнотекстовый поиск Postgres | Через sparse-векторы | Поддерживается | Встроенный |
| Порог входа | Низкий, если знаете SQL | Средний | Низкий | Средний |
Установка и эксплуатация
pgvector ставится как расширение — новая система не нужна:
CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE chunks (id bigserial PRIMARY KEY, content text, embedding vector(1024));
CREATE INDEX ON chunks USING hnsw (embedding vector_cosine_ops);
Бэкапы, права, репликация — всё как у обычного Postgres. Размерность в примере должна совпадать с вашей моделью.
Qdrant и Weaviate запускаются в Docker одной командой, но это отдельный сервис: его нужно мониторить, бэкапить и обновлять.
Pinecone не требует серверов: создаёте индекс через API или консоль и работаете. Взамен — зависимость от одного провайдера и хранение данных за его пределами.
Фильтрация
В RAG фильтры обязательны: права доступа, отдел, язык, дата. Здесь есть нюанс:
- В pgvector фильтр — это обычный
WHERE. Удобно, но при очень избирательных фильтрах приблизительный поиск может вернуть меньше результатов, чем ожидалось; это нужно проверять и настраивать. - Qdrant учитывает фильтры прямо при обходе индекса и создаёт индексы по полям payload — сильная сторона для сложных условий.
- Pinecone и Weaviate также поддерживают фильтрацию по метаданным вместе с векторным поиском.
Масштабирование
- pgvector масштабируется как Postgres: вертикально, read-реплики, партиционирование. Для очень больших индексов HNSW требует много памяти.
- Qdrant и Weaviate поддерживают шардирование и репликацию в кластере.
- Pinecone масштабируется провайдером, вы управляете только параметрами индекса.
Из чего складывается цена
Точные тарифы меняются, поэтому считайте по факторам:
- объём: число векторов × размерность — определяет память и диск;
- нагрузка: запросы в секунду и частота обновлений;
- модель оплаты: за сервер (self-hosted) или за хранение и операции (управляемые сервисы);
- скрытые расходы: время инженера на администрирование self-hosted решения.
Self-hosted обычно выгоднее при стабильной нагрузке и наличии DevOps, управляемый сервис — когда команда маленькая и важнее скорость запуска.
Что выбрать под размер проекта
Небольшой проект или MVP (корпоративная база знаний, каталог): pgvector. Одна база для данных и векторов, транзакции, привычные инструменты.
Средний и крупный поиск со сложными фильтрами и требованием хранить данные у себя: Qdrant или Weaviate. Weaviate стоит рассмотреть, если гибридный поиск — ключевое требование.
Команда без DevOps, которой нужен быстрый запуск и не важно, где лежат данные: Pinecone.
Частые ошибки
- Ставить отдельную векторную БД, когда хватило бы pgvector.
- Не проверять качество поиска с фильтрами на реальных данных.
- Забывать про бэкапы self-hosted векторной БД.
- Хранить только векторы без исходного текста и метаданных.