ElasticSearch: автоматический выключатель с большой мощностью - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть приложение, в котором пользователю разрешено выполнять агрегирование в полях с большим количеством элементов. К сожалению, такие агрегации могут быть очень медленными. Для одного конкретного поля с количеством элементов 4 миллиона это занимает 7 секунд.

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

Возможно ли это?

ElasticSearch поддерживает некоторые прерыватели цепи: https://www.elastic.co/guide/en/elasticsearch/reference/current/circuit-breaker.html, но я не вижу такой, которая применима к одной агрегации в большем запросе, содержащем несколько агрегаций. Кроме того, они относятся к использованию памяти, а не к скорости выполнения.

1 Ответ

0 голосов
/ 25 апреля 2020

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

Вы можете оценить, где начинается пик - будь то 1M, 4M и т. Д. c, а затем либо вывести предупреждение до запроса отправлено, либо произвольно через x единиц времени, когда еще нет ответа ... Есть различные клиенты способы делать это.

Как только запрос обрабатывается в ES, я не знаю, как остановить его, пока он не разрешится или не истечет время ожидания.

...