管理最后值缓存
InfluxDB 3 Core 最后值缓存 (LVC) 允许您缓存表中特定字段的最新值,从而提高返回特定系列字段的最新值或字段的最后 N 个值的查询性能。
LVC 是一个内存缓存,用于存储表中系列的特定字段的最后 N 个值。创建 LVC 时,您可以指定要缓存的字段、用于标识每个系列的标签以及要为每个唯一系列缓存的值的数量。LVC 与表相关联,一个表可以有多个 LVC。
考虑一个具有以下架构的数据集(类似于 家庭传感器示例数据集)
- home (表)
- 标签 (tags)
- room
- kitchen
- living room
- wall
- north
- east
- south
- room
- 字段 (fields)
- co (整数)
- temp (浮点数)
- hum (浮点数)
- 标签 (tags)
如果您为每个房间和墙体缓存每个字段的最后一个值,LVC 将类似于此
Null 列值
Null 列值仍被视为值,并缓存在 LVC 中。如果您向表中写入数据而未为现有列提供值,则该列值将被缓存为 null。
创建最后值缓存
使用 influxdb3 create last_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查询最后值缓存
在 SQL SELECT 语句的 FROM 子句中使用 last_cache() SQL 函数 从最后值缓存查询数据。
SELECT * FROM last_cache('table-name', 'cache-name')您必须使用 SQL 查询 LVC。InfluxQL 不支持 last_cache() 函数。
显示有关最后值缓存的信息
使用 influxdb3 show system table 命令从 last_caches 系统表查询并输出最后值缓存信息。
influxdb3 show system \
--database example-db \
--token 00xoXX0xXXx0000XxxxXx0Xx0xx0 \
table last_caches删除最后值缓存
使用 influxdb3 delete last_cache 命令 删除最后值缓存。
influxdb3 delete last_cache \
--database example-db \
--token 00xoXX0xXXx0000XxxxXx0Xx0xx0 \
--table home \
homeLastCache有关最后值缓存的重要注意事项
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 Core 和本文档提供反馈和错误报告。要获得支持,请使用以下资源
具有年度合同或支持合同的客户可以 联系 InfluxData 支持。