influxdb 中的模式设计
Schema design in influxdb
我对 influxDB 的用例是用于存储和趋势分析来自不同 PLC 的过程数据。我使用 grafana 可视化这些数据。在第一个试点中,我使用了来自 influxDB 的模式设计指南,使用通用测量名称并通过标签分隔不同的值源。
例如,当我在 'acid' 泵组中有 2 个泵,在 'caustic' 泵组中有 2 个泵时,我重新调节了压力:
- pump_pressure {pump: pump_1, group: acid}
- pump_pressure {pump: pump_2, group: acid}
- pump_pressure {pump: pump_1, group: caustic}
- pump_pressure {pump: pump_2, group: caustic}
在我的用例中,最终用户希望能够使用 Grafana 制作自己的趋势。虽然这种记录数据的方式符合 influxDB 的模式设计指南(我认为),但对于不习惯使用 SQL 之类的语言进行工作和思考的非技术人员来说,这非常令人困惑。
因此,我很想以他们习惯的方式存储数据,这是在类似产品(历史学家)中工作的一般方式:
- ACID_pump_1_pressure
- ACID_pump_2_pressure
- CAUSTIC_pump_1_pressure
- CAUSTIC_pump_2_pressure
这将使最终用户更容易制定趋势,因为 1 个测量 = 一个数据源,而且他们不必担心 where
和 group by
条款。
任何人都可以指出一些线索,后者对 influxDB 性能和存储有何影响。这样数据会占用更多space吗?请注意,后一种方法可以导致几千次测量,但它们的基数都是1。
确实可以采用这种方法。然而,这是不可扩展的。如果使用的泵数量增加怎么办?然后,这种方法也适用于泵数量等于时间序列数量的情况。然而,它变得很难管理。
如果问题是避免非技术用户与 SQL 查询的交互,那么应该考虑不同的方法,而不是改变数据库的 "schema"。
更多见解 --> https://blog.zhaw.ch/icclab/influxdb-design-guidelines-to-avoid-performance-issues/
如果它更适合您的用例,您没有理由不这样做。您开始使用的指南就在那里,因为它释放了 InfluxDB 标记功能的全部功能。
不会对性能或存储产生任何影响。在内部,InfluxDB 根据每个独特的测量 "key" 创建一个新系列,其中键是测量名称和标签 key/value 对的组合。
也就是说,每一个都是一个单独的系列:
pump_pressure,pump=pump_1,group=acid
pump_pressure,pump=pump_2,group=acid
pump_pressure,pump=pump_1,group=caustic
pump_pressure,pump=pump_2,group=caustic
此外,每一个都是一个单独的系列:
ACID_pump_1_pressure
ACID_pump_2_pressure
CAUSTIC_pump_1_pressure
CAUSTIC_pump_2_pressure
编辑,来源:我在 InfluxData 工作
编辑 2,话虽如此,我也完全同意@srikanta,我建议保留标签,但要找到另一种与数据库用户交互(或教育)的解决方案。
我对 influxDB 的用例是用于存储和趋势分析来自不同 PLC 的过程数据。我使用 grafana 可视化这些数据。在第一个试点中,我使用了来自 influxDB 的模式设计指南,使用通用测量名称并通过标签分隔不同的值源。
例如,当我在 'acid' 泵组中有 2 个泵,在 'caustic' 泵组中有 2 个泵时,我重新调节了压力:
- pump_pressure {pump: pump_1, group: acid}
- pump_pressure {pump: pump_2, group: acid}
- pump_pressure {pump: pump_1, group: caustic}
- pump_pressure {pump: pump_2, group: caustic}
在我的用例中,最终用户希望能够使用 Grafana 制作自己的趋势。虽然这种记录数据的方式符合 influxDB 的模式设计指南(我认为),但对于不习惯使用 SQL 之类的语言进行工作和思考的非技术人员来说,这非常令人困惑。
因此,我很想以他们习惯的方式存储数据,这是在类似产品(历史学家)中工作的一般方式:
- ACID_pump_1_pressure
- ACID_pump_2_pressure
- CAUSTIC_pump_1_pressure
- CAUSTIC_pump_2_pressure
这将使最终用户更容易制定趋势,因为 1 个测量 = 一个数据源,而且他们不必担心 where
和 group by
条款。
任何人都可以指出一些线索,后者对 influxDB 性能和存储有何影响。这样数据会占用更多space吗?请注意,后一种方法可以导致几千次测量,但它们的基数都是1。
确实可以采用这种方法。然而,这是不可扩展的。如果使用的泵数量增加怎么办?然后,这种方法也适用于泵数量等于时间序列数量的情况。然而,它变得很难管理。
如果问题是避免非技术用户与 SQL 查询的交互,那么应该考虑不同的方法,而不是改变数据库的 "schema"。
更多见解 --> https://blog.zhaw.ch/icclab/influxdb-design-guidelines-to-avoid-performance-issues/
如果它更适合您的用例,您没有理由不这样做。您开始使用的指南就在那里,因为它释放了 InfluxDB 标记功能的全部功能。
不会对性能或存储产生任何影响。在内部,InfluxDB 根据每个独特的测量 "key" 创建一个新系列,其中键是测量名称和标签 key/value 对的组合。
也就是说,每一个都是一个单独的系列:
pump_pressure,pump=pump_1,group=acid
pump_pressure,pump=pump_2,group=acid
pump_pressure,pump=pump_1,group=caustic
pump_pressure,pump=pump_2,group=caustic
此外,每一个都是一个单独的系列:
ACID_pump_1_pressure
ACID_pump_2_pressure
CAUSTIC_pump_1_pressure
CAUSTIC_pump_2_pressure
编辑,来源:我在 InfluxData 工作
编辑 2,话虽如此,我也完全同意@srikanta,我建议保留标签,但要找到另一种与数据库用户交互(或教育)的解决方案。