EmbeddedRocksDB 表引擎
Not supported in ClickHouse Cloud
该引擎用于将 ClickHouse 与 RocksDB 集成。
创建数据表
引擎参数:
ttl- 值的生存时间(time to live),单位为秒。如果 TTL 为 0,则使用常规 RocksDB 实例(无 TTL)。rocksdb_dir- 已存在的 RocksDB 目录路径,或新建 RocksDB 的目标路径。使用指定的rocksdb_dir打开表。read_only- 当read_only设为 true 时,使用只读模式。对于带 TTL 的存储,不会触发压实(无论手动还是自动),因此不会删除过期条目。primary_key_name– 列表中的任意列名。- 必须指定
primary key,且主键只支持单列。主键将以二进制形式序列化为rocksdb key。 - 除主键外的其他列将按对应顺序,以二进制形式序列化为
rocksdbvalue。 - 对键使用
equals或in过滤条件的查询,将被优化为从rocksdb进行多键查找。
引擎设置:
optimize_for_bulk_insert– 使表针对批量插入进行优化(插入流水线会创建 SST 文件并导入到 RocksDB 数据库,而不是写入 memtables);默认值:1。bulk_insert_block_size- 批量插入时创建的 SST 文件的最小大小(按行数计);默认值:1048449。
示例:
指标
还有一个 system.rocksdb 表,用于公开 RocksDB 的统计信息:
配置
你也可以通过配置更改任何 RocksDB 选项:
默认情况下,“trivial approximate count” 优化是关闭的,这可能会影响 count() 查询的性能。要启用此优化,请将 optimize_trivial_approximate_count_query 设置为 1。此外,该设置还会影响 EmbeddedRocksDB 引擎的 system.tables,启用后可以看到 total_rows 和 total_bytes 的近似值。
支持的操作
插入
当向 EmbeddedRocksDB 插入新行时,如果键已存在,则会更新对应的值;否则会创建一个新的键。
示例:
删除
可以使用 DELETE 查询或 TRUNCATE 语句删除行。
更新
可以使用 ALTER TABLE 语句来更新值。主键不允许更新。
联接
在 EmbeddedRocksDB 表上支持一种特殊的 direct 联接。
这种 direct 联接避免在内存中构建哈希表,而是直接从 EmbeddedRocksDB 访问数据。
在进行大规模联接时,由于不会创建哈希表,使用 direct 联接可以显著降低内存占用。
要启用 direct 联接:
提示
当 join_algorithm 设置为 direct, hash 时,将在可行时优先使用 direct 联接,否则使用 hash 联接。