Кожен проєкт із retrieval-augmented generation рано чи пізно ставить запитання: яку векторну базу обрати? Ринок переповнений — спеціалізовані рушії Qdrant, Weaviate і Milvus, керовані сервіси на кшталт Pinecone і векторні розширення для баз, які ви вже використовуєте, насамперед pgvector для PostgreSQL. Бенчмарки від вендорів рідко відповідають вашому навантаженню. У гайді пояснюємо, чим насправді відрізняються варіанти, які запитання визначають вибір і чому для багатьох бізнес-проєктів відповідь — «PostgreSQL, який у вас уже є».

Що робить векторна база даних

Векторна база зберігає ембеддинги — масиви чисел, що представляють зміст тексту, зображень чи інших даних, — і відповідає на запит «знайди k векторів, найподібніших до цього». Точний пошук порівнює запит із кожним вектором; це прийнятно для десятків тисяч елементів, але надто повільно для мільйонів. Продакшен-системи використовують індекси наближеного пошуку найближчих сусідів (ANN), що жертвують трохи повнотою заради прискорення на порядки.

Поверх цього ядра продакшен-сховищу векторів потрібні:

  • Фільтрація за метаданими: «подібні документи, але лише для орендаря 42, мова uk, оновлені після 2026-01-01».
  • Гібридний пошук: поєднання векторної подібності з релевантністю за ключовими словами (BM25).
  • CRUD і узгодженість: оновлення й видалення документів без перебудови індексу.
  • Експлуатація: бекапи, реплікація, моніторинг, контроль доступу.

Як працюють ANN-індекси, коротко

