是否可以使用clickhouse作为键值存储,数据是否经常被覆盖,但很少被读取?如果可能,我应该使用什么引擎?
ClickHouse不是为该用例而构建的,它故意在其文档的主页中说明。
何时不使用ClickHouse
- 事务性工作负载(OLTP)
- 具有高请求率的键值访问
- Blob或文档存储
- 过度标准化的数据
但是,如果QPS较低,您仍然可以获得点查询的良好延迟分数。 ClickHouse还提供了多种字典,可以更好地用作外部键值存储。还有一个StorageJoin
引擎支持joinGet
功能类似于redis'HGET
操作。在此PR之后,您可以覆盖StorageJoin
中的现有密钥。
PR合并。这是一个孤立的例子。
首先填充StorageJoin表,如下所示:
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);
然后你可以将它用作字典(键值):
SELECT joinGet('my_fancy_kv_store', 'x', 'abc');
SELECT joinGet('my_fancy_kv_store', 'k', 'def');