Низкая производительность запросов агрегации часто замедляет анализ при работе с большими наборами данных. Кластеры CSS Elasticsearch используют векторизацию и оптимизированную кластеризацию для ускорения запросов агрегации, обеспечивая более быструю аналитику и принятие решений.
Улучшенная агрегация работает за счёт предварительной сортировки и физической кластеризации данных с использованием тщательно выбранных ключей сортировки и кластеризации при загрузке, тем самым минимизируя сканирование данных и вычислительные накладные расходы во время агрегации.
Для примера, для индекса, содержащего поля region, host и value, документы могут быть отсортированы по этим трём полям при загрузке, а затем кластеризованы и сохранены на основе полей region и host. В этом случае документы с одинаковым region или host хранятся вместе и затем сортируются по полю value внутри каждого кластера.
Когда выполняется запрос агрегации, данные запрашиваются по ключу кластеризации (region и host) или по полю value внутри каждого кластера. Это повышает эффективность запросов.
Рисунок 1 Пример улучшенной агрегации

Сценарий | Описание |
|---|---|
Агрегация полей с низкой кардинальностью | Агрегирует поля, имеющие небольшое количество уникальных значений. В этом случае используется группировка. Примером может служить подсчёт количества заказов по городам. Операция кластеризации может легко достичь этой цели. |
Агрегация полей с высокой кардинальностью | Агрегирует поля, содержащие большое количество уникальных значений. Обычно используется гистограммная агрегация. Один пример — подсчёт посещений по часам. Ключ сортировки может использоваться для ускорения агрегации данных по указанному диапазону или области. |
Гибридная агрегация полей с низкой и высокой кардинальностью | Сначала группирует и агрегирует поля с низкой кардинальностью (например, заказы по городу) с использованием ключа кластеризации, а затем создаёт гистограмму для полей с высокой кардинальностью (например, метки времени) с использованием ключа сортировки. Многоуровневая кластеризация повышает эффективность гибридных запросов. |
Только Elasticsearch 7.10.2 поддерживает расширенную агрегацию.
Войдите в Kibana и перейдите на страницу выполнения команд. Кластеры Elasticsearch поддерживают несколько методов доступа. В этой теме Kibana используется в качестве примера для описания процедур выполнения.
Левая часть консоли — это поле ввода команд, а треугольный значок в её правом верхнем углу является кнопкой выполнения. Правая часть отображает результат выполнения.
Обычно поля с низкой кардинальностью используют группировку как способ агрегации. При наличии соответствующих ключей сортировки группировка подготавливает данные для пакетной обработки.
Например, чтобы агрегировать два поля с низкой кардинальностью city и product, выполните следующие шаги: Параметр Тип Значение по умолчанию Описание index.search.turbo.enabled Boolean false Определяет, включить ли улучшенную агрегацию. Обычно улучшенная агрегация должна быть включена там, где используются агрегации. Значение может быть: index.sort.field Массив строк N/A Укажите ключи сортировки. Ключи сортировки — это поля, используемые для упорядочения или ранжирования документов. Можно указать одно или несколько полей в качестве ключей сортировки. При указании нескольких полей они применяются в том порядке, в котором указаны. Документы сначала ранжируются по первому полю, затем начальный набор результатов ранжируется по второму полю и так далее. Диапазон значений: значение должно быть полем, содержащимся в индексе. index.cluster.field Массив строк N/A Укажите ключи кластеризации. Ключи кластеризации определяют, какие документы собираются в одни и те же кластеры. Во время операции агрегации документы в одном кластере могут обрабатываться пакетами, что значительно повышает производительность агрегации. Ограничение: ключи кластеризации должны быть подмножеством ключей сортировки. Диапазон значений: значение должно быть полем, содержащимся в индексе. Например, запросите среднее значение trade для каждого продукта в разных городах.
Поля с высокой кардинальностью обычно используют ключи сортировки для гистограммной агрегации, что облегчает обработку данных по диапазону или области.
Например, чтобы агрегировать типичное поле с высокой кардинальностью date, выполните следующие действия: Параметр Тип Значение по умолчанию Описание index.search.turbo.enabled Boolean false Определяет, включена ли расширенная агрегация. Обычно расширенная агрегация должна быть включена там, где используются агрегации. Значение может быть: index.sort.field Массив строк N/A Укажите ключи сортировки. Ключи сортировки — это поля, используемые для упорядочения или ранжирования документов. Можно указать одно или несколько полей в качестве ключей сортировки. При указании нескольких полей они применяются в том порядке, в котором указаны. Сначала документы ранжируются по первому полю, затем полученный набор результатов ранжируется по второму полю и так далее. Диапазон значений: значение должно быть полем, содержащимся в индексе. Этот запрос группирует поле date с помощью гистограммы, а затем вычисляет средний балл.
Если поля с низкой и высокой кардинальностью смешаны, сначала сгруппируйте и агрегируйте поля с низкой кардинальностью с помощью ключа кластеризации, затем создайте гистограмму для полей с высокой кардинальностью, используя ключ сортировки.
Например, чтобы сначала сгруппировать поле с низкой кардинальностью city, затем поле с низкой кардинальностью product, а затем поле с высокой кардинальностью date в гистограмму, выполните следующие шаги: Параметр Тип Значение по умолчанию Описание index.search.turbo.enabled Boolean false Определяет, следует ли включать расширенную агрегацию. Обычно расширенная агрегация должна быть включена там, где используются агрегации. Значение может быть: index.sort.field Массив строк N/A Укажите ключи сортировки. Ключи сортировки — это поля, используемые для упорядочения или ранжирования документов. Можно указать одно или несколько полей в качестве ключей сортировки. При указании нескольких полей они применяются в порядке, в котором указаны. Сначала документы ранжируются по первому полю, затем полученный набор результатов ранжируется по второму полю и так далее. Ограничение: поля с высокой кардинальностью должны быть среди ключей сортировки и должны следовать за последним полем с низкой кардинальностью. Диапазон значений: значение должно быть полями, содержащимися в индексе. index.cluster.field Массив строк N/A Укажите ключи кластеризации. Ключи кластеризации определяют, какие документы собираются в одни и те же кластеры. Во время операции агрегации документы в одном кластере могут обрабатываться пакетами, что значительно повышает производительность агрегации. Ограничение: ключи кластеризации должны быть подмножеством ключей сортировки. Диапазон значений: значение должно быть полями, содержащимися в индексе. Например, запросите среднее значение trade каждого продукта в разных городах за каждый день, указанное полем date.
Тестовая среда
Процедура тестирования
Результат теста
Этот тест сосредоточен на результате запроса агрегирования dropoff_datetime, то есть на результатах задач autohisto_agg и date_histogram_agg. В следующей таблице сравниваются результаты теста при отключённом и включённом enhanced aggregation.
Метрика | Задача | Единица | Enhanced Aggregation Disabled | Enhanced Aggregation Enabled | Enhanced Aggregation Disabled | Enhanced Aggregation Enabled | открыть/закрыть | Заключение | ||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
Тестовый раунд 1 | Тестовый раунд 2 | Тестовый раунд 3 | Тестовый раунд 1 | Тестовый раунд 2 | Тестовый раунд 3 | Среднее значение | Среднее значение | |||||
Минимальная пропускная способность | autohisto_agg | ops/s | 4.42 | 4.44 | 4.43 | 11.66 | 11.94 | 11.96 | 4.43 | 11.85 | 2.68 | Пропускная способность увеличивается более чем в 2,5 раза. |
Средняя пропускная способность | autohisto_agg | ops/s | 4.50 | 4.46 | 4.44 | 11.81 | 11.99 | 12.00 | 4.47 | 11.93 | 2.67 | |
Median Throughput | autohisto_agg | ops/s | 4.51 | 4.46 | 4.44 | 11.83 | 11.98 | 12.00 | 4.47 | 11.94 | 2.67 | |
Max Throughput | autohisto_agg | ops/s | 4.54 | 4.48 | 4.45 | 11.90 | 12.07 | 12.02 | 4.49 | 12.00 | 2.67 | |
100th percentile latency | autohisto_agg | ms | 216.30 | - | - | - | 84.56 | 80.38 | 216.30 | 82.47 | 0.38 | Задержка уменьшается более чем на 60%. |
100th percentile service time | autohisto_agg | ms | 216.30 | - | - | - | 84.56 | 80.38 | 216.30 | 82.47 | 0.38 | |
уровень ошибок | autohisto_agg | % | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | - |
Минимальная пропускная способность | date_histogram_agg | ops/s | 4.72 | 4.67 | 4.65 | 12.57 | 12.40 | 12.59 | 4.68 | 12.52 | 2.68 | Пропускная способность увеличивается более чем в 2.5 раза. |
Средняя пропускная способность | date_histogram_agg | ops/s | 4.73 | 4.67 | 4.67 | 12.61 | 12.46 | 12.61 | 4.69 | 12.56 | 2.68 | |
Медианная пропускная способность | date_histogram_agg | ops/s | 4.73 | 4.67 | 4.67 | 12.62 | 12.46 | 12.60 | 4.69 | 12.56 | 2.68 | |
Максимальная пропускная способность | date_histogram_agg | ops/s | 4.74 | 4.67 | 4.67 | 12.64 | 12.49 | 12.63 | 4.69 | 12.59 | 2.68 | |
Задержка 50‑го процентиля | date_histogram_agg | ms | 202.61 | 218.09 | 213.43 | 77.64 | 76.02 | 82.63 | 211.38 | 78.77 | 0.37 | Задержка уменьшается более чем на 60%. |
Задержка 100‑го процентиля | date_histogram_agg | ms | 207.35 | 223.88 | 246.63 | 77.99 | - | - | 225.95 | 77.99 | 0.35 | |
Время обслуживания 50‑го процентиля | date_histogram_agg | ms | 202.61 | 218.09 | 213.43 | 77.64 | 76.02 | 82.63 | 211.38 | 78.77 | 0.37 | |
Время обслуживания 100‑го процентиля | date_histogram_agg | ms | 207.35 | 223.88 | 246.63 | 77.99 | - | - | 225.95 | 77.99 | 0.35 | |
уровень ошибок | date_histogram_agg | % | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | - |
Заключение теста
При одинаковой конфигурации кластера производительность агрегации значительно повышается при включённой расширенной агрегации. Пропускная способность запросов увеличивается более чем в 2,5 раза, а задержка снижается более чем на 60%.