🚀 Попробуйте Zilliz Cloud, полностью управляемый Milvus, бесплатно — ощутите 10-кратное увеличение производительности! Попробовать сейчас>

milvus-logo
LFAI
Главная
  • Вопросы и ответы
  • Home
  • Docs
  • Вопросы и ответы

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

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

Как установить nlist и nprobe для индексов ЭКО?

Настройка nlist зависит от конкретного сценария. Как правило, рекомендуемое значение nlist равно 4 × sqrt(n), где n - общее количество сущностей в сегменте.

Размер каждого сегмента определяется параметром datacoord.segment.maxSize, который по умолчанию установлен на 512 МБ. Общее количество сущностей в сегменте n можно определить, разделив datacoord.segment.maxSize на размер каждой сущности.

Настройка параметра nprobe зависит от набора данных и сценария и предполагает компромисс между точностью и производительностью запроса. Мы рекомендуем найти идеальное значение путем многократных экспериментов.

На следующих диаграммах представлены результаты теста, проведенного на наборе данных sift50m и индексе IVF_SQ8, в котором сравниваются показатели запоминания и производительности запросов для различных пар nlist/nprobe.

Accuracy test Тест на точность Performance testТест на производительность

Почему на небольших наборах данных запросы иногда выполняются дольше?

Операции запроса выполняются на сегментах. Индексы сокращают время, необходимое для запроса сегмента. Если сегмент не проиндексирован, Milvus прибегает к грубому поиску по исходным данным, что резко увеличивает время запроса.

Таким образом, запрос к небольшому набору данных (коллекции) обычно занимает больше времени, поскольку индекс не был создан. Это происходит потому, что размеры ее сегментов не достигли порога построения индекса, установленного на rootCoord.minSegmentSizeToEnableindex. Вызовите create_index(), чтобы заставить Milvus индексировать сегменты, которые достигли порога, но еще не были автоматически проиндексированы, что значительно повысит производительность запросов.

Какие факторы влияют на использование процессора?

Использование ЦП увеличивается, когда Milvus строит индексы или выполняет запросы. В целом построение индексов требует больших затрат ЦП, за исключением использования Annoy, который работает в один поток.

При выполнении запросов на использование ЦП влияют nq и nprobe. Когда nq и nprobe невелики, параллелизм незначителен и загрузка процессора остается низкой.

Влияет ли одновременная вставка данных и поиск на производительность запросов?

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

Параметр rootcoord.minSegmentSizeToEnableIndex определяет порог построения индекса для сегмента и по умолчанию установлен на 1024 строки. Дополнительные сведения см. в разделе Конфигурация системы.

Может ли индексирование поля VARCHAR повысить скорость удаления?

Индексирование поля VARCHAR может ускорить операции "Удаление по выражению", но только при определенных условиях:

  • ИНВЕРТИРОВАННЫЙ индекс: Этот индекс помогает при использовании IN или == выражений для полей VARCHAR, не являющихся первичными ключами.
  • Тройной индекс: Этот индекс помогает при префиксных запросах (например, LIKE prefix%) на непервичных полях VARCHAR.

Однако индексирование поля VARCHAR не ускоряет работу:

  • Удаление по идентификаторам: Когда поле VARCHAR является первичным ключом.
  • Несвязанные выражения: Когда поле VARCHAR не является частью выражения удаления.

У вас остались вопросы?

Вы можете:

  • Проверить Milvus на GitHub. Не стесняйтесь задавать вопросы, делиться идеями и помогать другим.
  • Присоединяйтесь к нашему каналу Slack, чтобы найти поддержку и взаимодействовать с нашим сообществом разработчиков с открытым исходным кодом.

Попробуйте Managed Milvus бесплатно

Zilliz Cloud работает без проблем, поддерживается Milvus и в 10 раз быстрее.

Начать
Обратная связь

Была ли эта страница полезной?