【问题标题】:data modelling in influxdbinfluxdb 中的数据建模
【发布时间】:2019-12-05 03:42:00
【问题描述】:

我想听听您对 influxdb 中数据建模的建议。我的车辆会产生很多值,例如 soc、里程表、纬度、经度等。 我有 2 个选项可以用来对涌入的数据进行建模

1) 创建一个单独的测量值作为“x”,标签为vehicle_id,以及该测量值的各种字段,如soc、里程表、纬度、经度

2) 创建多个测量值,如 soc、里程表、纬度、经度...每个作为选项卡 vehicle_id

您更喜欢哪一个以及为什么。 我正在使用第一个,这似乎是一种更自然的方法。

【问题讨论】:

    标签: data-modeling influxdb


    【解决方案1】:

    根据他们的官方documentation,测量在概念上是一个表格。字段更像是单一度量下的属性。因为 influxdb 是一个列式数据库,记录/点被组织成一个系列的结构,其中每个系列都属于一组 db、一个度量和字段,以一个或多个字段作为标识符。

    要回答您的问题,如果您想join 多个功能进行查询,您应该将它们作为字段放在一个单独的度量下;如果它们没有任何互连,那么将它们作为单独的测量值将更易于人类阅读。

    此外,理论上,您实际上可以将所有内容放在一个包含数百个字段的单个测量中,并仅使用相关字段进行查询。但这会产生高基数,这会给读/写过程带来压力。您需要通过 influxdb 配置上的批处理和缓存来处理高基数。因此,使用尽可能少的字段会提高读写效率。

    【讨论】:

    • 基数取决于标签中唯一值的数量,而不是字段。
    【解决方案2】:

    选择选项 1。

    以后查询使用这些数据会更容易。

    例如,单个“车辆”指标

    +------------+-----+----------+-----+-----+
    | vehicle_id | soc | odometer | lat | lon |
    +------------+-----+----------+-----+-----+
    | ac31b2ea31 |   ? |   123144 |  42 |  22 |
    +------------+-----+----------+-----+-----+
    

    将vehicle_id 设为tag,其余为fields

    请记住,您拥有的标签越多,这些标签值 (the larger and slower your index) 中的唯一值(又名“cardinality”)就越多。

    【讨论】:

    • 是的,我使用的是相同的方法,因为我有很多查询需要根据多个字段进行过滤
    【解决方案3】:

    在我们的案例中,我们管理的一些设备保存多个数据(例如 GPS 提供纬度、经度等),因此对设备 (GPS) 进行一次测量并在字段中包含不同的值感觉很自然。我们为车辆 ID 添加标签。

    这种方法还意味着在字段名称中没有要实现的命名约定。

    请分享你最后使用的东西。

    【讨论】:

    • 我使用的是第一种方法。一次测量有很多领域。它可以帮助我非常轻松地编写复杂的查询
    • 标签很容易过滤,我不明白你的意思。
    【解决方案4】:

    两种模型的基数问题相同,计算基数的是(测量、标签、字段)的唯一组合的数量,因此在测量中拆分字段不会降低基数。

    您应该考虑的是您希望对数据执行的分析类型。从历史上看,我仍然认为是这样,InfluxQL 无法跨测量进行计算,因此将您的各个字段拆分为单独的测量会阻止您进行一些计算。

    就时间序列而言,表格模型不是理想的方法,最好将每个时间序列视为一个单独的对象并利用可以处理一组序列的函数,无论您如何决定在存储层中组织您的数据,分析层可以利用它。

    【讨论】:

    • 字段值不影响基数。
    猜你喜欢
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多