Какова формула идеального размера пакета в ElasticSearch?

Я считаю, что должна быть формула для расчета размера массовой индексации в ElasticSearch. Вероятно, следующие переменные такой формулы.

  • Количество узлов
  • Количество осколков/индекс
  • Размер документа
  • баран
  • Скорость записи на диск
  • скорость локальной сети

Интересно, знает ли кто-нибудь или использует математическую формулу. Если нет, то как люди определяют свой объем? Методом проб и ошибок?


person shyos    schedule 28.08.2013    source источник


Ответы (7)


Для этого не существует золотого правила. Извлечено из документа:

Не существует «правильного» количества действий, которые нужно выполнить за один массовый вызов. Вам следует поэкспериментировать с различными настройками, чтобы найти оптимальный размер для вашей конкретной рабочей нагрузки.

person moliware    schedule 28.08.2013
comment
В конце концов, нужно настроиться. Но есть ли какое-то представление о том, какого порядка величины? Мы говорим о 10/100/1000? Есть какие-нибудь стартовые предложения? - person Dilum Ranatunga; 15.10.2013

Внимательно прочитайте документацию по массовому API ES: https://www.elastic.co/guide/en/elasticsearch/guide/current/indexing-performance.html#_using_and_sizing_bulk_requests

  • Попробуйте с 1 КБ, попробуйте с 20 КБ, затем с 10 КБ, ... дихотомия
  • Используйте объемный размер в KiB (или эквивалент), а не количество документов!
  • Отправляйте данные массово (без потоковой передачи), передайте избыточный URL-адрес информационного API, если можете
  • Удалите лишние пробелы в ваших данных, если это возможно
  • Отключите обновление поискового индекса, активируйте его позже
  • Циклический перебор по всем вашим узлам данных
person Christophe Roussy    schedule 08.11.2016

Я получил эту информацию из класса BulkProcessor Java API. По умолчанию это 1000 действий или 5 МБ, также можно установить интервал сброса, но по умолчанию он не установлен. Я просто использую настройки по умолчанию.

Я бы предложил использовать BulkProcessor, если вы используете Java API.

person hudsonb    schedule 25.11.2013
comment
Это звучит немного консервативно, я запускал задания индексирования через http API с пакетами размером 10 000 документов (файлы от ~ 25 МБ до ~ 80 МБ) на скромном vServer. - person jmng; 13.11.2018
comment
Это очень консервативно. Однако вы не можете определить идеальные настройки без тестирования с реальными данными на реальном кластере. В наши дни (5 лет спустя) у нас есть гораздо более крупный и мощный кластер, использующий НАМНОГО большие размеры пакетов в МБ без ограничения количества документов. - person hudsonb; 13.11.2018

Я искал об этом и нашел ваш вопрос :) я нашел это в эластичном документация .. поэтому я изучу размер моих документов.

Часто бывает полезно следить за физическим размером ваших массовых запросов. Тысяча документов размером 1 КБ сильно отличается от тысячи документов размером 1 МБ. Хороший объемный размер для начала игры составляет около 5-15 МБ.

person HADEEL    schedule 28.03.2016
comment
Это звучит немного консервативно (вероятно, намерение), я запускаю задания индексирования с пакетами размером 10 000 документов (файлы от ~ 25 МБ до ~ 80 МБ) на скромном vServer (подробнее ниже). - person jmng; 13.11.2018

В моем случае я не мог вставить более 100 000 записей за раз. Начал с 13 миллионов, до 500 000 и после безуспешных попыток начал с другой стороны, 1 000, затем 10 000, затем 100 000, мой максимум.

person Alvaro Reyes    schedule 21.08.2019

Я не нашел лучшего способа, чем метод проб и ошибок (т. е. традиционный инженерный процесс), поскольку на скорость индексации влияет множество факторов, помимо аппаратного обеспечения: структура/сложность вашего индекса (сложные сопоставления, фильтры или анализаторы), типы данных, независимо от того, связана ли ваша рабочая нагрузка с вводом-выводом или процессором, и так в.

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

Elastic 5.6 с кучей 10 ГБ, работающей на одном виртуальном сервере с 16 ГБ ОЗУ, 4 виртуальными ЦП и твердотельным накопителем со средней скоростью 150 МБ/с при поиске.

Я могу успешно индексировать документы самых разных размеров с помощью http API (curl), используя пакет размером 10 тыс. документов (20 тыс. строк, размер файла от 25 МБ до 79 МБ), каждый пакет занимает ~ 90 секунд. index.refresh_interval устанавливается в -1 во время индексации, но это единственная «настройка», которую я сделал, все остальные конфигурации по умолчанию. Я предполагаю, что это в основном связано с тем, что сам индекс не слишком сложен.

Виртуальный сервер использует примерно 50 % ЦП, SSD со средней скоростью 40 МБ/с и 4 ГБ ОЗУ свободно, поэтому я, вероятно, мог бы ускорить его, отправив два файла параллельно (я пытался просто увеличить размер пакета на 50 %, но начал получать ошибок), но после этого, вероятно, имеет смысл рассмотреть другой API или просто распределить нагрузку по кластеру.

person jmng    schedule 12.11.2018

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

Выдержка из ссылки

Насколько велик слишком большой?
      Весь массовый запрос должен быть загружен в память узлом, который получает наш запрос, поэтому, чем больше запрос, тем меньше памяти доступно для других запросов. Существует оптимальный размер массового запроса. Выше этого размера производительность больше не улучшается и может даже упасть. Однако оптимальный размер не является фиксированным числом. Это полностью зависит от вашего оборудования, размера и сложности вашего документа, а также нагрузки на индексацию и поиск.
      К счастью, легко найти эту золотую середину: попробуйте индексировать типичные документы партиями с увеличением размера. Когда производительность начинает падать, размер партии слишком велик. Лучше всего начать с пакетов от 1000 до 5000 документов или, если ваши документы очень большие, с пакетов еще меньшего размера.
      Часто полезно следить за физическим размером ваших массовых запросов. Тысяча документов размером 1 КБ сильно отличается от тысячи документов размером 1 МБ. Хороший объемный размер, с которым можно начать играть, составляет около 5-15 МБ.

person Prasanth Rajendran    schedule 29.07.2021