文档文档

管理最后值缓存

InfluxDB 3 Core 最后值缓存 (LVC) 允许您缓存表中特定字段的最新值,从而提高返回特定系列字段的最新值或字段的最后 N 个值的查询性能。

LVC 是一个内存缓存,用于存储表中系列的特定字段的最后 N 个值。创建 LVC 时,您可以指定要缓存的字段、用于标识每个系列的标签以及要为每个唯一系列缓存的值的数量。LVC 与表相关联,一个表可以有多个 LVC。

考虑一个具有以下架构的数据集(类似于 家庭传感器示例数据集

  • home (表)
    • 标签 (tags)
      • room
        • kitchen
        • living room
      • wall
        • north
        • east
        • south
    • 字段 (fields)
      • co (整数)
      • temp (浮点数)
      • hum (浮点数)

如果您为每个房间和墙体缓存每个字段的最后一个值,LVC 将类似于此

roomwallcohumtemptime
厨房east2636.522.72022-01-01T20:00:00Z
客厅north1736.422.22022-01-01T20:00:00Z
客厅south1636.322.12022-01-01T20:00:00Z

如果您为每个房间和墙体缓存每个字段的最后四个值,LVC 将类似于以下内容

roomwallcohumtemptime
厨房east2636.522.72022-01-01T20:00:00Z
厨房east936.022.72022-01-01T17:00:00Z
厨房east336.222.72022-01-01T15:00:00Z
厨房east036.122.72022-01-01T10:00:00Z
客厅north1736.422.22022-01-01T20:00:00Z
客厅north535.922.62022-01-01T17:00:00Z
客厅north136.122.32022-01-01T15:00:00Z
客厅north036.021.82022-01-01T10:00:00Z
客厅south1636.322.12022-01-01T20:00:00Z
客厅south435.822.52022-01-01T17:00:00Z
客厅south036.022.32022-01-01T15:00:00Z
客厅south035.921.82022-01-01T10:00:00Z

Null 列值

Null 列值仍被视为值,并缓存在 LVC 中。如果您向表中写入数据而未为现有列提供值,则该列值将被缓存为 null

有关最后值缓存的重要注意事项

LVC 存储在内存中;缓存越大,InfluxDB 3 节点维护它所需的内存就越多。请考虑以下几点

缓存数据加载

创建缓存时,InfluxDB 3 Core 会将历史数据加载到缓存中。重启后,服务器会自动重新加载缓存数据。

高基数键列

“基数”是指您缓存数据中唯一键列组合的数量。虽然 InfluxDB 3 存储引擎不受基数限制,但它会影响 LVC。更高的基数会增加存储 LVC 的内存需求,并可能影响 LVC 查询性能。我们建议以下操作

  • 仅将对您的查询工作负载重要的标签用作 LVC 中的键列。缓存不必要的标签或字段作为键列会导致更高的基数,而没有任何好处。
  • 避免在 LVC 中包含高基数键列。
  • 不要在 LVC 中包含多个高基数键列。

要估算 LVC 中总键列基数,请使用以下公式

num_uniq_col_val_N [× num_uniq_col_val_N …] = key_column_cardinality

值计数

通过增加要在 LVC 中存储的值的数量,您可以增加缓存中存储的行数以及存储它们所需的内存量。在要存储的值的数量上要谨慎。此计数是每个唯一键列组合。如果您将两个标签作为键列,一个有三个唯一值,另一个有 10 个,您最多可能有 30 个唯一键列组合。如果您想保留最后 10 个值,您可能会在缓存中有 300 多行。

要了解缓存指定数量值所需的行数,请使用以下公式

key_column_cardinality × count = number_of_rows

服务器停止时会刷新最后值缓存

由于 LVC 是内存缓存,因此每次服务器停止时都会刷新缓存。服务器重启后,InfluxDB 3 Core 仅在您写入数据时向 LVC 写入新值,因此可能存在一段时间 LVC 中某些值不可用的情况。

定义值列

创建 LVC 时,如果包含 --value-columns 选项来指定要缓存为值列的字段,则将来添加的任何新字段都不会添加到缓存中。

但是,如果省略 --value-columns 选项,除指定为 --key-columns 的列外,所有其他列都将作为值列缓存,包括以后添加的列。


此页面是否有帮助?

感谢您的反馈!


InfluxDB 3.8 新特性

InfluxDB 3.8 和 InfluxDB 3 Explorer 1.6 的主要增强功能。

查看博客文章

InfluxDB 3.8 现已适用于 Core 和 Enterprise 版本,同时发布了 InfluxDB 3 Explorer UI 的 1.6 版本。本次发布着重于操作成熟度,以及如何更轻松地部署、管理和可靠地运行 InfluxDB。

更多信息,请查看

InfluxDB Docker 的 latest 标签将指向 InfluxDB 3 Core

在 **2026 年 2 月 3 日**,InfluxDB Docker 镜像的 latest 标签将指向 InfluxDB 3 Core。为避免意外升级,请在您的 Docker 部署中使用特定的版本标签。

如果使用 Docker 来安装和运行 InfluxDB,latest 标签将指向 InfluxDB 3 Core。为避免意外升级,请在您的 Docker 部署中使用特定的版本标签。例如,如果使用 Docker 运行 InfluxDB v2,请将 latest 版本标签替换为 Docker pull 命令中的特定版本标签 — 例如

docker pull influxdb:2