文档文档

管理 Last Value Cache

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

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

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

  • home(表)
    • 标签
      • 房间
        • 厨房
        • 客厅
    • 字段
      • co (integer)
      • temp (float)
      • hum (float)

如果您缓存每个房间和墙壁的每个字段的最后一个值,则 LVC 看起来类似于这样

房间cohumtemp时间
厨房2636.522.72022-01-01T20:00:00Z
客厅1736.422.22022-01-01T20:00:00Z
客厅1636.322.12022-01-01T20:00:00Z

如果您缓存每个房间和墙壁的每个字段的最后四个值,则 LVC 看起来类似于以下内容

房间cohumtemp时间
厨房2636.522.72022-01-01T20:00:00Z
厨房936.022.72022-01-01T17:00:00Z
厨房336.222.72022-01-01T15:00:00Z
厨房036.122.72022-01-01T10:00:00Z
客厅1736.422.22022-01-01T20:00:00Z
客厅535.922.62022-01-01T17:00:00Z
客厅136.122.32022-01-01T15:00:00Z
客厅036.021.82022-01-01T10:00:00Z
客厅1636.322.12022-01-01T20:00:00Z
客厅435.822.52022-01-01T17:00:00Z
客厅036.022.32022-01-01T15:00:00Z
客厅035.921.82022-01-01T10:00:00Z

Null 列值

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

关于 Last Value Cache 的重要须知

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

高基数列

“基数”指的是您的缓存数据中唯一键列组合的数量。虽然 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

当服务器停止时,Last Value Cache 将被刷新

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

定义值列

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

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


此页是否对您有帮助?

感谢您的反馈!


Flux 的未来

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

阅读更多

现已全面上市

InfluxDB 3 Core 和 Enterprise

快速启动。更快扩展。

获取更新

InfluxDB 3 Core 是一个开源、高速、近实时数据引擎,可实时收集和处理数据,并将其持久化到本地磁盘或对象存储。InfluxDB 3 Enterprise 构建在 Core 的基础上,增加了高可用性、读取副本、增强的安全性以及数据压缩,以实现更快的查询和优化的存储。InfluxDB 3 Enterprise 的免费层可供非商业家庭或业余爱好者使用。

有关更多信息,请查看