HNSW (Hierarchical Navigable Small World) будує багаторівневий граф, де кожен вектор пов'язаний із сусідами; пошук починається з розрідженого верхнього рівня й спускається вниз (Malkov & Yashunin, 2016). Він дає чудову повноту й затримку та підтримує інкрементальні вставки, але ціною пам'яті: граф живе в RAM разом із векторами. Ключові параметри: m (зв'язків на вузол), ef_construction (якість побудови) і ef_search (компроміс повноти й швидкості під час запиту).

IVF (inverted file) кластеризує вектори й шукає лише в найближчих кластерах. Він швидше будується й займає менше пам'яті, але повнота залежить від того, скільки кластерів перевіряти, і індекс потребує перенавчання, коли дані змінюються.

Квантизація стискає вектори — скалярна (float32 → int8), продуктова чи бінарна — зменшуючи пам'ять у 4–32 рази ціною певної повноти, яку зазвичай відновлюють повторним ранжуванням топ-кандидатів за повними векторами. Індекси в стилі DiskANN тримають більшість даних на SSD для дуже великих колекцій.

Незалежні порівняння ANN-алгоритмів публікує ann-benchmarks.com. Практичний урок: для чистої продуктивності пошуку вибір індексу й параметрів важить більше, ніж бренд бази.

Учасники порівняння

Варіант Тип Сильні сторони На що зважати
pgvector Розширення PostgreSQL Одна база, SQL-join, транзакції, наявні бекапи й інструменти; HNSW та IVFFlat Дуже великі колекції й інтенсивний пошук із фільтрами потребують тюнінгу; планування vacuum і пам'яті
Qdrant Спеціалізований рушій (Rust), OSS + хмара Потужна фільтрація, інтегрована в HNSW, квантизація, розріджені вектори для гібридного пошуку Ще одна система в експлуатації
Weaviate Спеціалізований рушій (Go), OSS + хмара Вбудований гібридний пошук, модулі векторизації, multi-tenancy Більше споживання пам'яті; специфічна схема
Milvus Розподілений рушій, OSS + хмара Zilliz Мільярди векторів, багато типів індексів, зокрема GPU і DiskANN Операційна складність розподіленої системи
Pinecone Повністю керований SaaS Без експлуатації, serverless-тарифи, зручність для розробників Прив'язка до вендора, місце зберігання даних, вартість у масштабі
Elasticsearch / OpenSearch Пошукові рушії з підтримкою векторів Зрілий BM25 плюс вектори в одному місці Ресурсоємні; векторні можливості залежать від версії

Усі вони достатньо добрі для типових RAG-навантажень. Рішення переважно стосується експлуатації, масштабу й керування даними.

Запитання, що визначають вибір

1. Скільки векторів насправді?

Оцінюйте чесно. Корпоративна база знань на 20 тис. документів, порізаних на 200 тис. фрагментів по 1024 виміри, — це приблизно 800 МБ векторів float32, що комфортно вміщується в один інстанс PostgreSQL. Десять мільйонів фрагментів — це близько 40 ГБ без урахування накладних витрат індексу, і картина змінюється. Сотні мільйонів і мільярди потребують спеціалізованого розподіленого рушія або агресивної квантизації.

2. Наскільки важлива фільтрація?

Multi-tenant SaaS, документи з контролем доступу й пошук по каталогу залежать від фільтрів. Наївне «спершу знайти, потім відфільтрувати» ламається, коли фільтр вибірковий: ви просите топ-10, ANN повертає 10 сусідів, а 9 з них належать іншим орендарям. Рушії по-різному поєднують фільтрацію з індексом. Qdrant і Weaviate інтегрують фільтри в обхід графа; pgvector у свіжих версіях підтримує ітеративні сканування індексу, а також часткові індекси чи партиціювання за орендарем. Тестуйте з реальною вибірковістю ваших фільтрів.

3. Чи потрібен гібридний пошук?

Для бізнес-документів — артикули, номери статей законів, імена, повідомлення про помилки — чистий векторний пошук пропускає точні збіги. Гібридний пошук BM25 плюс вектори зі злиттям через reciprocal rank fusion (Cormack et al., 2009) — варіант за замовчуванням, який ми радимо; див. RAG для бізнесу. Weaviate, Qdrant (розріджені вектори), Elasticsearch і OpenSearch підтримують його нативно; у PostgreSQL поєднуйте pgvector із повнотекстовим пошуком в одному SQL-запиті.

4. Хто це експлуатуватиме?

Спеціалізований рушій — ще одна система зі станом: бекапи, оновлення, моніторинг, патчі безпеки, планування ємності. Якщо ваша команда вже добре експлуатує PostgreSQL — з перевіреними бекапами й відновленням після збоїв, — додавання pgvector майже нічого не коштує операційно. Керований сервіс прибирає експлуатацію, але додає вендора, рахунок, що росте з даними, і питання про місце зберігання даних; див. приватність LLM-застосунків.

5. Як змінюються дані?

Дані, що часто оновлюються (ціни, залишки, тікети), потребують ефективних upsert і видалень. HNSW добре справляється зі вставками; видалення в деяких рушіях залишають «надгробки», що потребують періодичного прибирання чи переіндексації. Масове переембеддингування при зміні моделі ембеддингів — це запланована міграція в будь-якій системі, тож зберігайте сирий текст, щоб мати змогу переембеддити.

Гібридний пошук у PostgreSQL

Компактний приклад поєднання pgvector і повнотекстового пошуку з reciprocal rank fusion:

-- Схема
CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE chunks (
  id bigserial PRIMARY KEY,
  tenant_id int NOT NULL,
  content text NOT NULL,
  tsv tsvector GENERATED ALWAYS AS (to_tsvector('simple', content)) STORED,
  embedding vector(1024) NOT NULL
);
CREATE INDEX ON chunks USING hnsw (embedding vector_cosine_ops) WITH (m = 16, ef_construction = 64);
CREATE INDEX ON chunks USING gin (tsv);
CREATE INDEX ON chunks (tenant_id);

-- Запит: $1 = ембеддинг запиту, $2 = текст запиту, $3 = орендар
WITH vec AS (
  SELECT id, row_number() OVER (ORDER BY embedding <=> $1) AS r
  FROM chunks WHERE tenant_id = $3
  ORDER BY embedding <=> $1 LIMIT 50
), kw AS (
  SELECT id, row_number() OVER (ORDER BY ts_rank(tsv, q) DESC) AS r
  FROM chunks, plainto_tsquery('simple', $2) q
  WHERE tenant_id = $3 AND tsv @@ q
  ORDER BY ts_rank(tsv, q) DESC LIMIT 50
)
SELECT c.id, c.content,
       COALESCE(1.0 / (60 + vec.r), 0) + COALESCE(1.0 / (60 + kw.r), 0) AS score
FROM chunks c
LEFT JOIN vec ON vec.id = c.id
LEFT JOIN kw  ON kw.id  = c.id
WHERE vec.id IS NOT NULL OR kw.id IS NOT NULL
ORDER BY score DESC
LIMIT 10;

Конфігурація 'simple' уникає англійського стемінгу для українського тексту; для кращого повнотекстового пошуку українською розгляньте окремий словник або пошуковий рушій. Налаштовуйте hnsw.ef_search на рівні запиту під потрібну повноту.

Бенчмарк під ваше навантаження

Бенчмарки вендорів оптимізовані під вендора. Проведіть власний — невеликий, але реалістичний:

  1. Візьміть 100–500 реальних запитів з відомими релевантними документами (ваш набір для evals).
  2. Завантажте реальні дані з вашою моделлю ембеддингів і метаданими.
  3. Виміряйте recall@k відносно точного пошуку, p95 затримки з фільтрами, пам'ять і час побудови індексу.
  4. Протестуйте оновлення — вставте й видаліть 10% даних і перевиміряйте.
  5. Оцініть місячну вартість із репліками й бекапами.

Більшість команд з'ясовують, що різниця в наскрізній якості RAG походить від чанкінгу, ембеддингів, гібридного пошуку й переранжування, а не від бази даних. Див. ембеддинги та чанкінг.

Наші рекомендації за замовчуванням

  • До ~5–10 млн векторів і PostgreSQL уже в стеку: pgvector з HNSW, гібридний пошук у SQL. Найпростіша експлуатація, транзакційна узгодженість із бізнес-даними.
  • Інтенсивна фільтрація, multi-tenant у масштабі або потреба в просунутій квантизації: Qdrant чи Weaviate, self-hosted у Kubernetes або як керована хмара.
  • Сотні мільйонів векторів чи пошук із прискоренням на GPU: Milvus/Zilliz.
  • Немає ресурсу на експлуатацію й обмежень щодо місця зберігання даних: Pinecone або інший керований сервіс.

Що б ви не обрали, тримайте сирий текст і метадані джерелом істини, а векторний індекс розглядайте як похідну, яку можна перебудувати.

FAQ

Чи pgvector «готовий до продакшену»? Так, для масштабу, потрібного більшості бізнес-застосунків. Плануйте пам'ять під HNSW-індекси, налаштуйте maintenance_work_mem для побудови й моніторте vacuum.

Чи зберігати вектори поруч із бізнес-даними? Часто так: це спрощує контроль доступу й join і тримає видалення узгодженими (видалення за GDPR має прибирати й вектори).

Скільки вимірів використовувати? Це визначає модель ембеддингів. Моделі з навчанням у стилі Matryoshka дозволяють обрізати виміри для економії пам'яті з невеликою втратою якості.

Чи можна змінити базу пізніше? Так, якщо шар пошуку схований за тонким інтерфейсом і ви зберігаєте сирий текст для переіндексації.

Джерела

  1. Malkov, Y., Yashunin, D. (2016). Efficient and robust approximate nearest neighbor search using Hierarchical Navigable Small World graphs.
  2. pgvector на GitHub.
  3. Документація Qdrant, Weaviate, документація Milvus, документація Pinecone.
  4. ANN-Benchmarks.
  5. Cormack, G., Clarke, C., Buettcher, S. (2009). Reciprocal Rank Fusion outperforms Condorcet and individual Rank Learning Methods.
  6. Douze et al. (2024). The Faiss library.