Как я могу получить распределение значения поля в базе данных притока

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

//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
But I think this solution may also have disadvantage such like waste the space of host machine, as you know this table is so sparse.


person kkdev163    schedule 02.12.2018    source источник


Ответы (1)


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

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

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

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

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

person Yuri G    schedule 04.12.2018