Что такое векторная база данных и когда она нужна
Основы3 минРедакция Innovialabs
Коротко
Векторная база данных хранит эмбеддинги и быстро находит ближайшие к запросу векторы; она нужна для семантического поиска и RAG, но на старте часто достаточно PostgreSQL с расширением pgvector.
Короткий ответ
Векторная база данных — это хранилище, оптимизированное под один главный вопрос: «какие записи ближе всего по смыслу к этому запросу?». Она хранит эмбеддинги (векторы из сотен чисел) и умеет быстро находить ближайших соседей среди миллионов таких векторов.
Это основа для семантического поиска, рекомендаций и RAG — когда чат-бот отвечает по вашей базе знаний.
Поиск ближайших соседей
Задача называется nearest neighbor search: дан вектор запроса, найти k векторов, которые к нему ближе всего (по косинусному сходству или расстоянию).
Наивный способ — сравнить запрос с каждым вектором. Для тысяч записей это нормально, для миллионов — медленно.
Поэтому векторные базы используют приближенный поиск (ANN, approximate nearest neighbor) и специальные индексы, например HNSW или IVF. Они жертвуют небольшой долей точности ради большого выигрыша в скорости: результат почти всегда тот же, но находится намного быстрее.
Чем векторная база отличается от SQL
| Обычная SQL-база | Векторная база | |
|---|---|---|
| Главный запрос | Точное совпадение и фильтры: WHERE price < 100 | Похожесть: «найди ближайшие по смыслу» |
| Данные | Строки, числа, даты | Векторы плюс метаданные |
| Индексы | B-tree, hash | HNSW, 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. Выбор лучше делать по результатам теста на своих данных, а не по обзорам.
Частые ошибки
- Начинать с отдельной векторной базы для прототипа на пару тысяч документов. Лишняя сложность.
- Забывать про метаданные. Без фильтров по языку, дате или правам доступа поиск вернет лишнее.
- Не следить за моделью. При смене модели эмбеддингов все векторы нужно пересчитать.
- Не проверять качество. Скорость индекса ничего не значит, если находится не то.