Зачем нужна векторная база данных
Почему обычной таблицы мало и зачем понадобился отдельный класс баз данных.
Векторная база данных — хранилище, специально заточенное под хранение эмбеддингов и быстрый поиск ближайших к запросу векторов.
Задача поиска ближайших соседей
В RAG на каждый запрос нужно найти несколько чанков, чьи векторы ближе всего к вектору вопроса. Это задача k ближайших соседей (k-NN). Со ста чанками её решает обычный цикл. С миллионами — уже нет.
Почему полный перебор не масштабируется
Наивный поиск сравнивает запрос с каждым вектором в базе. Сложность линейная: O(N·d), где N — число чанков, d — размерность. Прикинем, во что это выливается.
def comparisons(num_vectors, dim):
# примерно столько умножений на один запрос при полном переборе
return num_vectors * dim
for n in (1_000, 1_000_000, 100_000_000):
ops = comparisons(n, dim=768)
print(f"{n:>12,} векторов -> {ops:>18,} операций/запрос")Вывод:
1,000 векторов -> 768,000 операций/запрос 1,000,000 векторов -> 768,000,000 операций/запрос 100,000,000 векторов -> 76,800,000,000 операций/запрос
На большой базе полный перебор — это десятки миллиардов операций на каждый вопрос пользователя. Слишком медленно и дорого. Нужен индекс, который ищет приближённо, но за доли миллисекунды.
Память — это ещё не всё
Можно возразить: подержим все векторы в обычном списке в памяти и переберём циклом. Для прототипа на тысячах чанков так и делают — это нормально. Но в проде появляются требования, которых простой список не закрывает: данные не должны теряться при перезапуске, векторы постоянно добавляются и удаляются, поиск должен идти параллельно для сотен пользователей, а к близости нужно примешивать фильтры по метаданным. Именно ради этого набора требований и выделился отдельный класс систем — векторные базы данных. Они берут на себя и хранение на диске, и индексацию, и конкурентный доступ.
Что умеет векторная БД
- Хранит векторы вместе с метаданными (id документа, текст чанка, теги).
- Индексирует их структурой для быстрого приближённого поиска (ANN).
- Ищет top-k ближайших за миллисекунды даже на миллионах записей.
- Фильтрует по метаданным (например, только документы за 2024 год).
- Обновляется: добавление/удаление векторов без полной перестройки.
Векторная БД vs обычная
| Обычная БД | Векторная БД |
| точное совпадение, WHERE по полям | близость по смыслу, поиск ближайших |
| индекс B-tree по значениям | ANN-индекс (HNSW, IVF) по векторам |
| «найди строку с id=5» | «найди 5 самых похожих по смыслу» |
Итог
- RAG-поиск — это задача k ближайших соседей в пространстве эмбеддингов.
- Полный перебор линеен по N и не тянет миллионы векторов.
- Векторная БД хранит, индексирует и быстро ищет ближайших + фильтрует по метаданным.