Перейти к содержанию
Innovialabs

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

Основы3 мин

Коротко

Векторная база данных хранит эмбеддинги и быстро находит ближайшие к запросу векторы; она нужна для семантического поиска и RAG, но на старте часто достаточно PostgreSQL с расширением pgvector.

Короткий ответ

Векторная база данных — это хранилище, оптимизированное под один главный вопрос: «какие записи ближе всего по смыслу к этому запросу?». Она хранит эмбеддинги (векторы из сотен чисел) и умеет быстро находить ближайших соседей среди миллионов таких векторов.

Это основа для семантического поиска, рекомендаций и RAG — когда чат-бот отвечает по вашей базе знаний.

Поиск ближайших соседей

Задача называется nearest neighbor search: дан вектор запроса, найти k векторов, которые к нему ближе всего (по косинусному сходству или расстоянию).

Наивный способ — сравнить запрос с каждым вектором. Для тысяч записей это нормально, для миллионов — медленно.

Поэтому векторные базы используют приближенный поиск (ANN, approximate nearest neighbor) и специальные индексы, например HNSW или IVF. Они жертвуют небольшой долей точности ради большого выигрыша в скорости: результат почти всегда тот же, но находится намного быстрее.

Чем векторная база отличается от SQL

Обычная SQL-базаВекторная база
Главный запросТочное совпадение и фильтры: WHERE price < 100Похожесть: «найди ближайшие по смыслу»
ДанныеСтроки, числа, датыВекторы плюс метаданные
ИндексыB-tree, hashHNSW, IVF и другие ANN-индексы
РезультатТочныйПриближенный, ранжированный по близости
Транзакции и связиСильная сторонаОбычно слабее или отсутствуют

Важно: это не замена реляционной базы. Заказы, пользователи и платежи по-прежнему живут в SQL. Векторная база добавляет поиск по смыслу.

Когда хватит pgvector

pgvector — расширение для PostgreSQL, которое добавляет тип vector и индексы для поиска ближайших соседей.

CREATE EXTENSION vector;

CREATE TABLE docs (
  id bigserial PRIMARY KEY,
  content text,
  embedding vector(1536)
);

SELECT id, content
FROM docs
ORDER BY embedding <=> '[...]'
LIMIT 5;

Оператор <=> считает косинусное расстояние. Размерность вектора должна совпадать с вашей моделью эмбеддингов.

pgvector обычно достаточно, если:

  • у вас уже есть PostgreSQL и вы не хотите поддерживать еще один сервис;
  • объем данных умеренный, а нагрузка на поиск не экстремальная;
  • нужно совмещать поиск по смыслу с обычными фильтрами и JOIN в одном запросе;
  • важны транзакции и единый бэкап.

Когда нужна отдельная векторная база

  • Очень большие объемы векторов и высокая нагрузка, где важна горизонтальная масштабируемость.
  • Нужны встроенные возможности: гибридный поиск, мультитенантность, управляемое облако.
  • Команда готова поддерживать еще один компонент инфраструктуры.

Популярные варианты: Qdrant, Weaviate, Milvus, Pinecone. Выбор лучше делать по результатам теста на своих данных, а не по обзорам.

Частые ошибки

  • Начинать с отдельной векторной базы для прототипа на пару тысяч документов. Лишняя сложность.
  • Забывать про метаданные. Без фильтров по языку, дате или правам доступа поиск вернет лишнее.
  • Не следить за моделью. При смене модели эмбеддингов все векторы нужно пересчитать.
  • Не проверять качество. Скорость индекса ничего не значит, если находится не то.

Частые вопросы

Многие популярные базы добавляют поддержку векторного поиска. Если ваша основная база это умеет, начните с нее и переходите на специализированное решение, только когда упретесь в ограничения.

Поможем с этим

Если хотите не разбираться самим, а получить результат — этим мы занимаемся каждый день.

Обсудить проект

Читайте также

Есть идея или задача? Расскажите нам

Ответим в течение рабочего дня и предложим решение. Консультация бесплатная.