字典布局类型
| 布局 | 说明 |
|---|---|
| flat | 将数据存储在按键索引的扁平数组中。该布局速度最快,但键必须为 UInt64,且受 max_array_size 限制。 |
| hashed | 将数据存储在哈希表中。对键大小没有限制,支持任意数量的元素。 |
| sparse_hashed | 类似 hashed,但以更高的 CPU 开销换取更低的内存占用。 |
| complex_key_hashed | 类似 hashed,用于复合键。 |
| complex_key_sparse_hashed | 类似 sparse_hashed,用于复合键。 |
| hashed_array | 属性存储在数组中,并通过哈希表将键映射到数组索引。适用于属性较多且更节省内存的场景。 |
| complex_key_hashed_array | 类似 hashed_array,用于复合键。 |
| range_hashed | 带有有序范围的哈希表。支持按键 + 日期/时间范围进行查找。 |
| complex_key_range_hashed | 类似 range_hashed,用于复合键。 |
| cache | 固定大小的内存缓存。仅存储经常访问的键。 |
| complex_key_cache | 类似 cache,用于复合键。 |
| ssd_cache | 类似 cache,但将数据存储在 SSD 上,并在内存中保留索引。 |
| complex_key_ssd_cache | 类似 ssd_cache,用于复合键。 |
| direct | 不在内存中存储,而是针对每个请求直接查询 source。 |
| complex_key_direct | 类似 direct,用于复合键。 |
| ip_trie | 用于快速进行 IP 前缀查找 (基于 CIDR) 的 Trie 结构。 |
指定字典布局
LAYOUT 子句 (用于 DDL) ,或在配置文件定义中使用 layout 设置来配置字典布局。
- DDL
- 配置文件
另请参阅 CREATE DICTIONARY 以了解完整的 DDL 语法。 布局中不包含
complex-key* 的字典,其键类型为 UInt64;complex-key* 字典则使用复合键 (复杂键,可包含任意类型) 。
数值键示例 (列 key_column 的类型为 UInt64) :
- DDL
- 配置文件
复合键示例 (该键包含一个 String 类型的元素) :
- DDL
- 配置文件
提高字典性能
- 在
GROUP BY之后调用字典相关函数。 - 将要提取的属性标记为 injective。
如果不同的键对应不同的属性值,则该属性称为 injective。
因此,当
GROUP BY使用按键获取属性值的函数时,该函数会自动从GROUP BY中移出。
- 正在访问的字典无法加载。
- 查询
cached字典时出错。