Как я могу получить распределение значения поля в притоке дБ - PullRequest
0 голосов
/ 02 декабря 2018

Я использую приток базы данных для сохранения данных о производительности моего веб-сайта. Данные в моем притоке данных приведены ниже:

//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 Ответ

0 голосов
/ 04 декабря 2018

Я не знаю, как выполнить группировку диапазонов только в InfluxDB (кроме как по временному интервалу).

Более того, даже реляционные БД либо используют расширения SQL, такие как CASE, либо присоединения подзапросов.там - хотя Influx не является ни одним из реляционных.

Оставаясь в стеке TICK, вы можете сделать это с помощью обработки Kapacitor, но вот в чем дело: это база данных TIMESERIES.Время является ключевым моментом, и я не вижу, где здесь задействован фактор времени ...

Так что, возможно, лучшим решением было бы сделать серию отдельных запросов, которые будут подсчитывать вхождениязначения в каждом диапазоне, а затем объедините их в своем приложении.

Или объедините одни и те же вещи в Kapacitor по временным интервалам (например, пакетируйте его каждые 10 минут), сведите его в одно измерение, где значениеимена будут представлять диапазоны загрузки, а счет будет значением (load0_99 = 3, load100_199 = 24 и т. д.), и тогда вы сможете сделать это в одном запросе.

...