如果数据被定期覆盖,但很少被读取,是否可以使用clickhouse作为键值存储?如果可能的话,我应该用什么发动机?
piah890a1#
clickhouse并不是为这个用例而构建的,它在文档的主页上故意这么说。何时不使用clickhouse事务性工作负载(oltp)高请求率的键值访问blob或文档存储过度规范化数据但是,如果qps较低,仍然可以为点查询获得良好的延迟分数。clickhouse还提供多种字典,可以更好地用作外部键值存储。还有一个 StorageJoin 支持的发动机 joinGet 功能类似redis HGET 操作。在此pr之后,您可以覆盖中的现有密钥 StorageJoin .
StorageJoin
joinGet
HGET
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');
1条答案
按热度按时间piah890a1#
clickhouse并不是为这个用例而构建的,它在文档的主页上故意这么说。
何时不使用clickhouse
事务性工作负载(oltp)
高请求率的键值访问
blob或文档存储
过度规范化数据
但是,如果qps较低,仍然可以为点查询获得良好的延迟分数。clickhouse还提供多种字典,可以更好地用作外部键值存储。还有一个
StorageJoin
支持的发动机joinGet
功能类似redisHGET
操作。在此pr之后,您可以覆盖中的现有密钥StorageJoin
.更新
pr合并。这是一个单独的例子。
首先填充storagejoin表,如下所示:
然后可以将其用作字典(键值):