我有一个看起来像这样的模型:
class WidgetStack < ApplicationRecord
belongs_to :widget
belongs_to :person
validates :quantity,numericality: { greater_than_or_equal_to: 0,only_integer: true }
end
所有表都由这两个外键和quantity
bigint组成。 quantity
只能增加,并且每天可能更改数千次。
我想每小时记录一次widget_stacks
表的状态,以便可以报告过去一个小时中每个WidgetStack
数量的变化,日,周,月等
我的意愿是制作一个WidgetStacksHistory
模型和表格,然后使用whenever宝石每小时create
每WidgetStackHistory
记录一次WidgetStack
条记录。
我还找到了paper_trail宝石,该宝石可以进行模型版本控制,但我认为这不适合我,因为WidgetStack
的{{1}}经常更改,因此我需要记录每小时每小时quantity
同时进行一次。 WidgetStack
将会很多,我不需要/不想记录每一个更改。此外,由于我每小时需要每小时精确的WidgetStacks
,因此,如果我使用paper_trail,则必须记录每个更改,以确保每小时都有最新数据。
像这样对表进行定期快照的“跟踪方式”是什么?我的quantity
+ whenever解决方案是否可行?
更新,其中包含更多信息:
要澄清有关数据的信息:捕获数据时,它需要完全包含每个WidgetStacksHistory
,因此需要三个bigint(两个外键加WidgetStack
)和quantity
时间戳记每个created_at
。可能会有成千上万个WidgetStack
。我需要存储至少最后一天的每小时粒度,最后一个月的每天粒度以及无限期的每月粒度的数据。