我正在使用Timescale DB存储许多设备的测量值。由于到目前为止,大多数设备都具有一组相似的指标,因此我使用了具有许多列的超级表(每个指标一个)。
但是,某些新设备将必须支持不同的指标,并且还需要为每个设备计算和存储派生值。
因此,如果我想采用一种通用的方式来保存时间序列数据,似乎必须将这些值存储为单独的表,或者使用归一化的方法(时间戳,设备,metric_type,值)?
“多列”架构方法在这些类型的度量中是否错误,或者我做错了吗?
答案 0 :(得分:1)
这里没有一种千篇一律的答案。在很大程度上取决于您的查询模式和分析。但是,良好的初始经验法则是每种设备类型一个超表。
这样,存储相似度量的设备将一起存储在一个表中,但是对于不同的设备类型,您将拥有不同的表。如果一种设备类型只是前一种类型的升级,并且具有字段的超集,则建议您使用带有新NULLable列的同一表。 NULLS在Postgres中非常便宜,就像添加新的NULLable列一样。
除非您希望用户添加自定义字段,否则我将远离EAV /标准化方法(时间戳,设备,metric_type,值)。