Автор блога Software Doug ставит под сомнение необходимость использования сложных векторных баз данных для поиска по сходству в проектах среднего масштаба. Вместо внедрения специализированных инструментов предлагается использовать метод «грубой силы» (brute force) — вычисление косинусного сходства для всех векторов в памяти. Такой подход часто оказывается быстрее и проще в реализации при работе с наборами данных до нескольких миллионов записей.

Основная проблема современных векторных БД заключается в накладных расходах на индексацию, сериализацию и поддержку инфраструктуры. В то время как приближенные методы поиска (ANN) жертвуют точностью ради скорости, прямой перебор (flat search) гарантирует 100% точность результатов. При использовании современных библиотек для линейной алгебры, таких как NumPy или PyTorch, вычисление скалярного произведения для миллионов векторов занимает миллисекунды, что зачастую перекрывает потребности большинства прикладных систем.

Переход к «грубой силе» позволяет значительно упростить архитектуру приложения, избавившись от лишнего слоя абстракции. Это особенно актуально для систем, где данные обновляются динамически, а задержки при переиндексации векторных индексов становятся критическим узким местом. Метод позволяет хранить векторы в обычных массивах или простых бинарных форматах, что снижает требования к оперативной памяти и упрощает отладку.

Ключевые факты

  • Прямой перебор (brute force) обеспечивает идеальную точность поиска, в отличие от приближенных алгоритмов (ANN), используемых в векторных БД.
  • Вычисление косинусного сходства для 1 миллиона векторов размерности 768 на современном CPU занимает менее 100 миллисекунд.
  • Использование библиотек типа NumPy позволяет векторизовать операции, максимально эффективно задействуя возможности процессора.
  • Отказ от специализированных векторных БД исключает проблемы с консистентностью данных и задержками при обновлении индексов.
  • Метод оптимален для систем, где количество векторов не превышает нескольких миллионов, а требования к задержке ответа позволяют выполнять линейный поиск.