在 InfluxDB 中存储多维数据(例如光谱)的推荐方法
Recommended approach to store multi-dimensional data (e.g. spectra) in InfluxDB
我正在尝试将时间序列数据库与实验室实时监控设备结合起来。对于温度等标量数据,line protocol 效果很好:
temperature,site=reactor temperature=20.0 1556892576842902000
对于一维(例如红外光谱)或更高维数据,我想出了两种写入数据的方法。
- 将光谱的每个元素写成字段集,如下所示。这样我就可以查询个人频率并使用现有软件进行分析或可视化。然而,由于光谱仪的高分辨率,每条记录很容易包含数千个字段集。我担心的是线路协议是否太笨重,存储效率是否会降低。
ir_spectrum,site=reactor w1=10.0,w2=11.2,w3=11.3,......,w4000=2665.2 1556892576842902000
- 将向量存储为序列化字符串(例如,JSON)。这样我可能需要一些插件来使数据适配Grafana等可视化工具。但是协议看起来会更干净。我不确定存储布局是否比第一种方法更好。
ir_spectrum,site=reactor data="[10.0, 11.2, 11.3, ......, 2665.2]" 1556892576842902000
请问有没有推荐的高维数据存储方式?谢谢!
第一种方法从性能和磁盘 space 使用 PoV 来看更好。 InfluxDB 将每个字段存储在单独的列中。如果一列包含相似的数值,那么与具有 JSON 个字符串的列相比,它可能被压缩得更好。这也提高了仅选择字段子集或过滤字段子集时的查询速度。
P.S。 InfluxDB 可能需要大量 RAM 来处理大量字段和大量标签组合(也称为高基数)。在这种情况下,有替代解决方案,它支持 InfluxDB 线路协议,并且需要更少的 RAM 来实现高基数时间序列。例如,参见 VictoriaMetrics.
我正在尝试将时间序列数据库与实验室实时监控设备结合起来。对于温度等标量数据,line protocol 效果很好:
temperature,site=reactor temperature=20.0 1556892576842902000
对于一维(例如红外光谱)或更高维数据,我想出了两种写入数据的方法。
- 将光谱的每个元素写成字段集,如下所示。这样我就可以查询个人频率并使用现有软件进行分析或可视化。然而,由于光谱仪的高分辨率,每条记录很容易包含数千个字段集。我担心的是线路协议是否太笨重,存储效率是否会降低。
ir_spectrum,site=reactor w1=10.0,w2=11.2,w3=11.3,......,w4000=2665.2 1556892576842902000
- 将向量存储为序列化字符串(例如,JSON)。这样我可能需要一些插件来使数据适配Grafana等可视化工具。但是协议看起来会更干净。我不确定存储布局是否比第一种方法更好。
ir_spectrum,site=reactor data="[10.0, 11.2, 11.3, ......, 2665.2]" 1556892576842902000
请问有没有推荐的高维数据存储方式?谢谢!
第一种方法从性能和磁盘 space 使用 PoV 来看更好。 InfluxDB 将每个字段存储在单独的列中。如果一列包含相似的数值,那么与具有 JSON 个字符串的列相比,它可能被压缩得更好。这也提高了仅选择字段子集或过滤字段子集时的查询速度。
P.S。 InfluxDB 可能需要大量 RAM 来处理大量字段和大量标签组合(也称为高基数)。在这种情况下,有替代解决方案,它支持 InfluxDB 线路协议,并且需要更少的 RAM 来实现高基数时间序列。例如,参见 VictoriaMetrics.