Выбор ответа Middle Эмбеддинги и векторный поиск обновлено
pgvector или отдельная векторная БД
Вопрос
Сервис на PostgreSQL, 2 млн документов, нужен семантический поиск с фильтрами по клиенту и статусу. Какой выбор разумнее для старта?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: pgvector в той же базе: векторы рядом с данными, фильтры на SQL, индекс HNSW. Два миллиона векторов pgvector держит нормально, при этом остаются транзакции, бэкапы и фильтры по обычным колонкам.
Варианты ответа
- Обязательно отдельная векторная БД: PostgreSQL не умеет индексировать векторы и ищет только перебором
- pgvector в той же базе: векторы рядом с данными, фильтры на SQL, индекс HNSWправильный ответ
- Хранить векторы в Redis как строки и перебирать их в коде приложения на каждый запрос
- Не строить индекс, а пересчитывать эмбеддинги всех документов на каждый запрос
Разбор
Два миллиона векторов pgvector держит нормально, при этом остаются транзакции, бэкапы и фильтры по обычным колонкам. Отдельная векторная БД нужна при сотнях миллионов векторов, сложном шардировании или особых возможностях. Утверждение про PostgreSQL ложно: у pgvector есть HNSW и IVFFlat. Перебор строк в коде и пересчёт эмбеддингов на каждый запрос не масштабируются.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.