Автор блога Software Doug ставит под сомнение необходимость использования сложных векторных баз данных для поиска по сходству в проектах среднего масштаба. Вместо внедрения специализированных инструментов предлагается использовать метод «грубой силы» (brute force) — вычисление косинусного сходства для всех векторов в памяти. Такой подход часто оказывается быстрее и проще в реализации при работе с наборами данных до нескольких миллионов записей.
Основная проблема современных векторных БД заключается в накладных расходах на индексацию, сериализацию и поддержку инфраструктуры. В то время как приближенные методы поиска (ANN) жертвуют точностью ради скорости, прямой перебор (flat search) гарантирует 100% точность результатов. При использовании современных библиотек для линейной алгебры, таких как NumPy или PyTorch, вычисление скалярного произведения для миллионов векторов занимает миллисекунды, что зачастую перекрывает потребности большинства прикладных систем.
Переход к «грубой силе» позволяет значительно упростить архитектуру приложения, избавившись от лишнего слоя абстракции. Это особенно актуально для систем, где данные обновляются динамически, а задержки при переиндексации векторных индексов становятся критическим узким местом. Метод позволяет хранить векторы в обычных массивах или простых бинарных форматах, что снижает требования к оперативной памяти и упрощает отладку.
Ключевые факты
- Прямой перебор (brute force) обеспечивает идеальную точность поиска, в отличие от приближенных алгоритмов (ANN), используемых в векторных БД.
- Вычисление косинусного сходства для 1 миллиона векторов размерности 768 на современном CPU занимает менее 100 миллисекунд.
- Использование библиотек типа NumPy позволяет векторизовать операции, максимально эффективно задействуя возможности процессора.
- Отказ от специализированных векторных БД исключает проблемы с консистентностью данных и задержками при обновлении индексов.
- Метод оптимален для систем, где количество векторов не превышает нескольких миллионов, а требования к задержке ответа позволяют выполнять линейный поиск.