InfluxDB 是一个时序数据库(TSDB),它的结构层次与传统的关系型数据库有所不同。它的层次结构主要包括以下几个关键组件:Database(数据库)Retention Policy(保留策略)Measurement(测量)Tag(标签)Field(字段)Point(数据点)Shard(分片)。这些组件共同构成了 InfluxDB 存储和管理时序数据的架构。

InfluxDB 的结构层次

  1. Measurement(测量)

    • Measurement 是数据的分类或名称,类似于 SQL 中的“表”。它是存储时间序列数据的核心容器。
    • 一个数据库可以包含多个 measurement,每个 measurement 存储不同种类的时间序列数据(例如:temperaturehumiditycpu_usage 等)。
    • Example: temperaturecpu_usagedisk_space 等。
  2. Database(数据库)

    • Database 是 InfluxDB 中存储数据的最顶层容器。每个数据库可以包含多个 measurement。你可以在多个数据库之间进行数据隔离。
    • 在 InfluxDB 中,数据库本身不提供任何分区,它只是一个存储数据的逻辑容器。
    • Example: sensor_datamonitoring_data 等。
  3. Retention Policy(保留策略)

    • Retention Policy 是数据存储的有效期限和副本数的设置。Retention Policy 决定了数据点的生命周期(数据保存多长时间)和复制策略。
    • 每个数据库至少有一个保留策略,默认是 autogen,它通常会设置一个自动删除过期数据的时间(例如:1天、1月等)。
    • 你可以为每个数据库创建多个保留策略,并且可以指定默认保留策略。数据写入时如果没有明确指定保留策略,将使用默认策略。
    • DURATION:指定数据点的有效期限。如果是 INF,表示数据会永久存储。
    • REPLICATION:指定数据副本数,通常在高可用部署中使用。
    • Example: autogen(默认策略),permanent(永久策略)等。
  4. Shard(分片)

    • Shard 是存储数据的物理分片。数据会根据时间戳分布到不同的分片中。每个分片包含一段时间范围内的数据。
    • 当你创建一个数据库并写入数据时,InfluxDB 会根据保留策略的 shard group duration 将数据分配到不同的分片。
    • Shard 是通过 时间范围 来划分的,这意味着较老的数据可能会被存储在更早的分片中,而较新的数据会被存储在当前分片中。
    • Example: 数据在每隔一段时间(比如 1 天、1 月)会被写入新的 shard。
  5. Point(数据点)

    • Point 是 InfluxDB 存储的最小数据单元,表示一个单独的时间序列数据。一个 Point 包含以下元素:
      • Measurement:数据的名称。
      • Tags:用于描述数据的元数据(键值对),用于索引。
      • Fields:实际的数值数据(如温度、湿度、压力等)。
      • Timestamp:数据点的时间戳,表示数据记录的时间。
    • Example: {measurement="temperature", tags={location="room1", sensor="sensor1"}, fields={value=25.5}, timestamp=1622045600000000000}
  6. Field(字段)

    • Field 是实际的数值数据,表示测量值。字段存储的是可以进行计算的数据,例如温度、湿度、压力等。
    • 字段的值可以是:
      • 数字:浮动数值、整数。
      • 字符串:例如日志信息、事件描述。
      • 布尔值:True 或 False。
    • 字段不支持索引,因此查询时速度不如标签快,但字段可以支持更多的数据类型。
  7. Tag(标签)

    • Tag 是键值对,用于对数据进行分类和标识。标签是 索引字段,使得基于标签的查询非常高效。标签可以用来按特定条件过滤数据。
    • 标签通常用于表示数据的维度或属性(如:传感器的 ID、设备的地点、网络接口等)。
    • Example: location="room1", sensor="sensor1"

InfluxDB 数据结构图示

+---------------------+         +------------------------+
|       Database      |         |       Retention        |
|   (sensor_data)     +-------->+    (autogen)           |
+---------------------+         +------------------------+
         |                              |
         |                              v
         |                      +----------------+
         |                      |   Shard Group  |
         |                      | (time range)   |
         |                      +----------------+
         |                              |
         v                              v
+-------------------+          +-------------------+
|    Measurement    |          |      Point        |
|  (temperature)    |          |   (value=25.5)    |
+-------------------+          +-------------------+
         |                              |
         v                              v
+-------------------+          +-------------------+
|      Tags         |          |    Fields         |
| (location=room1)  |          |    (value=25.5)   |
+-------------------+          +-------------------+

总结:

InfluxDB 的数据存储结构是分层的,通过数据库、保留策略、测量、标签、字段和数据点来组织数据。这样设计的好处是:

  • 高效的查询:通过标签索引,InfluxDB 可以快速定位数据。
  • 高效的存储:通过分片和保留策略,InfluxDB 可以根据数据时间范围进行优化存储和管理。
  • 灵活的查询:通过 Measurement、Tag 和 Field,可以灵活地查询、过滤和聚合数据。

客户端查看工具: - https://github.com/JorgeMaker/InfluxDBWorkBench?tab=readme-ov-file