【问题标题】:Can I use clickhouse as key-value storage?我可以使用 clickhouse 作为键值存储吗?
【发布时间】:2019-05-27 04:04:45
【问题描述】:

是否可以将 clickhouse 用作键值存储,是否定期覆盖数据但很少读取?如果可以,我应该使用什么引擎?

【问题讨论】:

    标签: key-value-store clickhouse


    【解决方案1】:

    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);
    

    那你就可以把它当成字典(key-value)了:

    SELECT joinGet('my_fancy_kv_store', 'x', 'abc');
    SELECT joinGet('my_fancy_kv_store', 'k', 'def');
    

    【讨论】:

    【解决方案2】:

    EmbeddedRocksDB 表引擎是最近添加的,可以提供帮助。

    更多可以在这里找到: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的限制)

    【讨论】:

      猜你喜欢
      • 2018-08-23
      • 1970-01-01
      • 2011-04-26
      • 2020-12-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-24
      • 1970-01-01
      • 2016-10-14
      相关资源
      最近更新 更多