管理数据分区
当将数据写入 InfluxDB Clustered 时,InfluxDB 3 存储引擎以 Apache Parquet 格式将数据存储在 对象存储中。每个 Parquet 文件代表一个分区——数据的逻辑分组。默认情况下,InfluxDB 按天对每个表进行分区。如果此默认策略为单系列查询产生不满意的性能,您可以指定标签值和不同的时间间隔来定义自定义分区策略,以优化特定模式和工作负载的查询性能。
优势
自定义分区的主要优势在于,它允许您自定义存储结构,以提高特定于您的模式和工作负载的查询性能。
- 优化存储以提高特定类型查询的性能。 例如,如果查询经常选择具有特定标签值的数据,则可以按该标签进行分区以提高这些查询的性能。
- 针对特定类型的数据优化存储。 例如,如果您存储的数据是稀疏的,并且您查询的时间范围通常远大于一天,则可以按月而不是按天对数据进行分区。
劣势
使用自定义分区可能会增加 InfluxDB 3 存储引擎其他部分的负载,但您可以单独扩展每个部分以解决增加的负载。
这些劣势的权重取决于标签的基数和用于分区的时间间隔的特异性。
- Ingester 上的负载增加,因为它将数据分组到更小的分区和文件中。
- Catalog 上的负载增加,因为存储和查询了更多对分区 Parquet 文件位置的引用。
- Compactor 上的负载增加,因为它需要压缩更多的分区 Parquet 文件。
- 与 对象存储 相关的成本增加,因为创建和存储了更多的分区 Parquet 文件。
- 延迟增加。 InfluxDB 处理查询并返回结果的时间量与表的总分区计数呈线性关系增加,尽管略有增加。
- 对于 WHERE 子句中未使用标签的查询,存在性能下降的风险。 这些查询可能会读取许多分区和较小的文件,这可能会降低性能。
局限性
自定义分区具有以下局限性:
- 仅在创建期间定义数据库和表分区;之后您无法更新分区策略。
- 在分区模板中包含时间部分。
- 您可以按最多八个维度(七个标签和一个时间间隔)进行分区。
自定义分区规划
在您考虑了自定义分区的优势、劣势和局限性之后,请使用本节中的指南来:
分区工作原理
分区模板
分区模板定义了用于分区键的模式,并确定了 InfluxDB 对数据进行分区的时间间隔。分区模板使用标签值和 Rust strftime 日期和时间格式语法。
有关更多详细信息,请参阅分区模板。
分区键
分区键唯一标识一个分区。分区模板定义了分区键格式。分区键最多由 8 个维度组成(1 个时间部分和最多 7 个标签或标签桶部分)。分区键使用分区键分隔符 (|
) 来分隔各个部分。
分区键的默认格式为 %Y-%m-%d
(例如,2024-01-01
),这将为每一天创建一个分区。
查询生命周期中的分区
查询数据时
查询引擎可以更快地识别要读取的分区,然后读取这些分区中的数据,查询性能就越高。
有关查询生命周期的更多信息,请参阅 InfluxDB 3 查询生命周期。
查询示例
考虑以下查询,该查询选择 production
表中 line
标签为 A
且 station
标签为 cnc
的所有内容
SELECT *
FROM production
WHERE
time >= now() - INTERVAL '1 week'
AND line = 'A'
AND station = 'cnc'
使用默认分区策略(按天),查询引擎读取八个单独的分区(今天一个分区,过去七天每天一个分区)
- 2025-02-15
- 2025-02-14
- 2025-02-13
- 2025-02-12
- 2025-02-11
- 2025-02-10
- 2025-02-09
- 2025-02-08
查询引擎必须扫描分区中的所有行,以识别 line
为 A
且 station
为 cnc
的行。此过程会占用宝贵的时间,并导致查询性能降低。
但是,在分区策略中包含标签允许查询引擎识别仅包含所需标签值的分区。 这避免了扫描标签值的行。
例如,如果您按 line
、station
和天对数据进行分区,尽管文件数量会增加,但查询引擎可以快速识别并仅读取那些与查询相关的数据
A | cnc | 2025-02-15
A | wld | 2025-02-15
B | cnc | 2025-02-15
B | wld | 2025-02-15
A | cnc | 2025-02-14
A | wld | 2025-02-14
B | cnc | 2025-02-14
B | wld | 2025-02-14
A | cnc | 2025-02-13
A | wld | 2025-02-13
B | cnc | 2025-02-13
B | wld | 2025-02-13
A | cnc | 2025-02-12
A | wld | 2025-02-12
B | cnc | 2025-02-12
B | wld | 2025-02-12
A | cnc | 2025-02-11
A | wld | 2025-02-11
B | cnc | 2025-02-11
B | wld | 2025-02-11
A | cnc | 2025-02-10
A | wld | 2025-02-10
B | cnc | 2025-02-10
B | wld | 2025-02-10
A | cnc | 2025-02-09
A | wld | 2025-02-09
B | cnc | 2025-02-09
B | wld | 2025-02-09
A | cnc | 2025-02-08
A | wld | 2025-02-08
B | cnc | 2025-02-08
B | wld | 2025-02-08
分区指南
定义自定义分区
使用 influxctl
CLI 在创建数据库或表时定义自定义分区策略。
使用分区模板
了解如何使用分区模板定义自定义分区策略。数据可以按标签和时间进行分区。
分区最佳实践
了解将自定义分区策略应用于存储在 InfluxDB 中的数据的最佳实践。
查看分区信息
从 InfluxDB 3 系统表查询分区信息,以查看分区模板并验证分区是否按预期工作。
SELECT * FROM system.partitions WHERE table_name = 'example-table'
此页内容对您有帮助吗?
感谢您的反馈!
支持和反馈
感谢您成为我们社区的一份子!我们欢迎并鼓励您提供关于 InfluxDB Clustered 和本文档的反馈和错误报告。要获得支持,请使用以下资源:
拥有年度合同或支持合同的客户可以联系 InfluxData 支持。