时间尺度超表列与多个表/规范化模式

Lou*_*Lou 4 postgresql timescaledb

我正在使用 Timescale DB 来存储来自许多设备的测量结果。由于到目前为止大多数设备都有一组类似的指标,因此我使用了一个包含许多列的超表(每个指标一个)。

但是,一些新设备必须支持不同的指标,并且我还需要为每个设备计算和存储派生值。

所以看来我必须将这些值存储为单独的表,或者如果我想有一种保存时间序列数据的通用方法,则必须使用标准化方法(时间戳、设备、metric_type、值)?

“多列”模式方法对于此类测量来说是错误的,还是我做错了?

小智 5

这里没有一刀切的答案。很大程度上取决于您的查询模式和分析。但是,一个好的初始经验法则是每种设备类型都有一个超表。

这样,存储相似度量的设备会一起存储在一个表中,但不同的设备类型有不同的表。如果一种设备类型只是先前类型的升级并且具有字段的超集,我建议使用具有新的可空列的同一表。NULL 在 Postgres 中非常便宜,就像添加新的 NULLable 列一样。

我会远离 EAV/标准化方法(时间戳、设备、metric_type、值),除非您希望用户添加自定义字段。