首页 > 解决方案 > 将具有动态更改架构的事件数据流式传输到 ClickHouse

问题描述

我正在评估 Clickhouse 以存储具有可变事件模式的流事件。事件架构是嵌套的 JSON。新属性可能具有不同的数据类型,因此我们无法创建规范化的键值对。

根据文档,看起来每当架构发生变化时,我们都必须显式更改表的架构,然后插入新记录。由于插入是从多个源工作人员进行的,因此添加 'IF NOT EXISTS' 子句可以帮助最小化竞争条件。

任何人都可以建议是否有更好的方法来继续将具有动态变化模式的事件插入到 Clickhouse 中?有什么方法可以让 Clickhouse 根据插入的事件推断更新的架构?

标签: clickhouse

解决方案


插入时的每一列都需要 2MB RAM。

1000 列的表在插入时会吃掉 2GB。

每列 =~ 磁盘上的 3 个文件 += 插入时的 3 个随机读/写。

更改表有时会被合并/选择阻塞,并且可能会执行数小时。

我会从 JSON 中挑选出 MAIN 列(将在最常使用的地方)并将它们放入专用列中。其他列到 K/V - 2 列(键数组(字符串),值数组(字符串))。否则使用 MongoDb。


推荐阅读