Я запускаю рубин на Rails-приложении с бэкэнд PostgreSQL, и мне интересно, какой стандартный способ хранить серию временных меток. Ситуация в том, что у меня есть модель с логическим атрибутом status
. Мне нужно отслеживать даты/время изменения этого атрибута, потому что мне нужно отслеживать периоды времени, в течение которых status
установлено на true
. Мой опыт с подобными проблемами серьезно отсутствует, и я не уверен, что наилучшая практика заключается в том, чтобы делать такие вещи масштабируемым образом. Два подхода, которые я рассмотрел, следующие:Хранение активных/неактивных временных меток
1) JSONifying text. Я думал о принятии массива, который может выглядеть следующим образом:
[
{
start: "20150131103045",
end: "20150228103045"
},
{
start: "20150531103045",
end: "20150628103045"
},
]
Я бы тогда JSONify этого массив и хранить его в text
колонки.
2) Создание отдельной таблицы, которая будет иметь столбцы model_id
, status
и time_recorded
атрибутов, а затем просто создание записи каждый раз, когда атрибут модели status
обновляется.
Какой из этих подходов более звучит? Что-то, чтобы рассмотреть здесь, состоит в том, что эти данные, вероятно, не будут читаться очень часто - в 95% случаев это будут только новые данные, которые будут записаны в базу данных.
Вариант 1) кажется менее тяжелым для меня, но также было бы больнее читать данные и сортировать их, когда мне нужно. Вариант 2) сохранит эти данные таким образом, с которым легче работать, и уже существующие данные никогда не нуждаются в чтении/обновлении, но таблица может быть очень большой, очень быстро. Кикер - это то, что я должен сделать это с несколькими моделями в моем приложении, поэтому принятие поспешного решения и реализация плохой архитектуры с самого начала может быть довольно раздражающим, чтобы иметь дело позже.
Каковы плюсы и минусы этих двух подходов? Является ли это одним из лучших решений, чем другое? Или есть другой, лучший вариант, о котором я не думал?