使用更多的测量结果还是仅使用标签来提高性能更好?

时间:2019-01-05 21:24:52

标签: database performance database-design schema influxdb

我正在使用InfluxDb记录许多发电厂的测量结果。目前,我正在使用一个带有power_plant作为标记的度量,而不是用于度量的字段。对每个电厂进行不同的测量还是仅使用标签是更好的选择?我担心这种测量何时会有TB或更多数据的性能?

此刻,我具有这样的结构(所有电厂数据都可以进行一次测量,并使用标签powerplant和device来查询数据)

private static $invertersMeasurement = [
    'value' => NULL,
    'tags' => [
        'power_plant' => NULL,
        'device' => NULL,
        'logger_ip' => NULL,
        ],
    'fields' => [
        'type' => NULL,
        'e_total' => NULL,
        'status' => NULL,
        'error' => NULL,
        'temp' => NULL,
        'pac' => NULL,
        'pdc1' => NULL,
        'udc1' => NULL,
        'idc1' => NULL,
        'pdc2' => NULL,
        'udc2' => NULL,
        'idc2' => NULL,
        'pdc3' => NULL,
        'udc3' => NULL,
        'idc3' => NULL,
        'pdc4' => NULL,
        'udc4' => NULL,
        'idc4' => NULL
        ],
    'time' => NULL
];

是否最好删除电厂标签并以不同的度量来存储每个电厂的数据?

2 个答案:

答案 0 :(得分:0)

不,请保留标签,因为某些可视化工具(例如Grafana)对标签的支持要比测量更好,而且按标签进行过滤既快捷又便宜(如果您不具备高基数标签)。无论如何,您的架构对我来说看起来不错。

答案 1 :(得分:0)

问::使用更多测量更好吗?

A:将所有数据包含在一个度量中的优点是,当将所有点都放在一个位置内时,执行数据聚合要容易得多。

但是,这是在influxdb /* DictionaryServices.h DictionaryServices framework */ /*! @typedef DCSDictionaryRef @abstract Opaque CF object that represents a dictionary file */ public class DCSDictionary { } @available(OSX 10.5, *) public func DCSGetTermRangeInString(_ dictionary: DCSDictionary?, _ textString: CFString, _ offset: CFIndex) -> CFRange 之前的一个问题,在该问题上根本无法进行交叉测量联接。这意味着您无法在来自不同度量的数据点之间进行数据聚合。

注意:到目前为止,只有v1.7.0这种新的influx 2.0查询语言允许您进行交叉测量联接。

在大多数情况下,如果通过将正确类型的点数据存储到适当的度量中来正确设计方案,则不必进行交叉度量联接。

查看您的字段,我可以看到一些数据类型,例如温度。也许可以将它们放在不同的尺寸内?这样一来,开发人员(尤其是新雇用的开发人员)可以更轻松地发现数据吗?

这也使您的测量变得井井有条。如果每隔一分钟就有一次温度数据输入,并且某些字段的间隔为2分钟,则单个测量数据集可能看起来很混乱。这意味着在某些情况下,特定的数据行将始终仅具有温度场,而其他情况则不会。

您需要处理这种极端情况。您是否进行flux插值?

不确定ucp idc 1,2,3和4字段是什么。如果它们以某种方式关联,则应单独进行测量。在某种意义上与某些字段的组合相关联,例如ucp1和ucp2,您可以计算出是否可以理解数据以告诉您一些信息。例如高温值+低ucp值意味着机器故障了?

我将按照正确的度量对您的数据进行分组,否则,实际上influxdb中不需要linear