数据表定义推荐

最近更新时间:2024-05-16 17:00:42

我的收藏
在设计数据表时,有一些需要遵循的准则和需要避免的误区,详情请参见官方文档 InfluxDB schema design and data layout。本文也给出创建数据表的建议,以帮助您创建高效的时序数据库。

数据库表命名

在定义 InfluxDB 数据表名称时,应该使用有意义的名称,以便可以轻松识别和理解表的内容。以下是一些有关定义有意义名称的建议:
使用描述性的名称,例如,如果您正在存储传感器数据,则可以使用传感器名称作为数据表名称。
避免使用缩写或简写词,因为这可能会导致混淆和不必要的困惑。
使用小写字母和连字符(-)来分隔单词,这样可以使名称更易于阅读和理解。
在命名数据表时,尽量避免使用特殊字符,因为这可能会导致查询和其他操作出现问题。
尽量使用短而简洁的名称,以避免在查询和其他操作中输入过多的字符。

Tag 与 Field

Tag 通常用于描述和标识数据,例如设备 ID、网络地址和地理位置等。它们有助于提高查询性能和优化系统资源的开销。Tag 值在查询时用于过滤和分组(如 Group by),因此在选择 Tag 值时应避免不必要的冗余和嵌套。
Field 通常用于描述和记录数据的趋势和变化,例如温度、电量、流量和速度等。Field 值可用于进行数学计算和统计分析,例如求平均值、最大值和最小值等。与 Tag 相比,由于 Field 值需要进行聚合和计算,Field 值的存储和查询开销较高,因此需要更多的 CPU 和内存资源支持。

将数据存储在 Tag 中

在 InfluxDB 中,Tag 是用于标识和描述数据的元数据。将数据存储在 Tag 中,可以提高数据库查询性能,更有效地管理和组织数据。以下是有关将数据存储在Tag 中的建议:
存储常用的元数据:如果某个数据是与其他数据相关的元数据,例如传感器名称、位置信息、数据源等,则将其存储在 Tag 中,这样可方便查询和过滤数据。
GROUP BY()中使用:如果您计划在 GROUP BY()语句中使用某个数据,则将其存储在 Tag 中。在 GROUP BY()中指定 Tag 名称,可以将查询结果按照 Tag 的值进行分组。
快速查询:如果您需要对某个数据进行快速查询,则将其存储在 Tag 中。由于 Tag 被索引, 在 Tag 上进行查询比在 Field 上进行查询效率更高。

将数据存储在 Field 中

在 InfluxDB 中,Field 是用于存储数据的元素。将数据存储在 Field 中可以方便进行 InfluxQL 函数操作,并且可以将其解释为除字符串之外的其他类型。以下是一些有关将数据存储在 Field 中的建议:
存储数值数据:如果您需要对数据进行数值计算或比较,则将其存储在 Field 中,这样可以方便地使用 InfluxQL 函数对数据进行操作。
存储时间戳数据:如果您需要对数据进行时间序列分析,则将其存储在 Field 中。InfluxDB 支持时间戳类型的 Field ,并提供了一些用于时间序列分析的函数。
避免存储重复的数据:如果某个数据已经存储在 Tag 中,则不需要再将其存储在 Field 中。这样可以避免数据重复,并使查询效率更高。
使用正确的数据类型:在定义 Field 时,应该使用正确的数据类型。例如,如果您正在存储数值数据,则应该使用数值类型的 Field,而不是字符串类型的Field。

数据 Field 分组

在 InfluxDB 中,Field 是用于存储数据的元素。在定义数据表时,将 Field 分组为相关的测量类型,有助于组织和管理数据,并使查询效率更高。以下是一些有关将 Field 分组的建议:
根据测量类型分组:将具有相同测量类型的 Field 分组到一起。例如,如果您正在存储传感器数据,则可以将温度、湿度、压力等测量类型分别分组。
使用连字符分隔单词:在命名 Field 时,使用连字符(-)而不是下划线(_)来分隔单词。因为 InfluxDB 中下划线用于分隔 Field 和 Tag,使用连字符(-)可以避免混淆。
组织数据表结构:在定义数据表时,考虑将不同测量类型的 Field 分组为不同的表结构,这样有助于更好地组织和管理数据,并使查询效率更高。
使用通配符进行查询:在查询时,可以使用通配符来查询相同测量类型的所有 Field 。例如,如果您想要查询所有温度字段,则可以使用通配符“*”来查询所有以“temp”结尾的 Field。