Хочу разместить хранение статистики в postgres: 15 минутные срезы, часовые, суточные, недельные, месячные (лол) и годовые. Как это лучше оформить? По отдельной таблице на масштаб, или вставить столбец с дискриминатором. Кластеризация возможна в обоих случаях, в последнем будет экономиться место.. но работать будет вероятно одинаково медленно как часовая выборка, так и месячная. Запись будет вероятно производиться куда чаще, чем чтение.
Что бы вы мне посоветовали исходя из того, что я сейчас еще не знаю возможной нагрузки на БД?
База отсчёта всегда одинакова? или плавает?
Четвёртый 15-минутный срез одновременно является часовым?
Срезы фиксированы, или возможна корректировка данных "задним числом" и соответственно пересчёт срезов?
А что собственно будет делаться далее с этими срезами? нахрена они будут храниться? и как долго?
Akina, нужна мне статистика с одного сервиса. Как пет проект для самообучения. Так что считай что захотелось странного :D Храниться будет пока мне не надоест, или пока я не забуду оплатить vds. База отсчёта всегда одинакова? или плавает?
Не совсем понял, о чем речь, но планирую забирать данные раз в 15 минут. Четвёртый 15-минутный срез одновременно является часовым?
Не принципиально, но возможно так и сделаю. Срезы фиксированы, или возможна корректировка данных "задним числом" и соответственно пересчёт срезов?
Сервис иногда подтормаживает, поэтому возможно придется аппроксимировать. Но это не страшно, я готов хранить как сырые данные, так и обработанные. Но хочется научиться делать это максимально красиво даже в случае нестабильного источника данных.
Зависит от объема данных, вообще отдельные таблицы в этом кейсе выглядят как преждевременная оптимизация. У вас же и в коде потом несколько таблиц будет и возможно лишний слой появится для инъекции различного поведения. А потом вероятно у вас ещё и поведение может разойтись для разных срезов и вам нужно будет знать как вы прочитали, чтобы знать как обрабатывать. Вообщем идея так себе если нет веских причин для этого.
База отсчёта всегда одинакова? или плавает?
Не совсем понял, о чем речь, но планирую забирать данные раз в 15 минут.
Я имею в виду, что, например, для часового среза данные берутся строго с 0 минут 0 секунд, или как получится, лишь бы между самой ранней взятой в диапазон и самой ранней после него было более часа?
Четвёртый 15-минутный срез одновременно является часовым?
Не принципиально, но возможно так и сделаю.
Вы не поняли. Это очень важный вопрос. Если, скажем, 15-минутки показали нечто в количестве 2,3,4 и 5, то часовая будет сколько? 5? 2+3+4+5=14? или будет посчитано, например, количество только уникальных нечто в этом часе?
Если нет особых требований, то пока удобно создать такие таблицы:
Таблица "План накопления статистики"
id - идент. плана
begin_date - дата/время начала сбора статистики
end_date - дата/время окончания сбора статистики
name - название плана
description - описание плана
interval - интервал накопления статистики в секундах
... - другие параметры плана
Таблица "Точка фиксации показателей"
id - идент. точки
plan_id - инд. плана накопления статистики
begin_date - дата/время начала сбора данных для точки фиксации
end_date - дата/время окончания сбора данных для точки фиксации
Таблица "Агрегированные показатели точки фиксации"
id - идент. показателя
Name - название показателя
measure_id - инд. единицы измерения показателя (тоже нужна таблица справочник: байты, биты, байт/с, Ватт, Кг и т.д.)
Таблица "Значения агрегированных показателей точки фиксации"
id - идент. значения показателя
point_id - идент. точки фиксации
param_id - идент. показателя
value_int - значение показателя в целых числах
value_flt - значение в вещественных числах
value_str - значение в строковом представлении
value_... - если нужен еще какой-то тип данных, которых можно индексировать.
Можно в ручном режиме создать запись плана накопления статистики.
Скриптом планировщиком можно считать по каждому плану последнюю запись точки фиксации и туда накапливать значения показателей. Кол-во показателей в каждой точке может быть задано произвольное, и их можно менять в процессе мониторинга.
Также можно пересобирать статистику, имея первичные данные и заполненный ранее план.
Создание индексов на value и внешние ключи позволит быстро работать данной структуре.