⚠️ Эта страница автоматически переведена, и перевод может быть несовершенным.
blog-post

Новые агрегации перцентилей и медианного абсолютного отклонения в Manticore Search

View as markdown

Когда средние значения скрывают реальную картину, нужны более информативные метрики распределения. Одно лишь среднее может выглядеть «здоровым», но при этом маскировать замедления в длинном хвосте, перекошенные распределения значений или небольшую группу экстремальных выбросов, которые сильно влияют на пользовательский опыт и операционные риски.
Теперь Manticore Search поддерживает агрегации перцентилей, перцентильных рангов и MAD (медианного абсолютного отклонения), так что вы можете анализировать разброс, хвосты и выбросы прямо в поисковых запросах.
Они особенно полезны для мониторинга задержек, анализа цен, поведения пользователей и любых задач, где «среднего» недостаточно.

  • percentiles(field[, {values='...',compression=N}])
    Возвращает оценочные значения перцентилей (например, p50, p95, p99)

  • percentile_ranks(field, {values='...',compression=N})
    Возвращает оценочную долю документов со значениями, меньшими или равными каждому заданному значению

  • median_absolute_deviation(field[, {compression=N}])
    Возвращает оценочное значение MAD — устойчивую (робастную) меру разброса вокруг медианы

Эти функции по своей природе приближённые, что удерживает потребление памяти в заданных пределах и делает производительность предсказуемой, а необязательный параметр compression управляет компромиссом между точностью и памятью: меньшие значения работают быстрее и легче по памяти, но могут давать большую погрешность; значение по умолчанию — 200.

Использование

Manticore Search поддерживает два варианта синтаксиса для этих агрегаций: SQL и JSON API.

Пример на SQL

SELECT
    percentiles(latency) AS p_default,
    percentiles(latency, {values='5,50,95',compression=200}) AS p_custom,
    percentile_ranks(latency, {values='10,150,1500',compression=200}) AS r_custom,
    median_absolute_deviation(latency, {compression=200}) AS mad
FROM agg_td\G
*************************** 1. row ***************************
p_default: {"1":10,"5":10,"25":20,"50":30,"75":40,"95":50,"99":50}
 p_custom: {"5":10,"50":30,"95":50}
 r_custom: {"10":20,"150":100,"1500":100}
      mad: {"value":10,"value_as_string":"10"}
Как это читать
  • p_custom даёт прямые пороги перцентилей (например, задержку p95).
  • r_custom показывает долю документов ниже заданных порогов.
  • mad показывает, насколько плотно значения сгруппированы вокруг медианы.

Пример HTTP JSON

POST /json/search
{
  "table": "agg_td",
  "size": 0,
  "aggs": {
    "latency_percentiles": {
      "percentiles": {
        "field": "latency",
        "values": [5, 50, 95],
        "keyed": true
      }
    },
    "latency_ranks": {
      "percentile_ranks": {
        "field": "latency",
        "values": [10, 150, 1500],
        "keyed": true
      }
    },
    "latency_mad": {
      "median_absolute_deviation": {
        "field": "latency",
        "tdigest": {
          "compression": 200
        }
      }
    }
  }
}
{
  "took": 0,
  "timed_out": false,
  "aggregations": {
    "latency_percentiles": {
      "values": {
        "5.0": 10,
        "50.0": 30,
        "95.0": 50
      }
    },
    "latency_ranks": {
      "values": {
        "10.0": 20,
        "150.0": 100,
        "1500.0": 100
      }
    },
    "latency_mad": {
      "value": 10,
      "value_as_string": "10"
    }
  },
  "hits": {
    "total": 5,
    "hits": []
  }
}

Практические сценарии и советы

  • Производительность поиска/API: отслеживайте задержки p50/p95/p99 и MAD для оценки джиттера.

  • Ценообразование в e-commerce: выявляйте сдвиги в распределении цен и аномальный разброс.

  • Выявление мошенничества и аномалий: сравнивайте медианное поведение с отклонениями на основе MAD.

  • Отчётность по SLO: сочетайте перцентильные ранги с бизнес-порогами (например, «% запросов быстрее 200 мс»).

  • Используйте percentiles, когда нужны пороговые значения (p95 = ?).

  • Используйте percentile_ranks, когда нужны проценты (<=200ms = ?).

  • Используйте MAD, когда выбросы — обычное дело и нужна устойчивая мера разброса.

  • Начинайте со значения по умолчанию compression=200; увеличивайте его, если нужна более высокая точность.


Итог

С агрегациями перцентилей и MAD Manticore Search даёт более глубокую статистическую видимость прямо внутри вашего рабочего процесса поисковой аналитики.
Теперь вы можете отслеживать хвосты распределения, проверять пороговые значения и измерять устойчивый разброс в одном месте — не выгружая сырые данные во внешние системы.

Установить Manticore Search

Установите Manticore Search одной командой в Linux или macOS:

curl https://manticoresearch.com | sh

Для расширенных вариантов установки см. полное руководство по установке и документацию .

Установить Manticore Search