Перейти к содержимому
Последнее обновление

Тестирование и анализ производительности

В этом документе представлены результаты тестирования производительности запросов и загрузки данных для векторного индекса Apache Doris (ANN Index). Все тесты выполнены с помощью VectorDBBench, а их результаты помогут вам:

  • Оценить, соответствует ли векторный поиск Doris требованиям вашего бизнеса.
  • Понять компромиссы между полнотой, производительностью запросов и скоростью загрузки данных.
  • Воспроизвести результаты тестов локально и проверить поведение в промышленной среде.

Результаты тестирования на более крупных наборах данных (масштаба 10M / 100M) при развёртывании на одном узле и в распределённой конфигурации приведены в документе Тестирование производительности на больших объёмах данных.

Тестовая среда​

ПараметрКонфигурация
Характеристики машины16C 64GB
Модель CPUIntel(R) Xeon(R) Platinum 8369B CPU @ 2.70GHz
РазвёртываниеFE и BE размещены на одной машине
Версия DorisApache Doris 4.0.2
Тестовый набор данныхVectorDBBench Performance768D1M (векторы размерности 768, 1 миллион строк)
Примечание

Размещение FE и BE на одной машине не рекомендуется для промышленной эксплуатации. В промышленной среде размещайте FE и BE на отдельных машинах.

Результаты тестирования​

производительность

На наборе данных Performance768D1M Apache Doris достигает 989.1 QPS, сохраняя полноту выше 97%, а производительность загрузки данных значительно превосходит показатели сопоставимых систем.

Анализ результатов​

«Треугольник производительности» векторных баз данных​

В сценариях векторного поиска зрелой векторной базе данных, стабильно работающей в промышленной среде, обычно приходится искать компромисс между следующими тремя показателями:

                    ┌──────────────────────┐
│ Recall │
│ (Higher is Better) │
└──────────▲───────────┘
/ \
/ \
/ \
/ \
/ \
/ \
┌───────────┘ └───────────┐
│ │
│ │
▼ ▼
┌──────────────────────┐ ┌────────────────────────┐
│ Query QPS │ │ Indexing │
│ (Latency / QPS) │ │ Throughput │
│ (Lower Latency Better)│ │ (Higher is Better) │
└──────────────────────┘ └────────────────────────┘
ПоказательМетрикаЖелаемое направление изменения
ПолнотаДоля попаданий в Top-KЧем выше, тем лучше
QPS запросов / ЗадержкаЧисло запросов в секунду / задержка одного запросаВыше QPS, ниже задержка
Пропускная способность построения индексаСкорость построения индексаЧем выше, тем лучше

Все три показателя обычно трудно максимизировать одновременно, поэтому при проектировании векторных баз данных приходится искать баланс между ними.

Основные параметры HNSW и компромиссы при настройке​

Рассмотрим HNSW (Hierarchical Navigable Small World), наиболее распространённый в отрасли векторный индекс. Для оптимизации поиска он использует структуру графа и имеет три основных настраиваемых гиперпараметра:

ПараметрНазначениеВлияние
max_degreeМаксимальная исходящая степень каждой вершины графаОпределяет плотность графа и его общую связность
ef_constructionРазмер набора кандидатов при построении индексаБольшее значение позволяет построить более качественный граф
hnsw_ef_searchРазмер окна поиска при выполнении запросовНапрямую влияет на полноту и задержку запросов

Типичные компромиссы при настройке:

  1. Увеличение max_degree и ef_construction значительно улучшает связность графа и эффективность навигации, что повышает полноту.
  2. Более качественный граф позволяет уменьшить hnsw_ef_search при выполнении запросов, что сокращает затраты на поиск и повышает производительность запросов.
  3. Обратная сторона заключается в том, что построение индекса требует больше вычислительных ресурсов и памяти, что снижает производительность загрузки данных.

Это типичная «трилемма», с которой приходится сталкиваться при проектировании векторных баз данных.

Подход Apache Doris к оптимизации​

При разработке возможностей векторного поиска Apache Doris стремится создать более сбалансированный треугольник производительности за счёт:

  • Оптимизации базового движка выполнения.
  • Улучшения формата хранения.
  • Распараллеливания конвейера построения HNSW на уровне реализации.

В результате Doris значительно повышает общую скорость загрузки данных с построением индекса, сохраняя качество индекса и высокую полноту.

Результаты тестирования на наборе данных Performance768D1M подтверждают достижение этой цели:

  • При одинаковом качестве индекса производительность загрузки данных в Doris значительно выше, чем в сопоставимых системах.
  • Повышение скорости загрузки данных достигается без снижения качества графа.
  • QPS достигает 989.1, полнота остаётся выше 97%, при этом достигается баланс всех трёх показателей.

Шаги для воспроизведения​

Чтобы воспроизвести тест локально, выполните следующую команду:

NUM_PER_BATCH=500000 vectordbbench doris \
--host 127.0.0.1 \
--port 9030 \
--http-port 8030 \
--case-type Performance768D1M \
--db-name vdb \
--num-concurrency 80 \
--stream-load-rows-per-batch 500000 \
--index-prop max_degree=128,ef_construction=256 \
--session-var hnsw_ef_search=100

Основные параметры:

ПараметрЗначение
--case-typeВыбирает тестовый сценарий (здесь — набор данных 768D1M)
--num-concurrencyЧисло одновременно выполняемых запросов
--stream-load-rows-per-batchЧисло строк в пакете для Stream Load
--index-propПараметры построения индекса (max_degree, ef_construction)
--session-varПеременные сеанса при выполнении запросов (hnsw_ef_search)