2016-08-27 2 views
0

Каков наилучший способ хранения данных показателей, используемых при отображении графиков?Лучший способ хранения метрических данных, используемых для графиков

В настоящее время у меня есть таблица analytics(domain::text, interval_in_days::int, grouping::text, metric::text, type::text, labels[], data[], summary::json)

domain является общей категорией метрик. Как какая часть приложения они находятся. Может быть sales или support т.д.

interval_in_days и grouping являются «параметры просмотра» конечный пользователь может указать на уровне интерфейса, чтобы иметь различный вид точек данных.

grouping может быть date, day_of_week или time_of_day interval_in_days могут быть 7, 30 or 90

labels представляет собой массив меток на оси х и data являются соответствующими точками данных.

type либо data_series, либо summary. Если data series, строка представляет это данные, используемые для построения графика, в то время как summary имеет summary:json поле заполняется с объектом, как {total_number_of_X: 132, median_X: 320.. etc}

metric просто метрика соответствующий граф представляет собой, таким образом, есть отдельный график для каждого значения metric

Из этого следует, что для каждой отображаемой метрики/графика у меня есть 9 (3 интервала * 3 группировки). Для каждого domain у меня есть одна строка с типом summary.

Каждые несколько часов я объединяю множество данных по нескольким таблицам в таблицу аналитики. Поэтому мне не нужно выполнять дорогостоящие запросы adhoc.

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

ответ

0

Нет ничего плохого в хранении 9 строк необработанных данных и последующем их объединении в нечто более удобное. Это общий подход и имеет преимущества в некоторых ситуациях.

То, что я действительно задумал бы в вашем дизайне, это типы данных. Из вашего описания кажется, что вы можете преобразовать все поля ::text во что-то вроде ::varchar(20). Затем вы можете использовать STORAGE PLAIN в этих столбцах, и ваша таблица станет более эффективной.

Кроме того, рассмотрите возможность добавления внешних ключей для описания того, что хранится в отдельных столбцах. Например, вы указали, что grouping может быть date, day_of_week или time_of_day, поэтому у вас может быть таблица groupings, в которой перечислены эти параметры. Но опять же, внешний ключ должен быть покрыт индексом, поэтому вы можете пропустить это по причинам производительности.

Смежные вопросы