我可以使用 clickhouse 作为键值存储吗?
Can I use clickhouse as key-value storage?
是否可以使用clickhouse作为键值存储,数据是否经常被覆盖,但很少被读取?如果可能,我应该使用什么引擎?
ClickHouse 不是为该用例构建的,它故意在其文档的主页中这样说。
When NOT to use ClickHouse
- Transactional workloads (OLTP)
- Key-value access with high request rate
- Blob or document storage
- Over-normalized data
不过,如果QPS低,点查询的延迟分数还是可以的。 ClickHouse还提供了多种Dictionaries,可以更好的作为外部key-value存储。还有一个StorageJoin
引擎,支持类似于redis的HGET
操作的joinGet
功能。在此之后 PR 您可以覆盖 StorageJoin
.
中的现有密钥
更新
PR 合并。这是一个孤立的例子。
首先填充 StorageJoin table 如下:
CREATE TABLE my_fancy_kv_store (s String, x Array(UInt8), k UInt64)
ENGINE = Join(ANY, LEFT, s);
INSERT INTO my_fancy_kv_store VALUES ('abc', [0], 1), ('def', [1, 2], 2);
然后你可以把它当作一个字典(key-value)来使用:
SELECT joinGet('my_fancy_kv_store', 'x', 'abc');
SELECT joinGet('my_fancy_kv_store', 'k', 'def');
EmbeddedRocksDB table 引擎是最近添加的,可以提供帮助。
可在此处找到更多信息:https://kb.altinity.com/engines/altinity-kb-embeddedrocksdb-and-dictionary
在我的测试中,与 MergeTree
相比,我发现 EmbeddedRocksDB
处理的 QPS 提高了 10-20 倍,响应速度提高了 10-100 倍。
它可能因用例而异,但它足以让我不必费心寻找单独的 Redis / RocksDB / DynamoDB
安装(因为在 CH 中拥有 KV 存储有助于跨 MT 和 EmbeddedRocksDB 加入,而我不确实需要扩展到 redis / DDB 的限制)
是否可以使用clickhouse作为键值存储,数据是否经常被覆盖,但很少被读取?如果可能,我应该使用什么引擎?
ClickHouse 不是为该用例构建的,它故意在其文档的主页中这样说。
When NOT to use ClickHouse
- Transactional workloads (OLTP)
- Key-value access with high request rate
- Blob or document storage
- Over-normalized data
不过,如果QPS低,点查询的延迟分数还是可以的。 ClickHouse还提供了多种Dictionaries,可以更好的作为外部key-value存储。还有一个StorageJoin
引擎,支持类似于redis的HGET
操作的joinGet
功能。在此之后 PR 您可以覆盖 StorageJoin
.
更新
PR 合并。这是一个孤立的例子。
首先填充 StorageJoin table 如下:
CREATE TABLE my_fancy_kv_store (s String, x Array(UInt8), k UInt64)
ENGINE = Join(ANY, LEFT, s);
INSERT INTO my_fancy_kv_store VALUES ('abc', [0], 1), ('def', [1, 2], 2);
然后你可以把它当作一个字典(key-value)来使用:
SELECT joinGet('my_fancy_kv_store', 'x', 'abc');
SELECT joinGet('my_fancy_kv_store', 'k', 'def');
EmbeddedRocksDB table 引擎是最近添加的,可以提供帮助。
可在此处找到更多信息:https://kb.altinity.com/engines/altinity-kb-embeddedrocksdb-and-dictionary
在我的测试中,与 MergeTree
相比,我发现 EmbeddedRocksDB
处理的 QPS 提高了 10-20 倍,响应速度提高了 10-100 倍。
它可能因用例而异,但它足以让我不必费心寻找单独的 Redis / RocksDB / DynamoDB
安装(因为在 CH 中拥有 KV 存储有助于跨 MT 和 EmbeddedRocksDB 加入,而我不确实需要扩展到 redis / DDB 的限制)