Как я могу получить распределение значения поля в притоке дБ
Я использую приток базы данных, чтобы сохранить данные о производительности моего веб-сайта. Данные в моей базе данных притока приведены ниже:
//mock data
time load
---- ----
2018-11-27T08:34:46.899z 262
2018-11-27T08:35:46.899z 300
2018-11-27T08:36:46.899z 102
2018-11-27T08:37:46.899z 1000
2018-11-27T08:38:46.899z 800
2018-11-27T08:39:46.899z 6000
2018-11-27T08:40:46.899z 326
2018-11-27T08:41:46.899z 500
2018-11-27T08:42:46.899z 90
2018-11-27T08:43:46.899z 902
Моя цель - получить распределение значения нагрузки. Например, я хочу получить распределение времени загрузки в форме, как показано ниже:
load frequent
---- ----
0~100 1
100~200 1
200~300 2
300~400 2
.
.
.
5000~6000 1
Я пытаюсь решить эту проблему двумя способами, но я подумал, что это не лучший способ получить такой результат.
(一) Запрос всего времени загрузки, а затем на моем сервере nodejs для расчета этого результата. Я думаю, что это решение встретит проблему производительности, когда я хочу получить распределение продолжительности одного года или более.
(二) В то же время, сохраняя мои необработанные данные в притоке дБ, я вычисляю диапазон времени загрузки, затем сохраняю его в другую таблицу притока дБ, вычисляю таблицу, как показано ниже:
// load distribute table
time 100~200 200~300 300~400 .... 5000~6000
---- ---- ---- ---- ----
08:34:46 1
08:34:47 1
08:34:48 1
08:34:49 1
08:34:50 1
// then in the future I can get the distribution like this:
select count(*) from load_distribute
1 ответ
Я не знаю, как сделать группировку диапазонов только в InfluxDB (кроме как по временному интервалу).
Более того, даже реляционные БД либо используют расширения SQL, такие как CASE, либо присоединяются к подзапросу, хотя Influx не является ни одним из реляционных.
Оставаясь в стеке TICK, вы можете сделать это с помощью обработки Kapacitor, но вот в чем дело: это база данных TIMESERIES. Время является ключевым, и я не вижу, где фактор времени там задействован...
Так что, возможно, лучшим решением было бы сделать серию отдельных запросов, которые будут подсчитывать вхождения значений в каждом диапазоне, а затем собрать их в вашем приложении.
Или присоедините те же вещи в Kapacitor по временным интервалам (например, пакетируйте его каждые 10 минут), объедините его в одно измерение, где имена значений будут представлять диапазоны нагрузки, а счет будет значением (load0_99=3,load100_199=24 и т. д.) - и тогда вы сможете сделать это одним запросом.