Агрегирование значений для вычисления квантилей - PullRequest
0 голосов
/ 17 апреля 2019

Я генерирую данные в пакетном режиме, которые хранятся в MongoDB.Каждый документ имеет числовое значение> 0, назовем его x и другие поля.Мне нужно рассчитать все квантили / процентили от 0 до 100 всех документов с определенным фильтром.Набор данных становится довольно большим, и получение всех документов с запросом фильтра, а затем вычисление процентилей занимает слишком много времени и создает слишком большую нагрузку на MongoDB.

Так что теперь я изучаю, как агрегировать данные вспособ, который позволяет быстрее вычислять квантили 0-100.Я хотел бы рассчитать агрегацию из 1 или более партий, а затем рассчитать процентили из этих агрегаций.1 партия содержит 10, 250 или 500 документов.Одна идея состояла в том, чтобы вычислить процентили 0 - 100 партии и сохранить это.При расчете общего процентиля я бы рассчитал процентили агрегированных процентилей.Я знаю, что это приведет к потере данных, но я думаю, что это терпимо.Существуют ли более эффективные способы агрегирования данных осмысленным образом, чтобы минимизировать время расчета процентилей (и размер запроса в MongoDB) и повысить точность?

Чтобы дать вам представление о том, как x- значения распределяются при расчете точных процентилей от 0 до 100: для некоторых «групп данных» (определяется фильтром) процентиль от 0 до 90 почти линейна от 20 до 100, а затем возрастает более экспоненциально до 138для 99-го процентиля и максимальный>> 1010 * Для другой «группы данных» процентиль от 0 до 15 возрастает с 20 до 600 Затем плато до 750 для 90-го процентиля и поднимается до 1050 для99-й процентиль с максимальным значением 3000.

Так что агрегирование по сегментам может быть трудным.Было бы хорошо, если бы он был точным до 99-го процентиля, и я сохранил максимальное значение отдельно.

...