3

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

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

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

对于这些类型的测量,“多列”模式方法是错误的,还是我做错了?

4

1 回答 1

3

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

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

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

于 2019-05-07T20:18:42.620 回答