我可以将Clickhouse用作键值存储吗?

Ste*_*nko 2 key-value-store clickhouse

是否可以将Clickhouse用作键值存储,数据是否经常被覆盖,却很少被读取?如果可能,我应该使用什么引擎?

Amo*_*mos 8

ClickHouse并非针对该用例而构建,它在其文档的首页中故意声明了这一点。

何时不使用ClickHouse

  1. 事务性工作负载(OLTP)
  2. 高请求率的键值访问
  3. Blob或文档存储
  4. 标准化数据

但是,如果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);
Run Code Online (Sandbox Code Playgroud)

然后,您可以将其用作字典(键值):

SELECT joinGet('my_fancy_kv_store', 'x', 'abc');
SELECT joinGet('my_fancy_kv_store', 'k', 'def');
Run Code Online (Sandbox Code Playgroud)