Мы используем Postgres для аналитики (звездная схема). Каждые несколько секунд мы получаем отчеты о ~ 500 типах показателей. Простейшая схема будет:Схема для таблицы аналитики в Postgres
timestamp metric_type value
78930890 FOO 80.9
78930890 ZOO 20
Наша DBA уже придумал с предложением, чтобы сгладить все сообщения одних и тех же 5 секунд до:
timestamp metric1 metric2 ... metric500
78930890 90.9 20 ...
Некоторые разработчики оттеснить на этом говорю, что это добавляет огромная сложность в разработке (пакетные данные, так что они написаны одним выстрелом) и на ремонтопригодность (просто просмотр таблицы или добавление полей сложнее).
Является ли модель DBA стандартной практикой в таких системах или только в крайнем случае, когда исходная модель явно недостаточно масштабируема?
EDIT: конечная цель - нарисовать линейную диаграмму для пользователей. Таким образом, в основном запросы будут выбирать несколько показателей, складывать их по часам и выбирать min/max/avg per hour (или любой другой период времени).
EDIT: аргументы DBA являются:
Это актуально с 1 дня (см ниже), но даже если бы не было это то, что система в конечном итоге нужно будет делать и миграции из другой схемы будет боль
Уменьшение количества раз рядов X500 позволит более эффективные индексы и памяти (таблица будет содержать сотни миллионов строк перед этой оптимизации)
При выборе множественным меня шегося предложенная схема позволит за один проход над данными вместо отдельного запроса для каждой метрики (или некоторые сложные комбинации OR и GroupBy)
EDIT: 500 метрик является «верхней границы», но на практике большинство из время только ~ 40 метрики представлены на 5 секунд (не то же самое 40, хотя)
Что делают запросы к схеме? Сколько работы они должны сделать, чтобы сравнить значения показателей друг с другом за одну и ту же метку времени? –
И аргументы вашего DBA для такой (преждевременной) денормализации ...? – Tibo
Вы DBA отстаиваете 500 столбцов? Это кажется ... необычным для администраторов баз данных. – bma