管理数据分区
当向InfluxDB Clustered写入数据时,InfluxDB v3存储引擎以对象存储格式存储在Apache Parquet中的数据。每个Parquet文件代表一个分区——数据的一个逻辑分组。默认情况下,InfluxDB按天对每个表进行分区。InfluxDB Clustered允许您自定义分区策略,并按标签值和不同的时间间隔进行分区。自定义您的分区策略以优化特定于您模式和负载的查询性能。
优点
自定义分区的主要优势是可以自定义您的存储结构,以优化特定于您模式和负载的查询性能。
- 针对特定类型查询优化存储以提高性能。例如,如果查询经常选择具有特定标签值的的数据,可以通过该标签进行分区以提高这些查询的性能。
- 针对特定类型数据的优化存储。例如,如果存储的数据是稀疏的,并且查询的时间范围通常远大于一天,则可以按周而不是按天进行数据分区。
缺点
使用自定义分区可能会增加InfluxDB v3存储引擎其他部分的负载,但每个部分都可以单独扩展以应对增加的负载。
以下缺点假设您的自定义分区策略包括用于分区的额外标签或小于一天的分区间隔。
- 增加对Ingester的负载,因为它将数据分组到更小的分区和文件中。
- 增加对Catalog的负载,因为存储和查询的分区Parquet文件位置引用更多。
- 增加对Compactor的负载,因为需要压缩更多的分区Parquet文件。
- 与对象存储相关的成本增加,因为创建了更多并存储了更多的分区Parquet文件。
- 未在WHERE子句中使用标签的查询性能下降的风险。这些查询可能最终会读取许多分区和较小的文件,降低性能。
限制
自定义分区有以下限制
- 数据库和表分区只能在创建时定义。创建后不能更新数据库或表的分区策略。
- 分区模板必须包含时间部分。
- 可以按最多八个维度(七个标签和一个时间间隔)进行分区。
分区工作原理
分区模板
分区模板定义了分区键使用的模式,并确定数据按什么时间间隔进行分区。分区模板使用标签值和Rust strftime日期和时间格式化语法。
有关更详细的信息,请参阅分区模板。
分区键
分区键唯一标识一个分区。一个分区模板定义了分区键的格式。分区键由最多8个维度组成(1个时间部分和最多7个标签或标签桶部分)。每个部分由分区键分隔符(|
)分隔。
分区键的默认格式是%Y-%m-%d
(例如,2024-01-01
)。
查询生命周期中的分区
查询数据时
- 目录为v3查询引擎(查询器)提供包含查询时间序列数据的分区位置。
- 查询引擎读取返回分区中的所有行,以确定哪些行与查询逻辑匹配并应包含在查询结果中。
查询引擎越快能够识别要读取的分区,并读取这些分区中的数据,查询性能就越高。
有关查询生命周期的更多信息,请参阅InfluxDB v3查询生命周期。
查询示例
考虑以下查询,该查询选择production
表中所有line
标签为A
且station
标签为cnc
的数据
SELECT *
FROM production
WHERE
time >= now() - INTERVAL '1 week'
AND line = 'A'
AND station = 'cnc'
使用默认分区策略(按天),查询引擎读取八个不同的分区(今天一个,以及过去七天的每个分区)
- 2024-11-12
- 2024-11-11
- 2024-11-10
- 2024-11-09
- 2024-11-08
- 2024-11-07
- 2024-11-06
- 2024-11-05
查询引擎必须扫描分区中的所有行,以确定哪些行中line
是A
且station
是cnc
。这个过程耗时且导致查询性能下降。
但是,如果您按其他标签分区,InfluxDB可以识别只包含查询需要的标签值的分区,从而减少扫描行以查看是否包含标签值的时间。
例如,如果数据按line
、station
和天进行分区,尽管有更多的分区文件,但查询引擎可以快速识别并读取仅与查询相关的数据
A | cnc | 2024-11-12
A | wld | 2024-11-12
B | cnc | 2024-11-12
B | wld | 2024-11-12
A | cnc | 2024-11-11
A | wld | 2024-11-11
B | cnc | 2024-11-11
B | wld | 2024-11-11
A | cnc | 2024-11-10
A | wld | 2024-11-10
B | cnc | 2024-11-10
B | wld | 2024-11-10
A | cnc | 2024-11-09
A | wld | 2024-11-09
B | cnc | 2024-11-09
B | wld | 2024-11-09
A | cnc | 2024-11-08
A | wld | 2024-11-08
B | cnc | 2024-11-08
B | wld | 2024-11-08
A | cnc | 2024-11-07
A | wld | 2024-11-07
B | cnc | 2024-11-07
B | wld | 2024-11-07
A | cnc | 2024-11-06
A | wld | 2024-11-06
B | cnc | 2024-11-06
B | wld | 2024-11-06
A | cnc | 2024-11-05
A | wld | 2024-11-05
B | cnc | 2024-11-05
B | wld | 2024-11-05
分区指南
定义自定义分区
使用 influxctl
CLI 在创建数据库或表时定义自定义分区策略。
使用分区模板
了解如何使用分区模板定义自定义分区策略。数据可以根据标签和时间进行分区。
分区最佳实践
了解将自定义分区策略应用于InfluxDB中存储数据的最佳实践。
查看分区信息
从InfluxDB v3系统表中查询分区信息,以查看分区模板并验证分区是否按预期工作。
SELECT * FROM system.partitions WHERE table_name = 'example-table'
这个页面有帮助吗?
感谢您的反馈!