Documentation

管理数据分区

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

何时考虑自定义分区

如果考虑自定义分区:

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

在选择分区策略之前,权衡优点缺点限制自定义分区。

优点

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

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

缺点

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

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

  • Ingester的负载增加 因为它将数据分成更小的分区和文件。
  • 增加了对目录的负载 因为存储和查询了更多对分区Parquet文件位置的引用。
  • 增加了对压实机的负载,因为它需要压实更多的分区Parquet文件。
  • 对象存储相关的增加成本,随着更多分区的Parquet文件被创建和存储。
  • 增加的延迟。InfluxDB 处理查询并返回结果所需的时间与表的总分区数线性增加,尽管只是略微增加。
  • 在WHERE子句中未使用标签的查询性能下降的风险。 这些查询可能读取许多分区和较小的文件,这可能会降低性能。

限制

自定义分区有以下限制:

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

自定义分区计划

在考虑了优点缺点限制之后,使用本节中的指南来:

  1. 学习 分区是如何工作的
  2. 遵循 最佳实践 来定义分区和管理分区增长
  3. 为您的数据定义自定义分区
  4. 采取措施以限制分区文件的数量

分区是如何工作的

分区模板

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

有关更详细的信息,请参见 Partition templates

分区键

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

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

查看示例分区模板和密钥

查询生命周期中的分区

查询数据时:

  1. 目录 提供 v3 查询引擎 (查询器) 具有包含所查询时间序列数据的分区位置。
  2. 查询引擎读取返回的分区中的所有行,以识别哪些行符合查询中的逻辑并应包含在查询结果中。

查询引擎能够更快地识别要读取哪些分区并从这些分区读取数据,查询性能就越高。

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

查询示例

考虑以下查询,它选择production表中的所有内容,其中line标签为A,并且station标签为cnc

SELECT *
FROM production
WHERE
  time >= now() - INTERVAL '1 week'
  AND line = 'A'
  AND station = 'cnc'

使用默认的分区策略(按天),查询引擎读取八个独立的分区(一个是今天的分区,另外七个是过去七天的分区):

  • 2025-01-15
  • 2025-01-14
  • 2025-01-13
  • 2025年1月12日
  • 2025-01-11
  • 2025-01-10
  • 2025-01-09
  • 2025-01-08

查询引擎必须扫描 所有 分区中的行以识别 lineAstationcnc 的行。这一过程耗费了宝贵的时间,并导致查询性能下降。

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

例如,如果您按 linestation 和天进行数据分区,虽然文件数量会增加,但查询引擎可以迅速识别并读取仅与查询相关的数据:

  • A | cnc | 2025-01-15

  • A | wld | 2025-01-15

  • B | cnc | 2025-01-15

  • B | wld | 2025-01-15

  • A | 数控 | 2025-01-14

  • A | wld | 2025-01-14

  • B | cnc | 2025-01-14

  • B | wld | 2025-01-14

  • A | cnc | 2025-01-13

  • A | wld | 2025-01-13

  • B | cnc | 2025-01-13

  • B | wld | 2025-01-13

  • A | cnc | 2025-01-12

  • A | wld | 2025-01-12

  • B | cnc | 2025年1月12日

  • B | wld | 2025-01-12

  • A | cnc | 2025-01-11

  • A | wld | 2025-01-11

  • B | cnc | 2025-01-11

  • B | wld | 2025-01-11

  • A | 数控 | 2025-01-10

  • A | wld | 2025-01-10

  • B | cnc | 2025-01-10

  • B | wld | 2025-01-10

  • A | cnc | 2025-01-09

  • A | wld | 2025-01-09

  • B | cnc | 2025-01-09

  • B | wld | 2025-01-09

  • A | cnc | 2025-01-08

  • A | wld | 2025-01-08

  • B | cnc | 2025-01-08

  • B | wld | 2025-01-08


分区指南



Flux的未来

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

阅读更多

InfluxDB 3 开源版本现已公开Alpha测试

InfluxDB 3 Open Source is now available for alpha testing, licensed under MIT or Apache 2 licensing.

我们将发布两个产品作为测试版的一部分。

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

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