Инструменты25 июля 2026 г., 18:16 МСК🤖 Auto

HNSW против DiskANN: как оптимизировать векторный поиск при нехватке RAM

При масштабировании до миллиардов векторов хранение индексов в оперативной памяти становится экономически нецелесообразным. Разбираем компромиссы между in-memory (HNSW) и on-disk (DiskANN, SPANN) алгоритмами.

Баннер новости 4379

Проблема масштабируемости и стоимости RAM

Векторный поиск стал критическим компонентом инфраструктуры AI, обеспечивая работу RAG, семантического поиска и агентов. Однако по мере роста индексов от миллионов до сотен миллионов или миллиардов записей, хранение полных индексов в RAM приводит к экспоненциальному росту затрат. Для крупных баз данных ежемесячные расходы на память могут достигать тысяч долларов, а алгоритмы вроде HNSW становятся узким местом из-за высоких требований к пропускной способности памяти.

In-Memory решения: HNSW и их ограничения

HNSW (Hierarchical Navigable Small World) — самый популярный алгоритм, использующий многоуровневый граф. Он обеспечивает экстремально низкую задержку при поиске, так как весь индекс находится в оперативной памяти. Однако эта архитектура не оптимизирована для дискового ввода-вывода (I/O). При попытке перенести HNSW на диск возникают случайные операции чтения, что увеличивает задержку с миллисекунд до сотен миллисекунд. Кроме того, для экономии памяти часто применяется квантование, что снижает качество поиска.

On-Disk решения: SPANN и DiskANN

Для борьбы с ограничениями RAM разработаны алгоритмы, минимизирующие использование памяти за счет использования диска:

  • SPANN: Использует методологию инвертированного индекса (IVF). Центроиды кластеров хранятся в RAM, а сами векторы — на диске. Ключевое преимущество: векторы одного кластера хранятся последовательно, что позволяет загружать их блоками, избегая случайного доступа к диску.
  • DiskANN: Использует однослойный граф Vamana. Он хранит квантованные векторы и граф в RAM, а полноразрядные векторы считывает с диска только для посещенных точек. Это минимизирует количество случайных операций чтения, необходимых для поиска топ-k результатов.

Сравнительный анализ подходов

Выбор между алгоритмами зависит от масштаба данных и требований к задержке. Ниже приведено сравнение ключевых характеристик:

Характеристика HNSW (In-Memory) SPANN (On-Disk) DiskANN (On-Disk)
Основная структура Многоуровневый граф Инвертированный индекс (IVF) + центроиды Однослойный граф (Vamana)
Хранение данных Полностью в RAM Центроиды в RAM, векторы на диске Квантованные данные в RAM, полные векторы на диске
Тип доступа к диску Случайный (Random I/O) — плохо масштабируется Последовательный (Sequential I/O) — эффективно Минимизированный случайный доступ
Идеальный масштаб Малый/Средний (до сотен млн) Очень большой (миллиарды записей) Большой/Очень большой
Примеры реализаций Qdrant, Milvus, pgvector, Weaviate Turbopuffer, Chroma DB (cloud) Microsoft Research, Azure AI Search

Вывод: когда что выбирать?

Если ваш индекс не превышает несколько сотен миллионов векторов и критична минимальная задержка, HNSW остается золотым стандартом. Однако при работе с миллиардами записей или при жестком ограничении бюджета на инфраструктуру, переход на on-disk решения, такие как SPANN или DiskANN, позволяет существенно снизить затраты на RAM, сохраняя приемлемую скорость поиска за счет оптимизации дискового ввода-вывода.

Источник: Towards Data Science ↗