宣布 InfluxDB 3 Enterprise 免费供家庭使用,并更新 InfluxDB 3 Core 的 72 小时限制

导航至

InfluxDB 3 Core(我们新的开源产品)和 InfluxDB 3 Enterprise(我们最新的商业产品)的 Alpha 版本发布两周后,我们收到了大量反馈,认为 Core 中的 72 小时限制过于严格。这可以分为三类

  1. 家庭用户使用 InfluxDB 进行家庭传感器和系统指标,通常会查看数周、数月甚至一年的数据
  2. 期望能够写入任何时间范围内的数据并查询他们写入数据库的任何数据的开源用户
  3. 期望 InfluxDB 3 Core 能够像 InfluxDB 1 和 2 开源版本一样查询大量历史数据范围的开源用户

对于第 1 类用户,我们宣布 InfluxDB 3 Enterprise 免费层级,供家庭非商业用途使用。它将在某种程度上受到速率限制,但我们的目的是为这些家庭用户提供一个免费选项,其中包含 Enterprise 的所有功能。如果您是对此感兴趣的家庭用户,请在我们的社区 Discord 上联系我们,并告诉我们更多关于哪些类型的速率限制适用于您的用例。

对于第 2 类用户,我们取消了关于可以写入 InfluxDB 3 Core 的时间戳数据的限制(您可以写入任何历史时期的数据),并且我们取消了关于可以查询的时间段的限制。但是,由于特定的实现细节,单个查询可以覆盖的时间范围的限制仍然存在(以小时为单位),我将在本文中对此进行更多介绍。InfluxDB 3 Core 针对查询短时间范围(即小时,而不是天)进行了优化。

对于第 3 类用户,我们理解 InfluxDB 3 Core 并未涵盖 InfluxDB 1 和 2 的所有功能——它旨在在时间序列工具包中扮演独特的角色,提供高性能的最新数据引擎。对于那些使用版本 1 和 2 并对其感到满意的用户,没有理由迁移。对于需要查询更长时间范围数据的用户,这是我们在 InfluxDB 3 产品线中销售的功能之一。

要了解为什么此限制存在于 Core 中,但不存在于 Enterprise(我们的商业产品)中,本文的其余部分将深入探讨技术细节。

InfluxDB 3 Core 和 Enterprise 在写入时根据数据的时间戳将数据组织成 10 分钟的时间块。如果您发出一个包含数千行 Line Protocol 的写入请求,这些行的时间戳针对相同的测量,但范围超过一个小时,则这将分为六个块,分别对应于该小时内的每个时间块(:00、:10、:20、:30 等)。这些数据保存在内存中以进行快速查询访问,并且还写入 WAL 以实现持久性(此 WAL 可以完全存在于对象存储中以实现无盘操作)。

WAL 会定期进行快照以减小其大小。默认情况下,这种情况每 10 分钟发生一次,此时内存中的缓冲区将写入 Parquet 文件(每个测量(即表)一个文件,每个 10 分钟的时间块一个文件)。Parquet 数据也放入内存缓存中,以便针对最近持久化数据的查询无需访问对象存储。一旦数据进入 Parquet 缓存,可查询的 WAL 缓冲区将被清除。

当查询进入服务器时,将检查查询的时间范围,以确定哪些 Parquet 文件必须包含在查询计划和随后的执行过程中。WAL 缓冲区中的数据始终包含在查询计划中。跨多个文件进行查询将开始降低性能并占用更多 RAM,因为 DataFusion 需要从每个 Parquet 文件中读取元数据和行组。

根据我们的测试,查询中包含的文件越多,RAM 使用率越高,查询速度越慢。如果文件不在缓存中,并且服务器必须访问对象存储才能获取元数据和数据,则影响会更加明显。在 Core 中执行大时间范围的查询可能会导致向对象存储发出数千个 GET 请求,并且在许多情况下会导致数据库 OOM 终止,或者 DataFusion 会因为已分配的内存预算已用完而停止执行。

由于这些性能特性,我们设置了一个配置选项,将查询计划限制为 432 个 Parquet 文件,考虑到 10 分钟的时间块,这是一个 72 小时的时间范围。这是一个可以在启动服务器时设置的选项。我们将其视为一种服务保护机制。远高于该值的值可能不会产生良好的用户体验。即使跨越如此多文件进行查询,如果您追求非常快的查询响应时间,也不会是理想的选择。

InfluxDB 3 Enterprise 通过包含一个压缩器来解除此限制,该压缩器将这些 10 分钟的文件重写为更大的时间块。它不仅重写这些文件,还按序列对数据进行排序,并写出一个单独的索引,使查询引擎知道哪些文件包含哪些数据。这使得 InfluxDB 3 Enterprise 能够跨越更长的时间范围查询数据。它还使 Enterprise 能够在任何跨越超过一小时的时间范围内提供更快的查询响应时间。

我们认为 InfluxDB 3 Core 为实时、最近的时间序列数据提供了一组引人注目的功能。借助嵌入式 Python 处理引擎和 API,Core 非常适合充当具有存储和转发功能的数据收集器,并能够实时查询摄取的数据。它还可以进行 ETL、监控和警报,以及将数据传输到对象存储和其他第三方服务。所有这些都是除了充当最近数据的无盘时间序列数据库之外的功能。

InfluxDB 3 Enterprise 代表了完整的历史时间序列数据库以及 Core 启用的所有功能。它是我们销售的产品之一。构建可持续发展的业务使我们能够继续构建 InfluxDB 3 Core 作为获得许可的开源项目。它还使我们能够通过我们在 Apache DataFusion、Arrow、Parquet 和 Rust 对象存储 crate 中的工作,继续为查询引擎的最新技术做出贡献并推动其发展。

如果 InfluxDB 3 Core 听起来符合您正在进行的项目的需求,我们希望您能试用一下。