文档文档

管理数据分区

当将数据写入 InfluxDB Clustered 时,InfluxDB 3 存储引擎以 Apache Parquet 格式将数据存储在 对象存储中。每个 Parquet 文件代表一个分区——数据的逻辑分组。默认情况下,InfluxDB 按天对每个表进行分区。如果此默认策略为单系列查询产生不满意的性能,您可以指定标签值和不同的时间间隔来定义自定义分区策略,以优化特定模式和工作负载的查询性能。

何时考虑自定义分区

在以下情况下考虑自定义分区:

  1. 您已采取措施优化您的查询,并且
  2. 单系列查询(查询特定的 标签值标签集)的性能仍然不尽人意。

在选择分区策略之前,请权衡自定义分区的优势劣势局限性

优势

自定义分区的主要优势在于,它允许您自定义存储结构,以提高特定于您的模式和工作负载的查询性能。

  • 优化存储以提高特定类型查询的性能。 例如,如果查询经常选择具有特定标签值的数据,则可以按该标签进行分区以提高这些查询的性能。
  • 针对特定类型的数据优化存储。 例如,如果您存储的数据是稀疏的,并且您查询的时间范围通常远大于一天,则可以按月而不是按天对数据进行分区。

劣势

使用自定义分区可能会增加 InfluxDB 3 存储引擎其他部分的负载,但您可以单独扩展每个部分以解决增加的负载。

这些劣势的权重取决于标签的基数和用于分区的时间间隔的特异性。

  • Ingester 上的负载增加,因为它将数据分组到更小的分区和文件中。
  • Catalog 上的负载增加,因为存储和查询了更多对分区 Parquet 文件位置的引用。
  • Compactor 上的负载增加,因为它需要压缩更多的分区 Parquet 文件。
  • 对象存储 相关的成本增加,因为创建和存储了更多的分区 Parquet 文件。
  • 延迟增加。 InfluxDB 处理查询并返回结果的时间量与表的总分区计数呈线性关系增加,尽管略有增加。
  • 对于 WHERE 子句中未使用标签的查询,存在性能下降的风险。 这些查询可能会读取许多分区和较小的文件,这可能会降低性能。

局限性

自定义分区具有以下局限性:

  • 仅在创建期间定义数据库和表分区;之后您无法更新分区策略。
  • 在分区模板中包含时间部分。
  • 您可以按最多八个维度(七个标签和一个时间间隔)进行分区。

自定义分区规划

在您考虑了自定义分区的优势劣势局限性之后,请使用本节中的指南来:

  1. 了解分区的工作原理
  2. 遵循最佳实践,以定义分区和管理分区增长
  3. 定义自定义分区用于您的数据
  4. 采取措施限制分区文件数量

分区工作原理

分区模板

分区模板定义了用于分区键的模式,并确定了 InfluxDB 对数据进行分区的时间间隔。分区模板使用标签值和 Rust strftime 日期和时间格式语法

有关更多详细信息,请参阅分区模板

分区键

分区键唯一标识一个分区。分区模板定义了分区键格式。分区键最多由 8 个维度组成(1 个时间部分和最多 7 个标签或标签桶部分)。分区键使用分区键分隔符 (|) 来分隔各个部分。

分区键的默认格式为 %Y-%m-%d(例如,2024-01-01),这将为每一天创建一个分区。

查看示例分区模板和键

查询生命周期中的分区

查询数据时

  1. Catalog 为 v3 查询引擎(Querier)提供包含所查询时间序列数据的分区位置。
  2. 查询引擎读取返回的分区中的所有行,以识别哪些行与查询中的逻辑匹配,并应包含在查询结果中。

查询引擎可以更快地识别要读取的分区,然后读取这些分区中的数据,查询性能就越高。

有关查询生命周期的更多信息,请参阅 InfluxDB 3 查询生命周期

查询示例

考虑以下查询,该查询选择 production 表中 line 标签为 Astation 标签为 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

查询引擎必须扫描分区中的所有行,以识别 lineAstationcnc 的行。此过程会占用宝贵的时间,并导致查询性能降低。

但是,在分区策略中包含标签允许查询引擎识别仅包含所需标签值的分区。 这避免了扫描标签值的行。

例如,如果您按 linestation 和天对数据进行分区,尽管文件数量会增加,但查询引擎可以快速识别并仅读取那些与查询相关的数据

  • 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


分区指南


此页内容对您有帮助吗?

感谢您的反馈!


Flux 的未来

Flux 即将进入维护模式。您可以继续像现在一样使用它,而无需对代码进行任何更改。

阅读更多

InfluxDB 3 开源版本现已推出公开 Alpha 版

InfluxDB 3 开源版本现已可用于 Alpha 测试,根据 MIT 或 Apache 2 许可获得许可。

我们正在发布两个产品作为 Alpha 版的一部分。

InfluxDB 3 Core 是我们的新开源产品。它是一个用于时间序列和事件数据的最新数据引擎。InfluxDB 3 Enterprise 是一个商业版本,它建立在 Core 的基础上,增加了历史查询功能、读取副本、高可用性、可扩展性和细粒度安全性。

有关如何开始使用的更多信息,请查看