管理 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 看起来类似于这样
Null 列值
Null 列值仍然被视为值并缓存在 LVC 中。如果您将数据写入表并且没有为现有列提供值,则列值将缓存为 null。
创建 Last Value Cache
使用 influxdb3 create last_cache
命令 创建 Last Value Cache。
influxdb3 create last_cache \
--database example-db \
--token 00xoXX0xXXx0000XxxxXx0Xx0xx0 \
--table home \
--key-columns room,wall \
--value-columns temp,hum,co \
--count 5 \
--ttl 30mins \
homeLastCache
查询 Last Value Cache
使用 last_cache()
SQL 函数 在 SQL SELECT
语句的 FROM
子句中从 Last Value Cache 查询数据。
SELECT * FROM last_cache('table-name', 'cache-name')
您必须使用 SQL 查询 LVC。InfluxQL 不支持 last_cache()
函数。
显示关于 Last Value Cache 的信息
使用 influxdb3 show system table
命令从 last_caches
系统表查询和输出 Last Value Cache 信息。
influxdb3 show system \
--database example-db \
--token 00xoXX0xXXx0000XxxxXx0Xx0xx0 \
table last_caches
删除 Last Value Cache
使用 influxdb3 delete last_cache
命令 删除 Last Value Cache。
influxdb3 delete last_cache \
--database example-db \
--token 00xoXX0xXXx0000XxxxXx0Xx0xx0 \
--table home \
homeLastCache
关于 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
的列之外的所有列都将缓存为值列,包括稍后添加的列。
此页是否对您有帮助?
感谢您的反馈!
支持和反馈
感谢您成为我们社区的一份子!我们欢迎并鼓励您对 InfluxDB 3 Core 和本文档提出反馈和错误报告。要寻求支持,请使用以下资源
拥有年度或支持合同的客户 可以 联系 InfluxData 支持。