管理不同值缓存
InfluxDB 3 Core Distinct Value Cache (DVC) 允许您缓存表中一个或多个列的Distinct值,从而提高返回Distinct标签和字段值的查询性能。
DVC 是一个内存缓存,用于存储表中特定列的Distinct值。创建DVC时,您可以指定要缓存的列的Distinct值、要缓存的Distinct值组合的最大数量以及缓存值的最大年龄。DVC与表相关联,一个表可以有多个DVC。
考虑一个具有以下模式的数据集
- wind_data (表)
- 标签 (tags)
- country
- 多个欧洲国家
- county
- 多个欧洲郡
- city
- 多个欧洲城市
- country
- 字段 (fields)
- wind_speed (float)
- wind_direction (integer)
- 标签 (tags)
如果您缓存 country、county 和 city 的Distinct值,DVC 将类似于以下内容
| country | county | city |
|---|---|---|
| 奥地利 | 萨尔茨堡 | 萨尔茨堡 |
| 奥地利 | 维也纳 | 维也纳 |
| 比利时 | 安特卫普 | 安特卫普 |
| 比利时 | 西弗兰德省 | 布鲁日 |
| 捷克共和国 | 利贝雷茨州 | 利贝雷茨 |
| 捷克共和国 | 布拉格 | 布拉格 |
| 丹麦 | 首都地区 | 哥本哈根 |
| 丹麦 | 南丹麦大区 | 欧登塞 |
| 爱沙尼亚 | 伊达-维鲁县 | 科赫特拉-耶尔韦 |
| 爱沙尼亚 | 伊达-维鲁县 | 纳尔瓦 |
| ... | ... | ... |
DVC结果中的重复值
查询DVC时,Distinct值可能在一列中出现多次,但这仅当它们与其他列中的Distinct值相关联时。如果您查询DVC中的单列,结果中不会出现重复值。
Null列值
Null 列值仍被视为值,并被缓存到DVC中。如果您将数据写入表而未为现有列提供值,则该列值将被缓存为null,并被视为Distinct值。
创建唯一值缓存
使用 influxdb3 create distinct_cache 命令 创建 Distinct Value Cache。
influxdb3 create distinct_cache \
--database example-db \
--token 00xoXX0xXXx0000XxxxXx0Xx0xx0 \
--table wind_data \
--columns country,county,city \
--max-cardinality 10000 \
--max-age 24h \
windDistinctCache查询唯一值缓存
在 SQL SELECT 语句的 FROM 子句中使用 distinct_cache() SQL 函数 从 Distinct Value Cache 查询数据。
SELECT * FROM distinct_cache('table-name', 'cache-name')您必须使用 SQL 查询 DVC。InfluxQL 不支持 distinct_cache() 函数。
显示关于Distinct Value Cache的信息
使用 influxdb3 show system table 命令从 distinct_caches 系统表中查询和输出 Distinct Value Cache 信息。
influxdb3 show system \
--database example-db \
--token 00xoXX0xXXx0000XxxxXx0Xx0xx0 \
table distinct_caches删除唯一值缓存
使用 influxdb3 delete distinct_cache 命令 删除 Distinct Value Cache。
influxdb3 delete distinct_cache \
--database example-db \
--token 00xoXX0xXXx0000XxxxXx0Xx0xx0 \
--table wind_data \
windDistinctCache关于Distinct Value Cache的重要事项
DVC 存储在内存中;缓存越大,InfluxDB 3 节点维护它所需的内存就越多。请考虑以下几点
缓存数据加载
创建缓存时,InfluxDB 3 Core 会将历史数据加载到缓存中。重启后,服务器会自动重新加载缓存数据。
高基数限制
“基数”是指缓存数据中唯一键列组合的数量,它基本上定义了DVC要存储的最大行数。虽然InfluxDB 3存储引擎不受基数限制,但它确实会影响DVC。您可以为DVC定义自定义的最大基数限制,但更高的基数会增加存储DVC的内存需求,并可能影响DVC的查询性能。
服务器停止时Distinct Value Cache会被刷新
由于DVC是内存缓存,因此服务器停止时缓存会被刷新。服务器重启后,InfluxDB 3 Core只在您写入数据时将新值写入DVC,因此可能存在一段时间内DVC中某些值不可用的情况。
此页面是否有帮助?
感谢您的反馈!
支持和反馈
感谢您成为我们社区的一员!我们欢迎并鼓励您对 InfluxDB 3 Core 和本文档提供反馈和错误报告。要获得支持,请使用以下资源
具有年度合同或支持合同的客户可以 联系 InfluxData 支持。