postgresql - 时间尺度超表列与多个表/规范化模式
问题描述
我正在使用 Timescale DB 存储来自许多设备的测量值。由于迄今为止大多数设备都有一组相似的指标,因此我使用了一个包含许多列的超表(每个指标一个列)。
但是,一些新设备必须支持不同的指标,并且还有我需要为每个设备计算和存储的派生值。
所以看来我必须将这些值存储为单独的表,或者如果我想要一种保存时间序列数据的通用方法,或者使用规范化方法(时间戳、设备、metric_type、值)?
对于这些类型的测量,“多列”模式方法是错误的,还是我做错了?
解决方案
这里没有一刀切的答案。很大程度上取决于您的查询模式和分析。但是,一个好的初始经验法则是每个设备类型一个超表。
这样,存储类似度量的设备将一起存储在一个表中,但对于不同的设备类型,您有不同的表。如果一种设备类型只是以前类型的升级并且具有字段超集,我建议使用具有新的 NULLable 列的同一个表。NULLS 在 Postgres 中非常便宜,就像添加新的 NULLable 列一样。
除非您希望用户添加自定义字段,否则我会远离 EAV/规范化方法(时间戳、设备、metric_type、值)。
推荐阅读
- react-spring - react-spring 和 typescript 不可调用错误
- python - 无法从 torchvision 加载数据集
- python - 使用 subprocess.call 调用外部命令在 python 3.9.2 上不起作用
- c# - 快速访问多个值
- mysql - Visual Studio - 绑定导入到项目的数据库
- c++ - 为类重载 ostream << 运算符
- azure-synapse - 无法在 Azure Synapse 中从 spark 池写入 sql 池
- python - 在 Windows 10 上安装 mysqlclient 时出现错误,不支持任何库
- ruby-on-rails - 如何在 mac mini m1 上安装 gem pg?
- c# - Xamarin Forms Byte [] to Image Source 未显示