clickhouse - 将具有动态更改架构的事件数据流式传输到 ClickHouse
问题描述
我正在评估 Clickhouse 以存储具有可变事件模式的流事件。事件架构是嵌套的 JSON。新属性可能具有不同的数据类型,因此我们无法创建规范化的键值对。
根据文档,看起来每当架构发生变化时,我们都必须显式更改表的架构,然后插入新记录。由于插入是从多个源工作人员进行的,因此添加 'IF NOT EXISTS' 子句可以帮助最小化竞争条件。
任何人都可以建议是否有更好的方法来继续将具有动态变化模式的事件插入到 Clickhouse 中?有什么方法可以让 Clickhouse 根据插入的事件推断更新的架构?
解决方案
插入时的每一列都需要 2MB RAM。
1000 列的表在插入时会吃掉 2GB。
每列 =~ 磁盘上的 3 个文件 += 插入时的 3 个随机读/写。
更改表有时会被合并/选择阻塞,并且可能会执行数小时。
我会从 JSON 中挑选出 MAIN 列(将在最常使用的地方)并将它们放入专用列中。其他列到 K/V - 2 列(键数组(字符串),值数组(字符串))。否则使用 MongoDb。
推荐阅读
- c# - oData EndPoint:是否影响 SQL 查询?
- python - 在 ubuntu 18.04 中更改 python 的默认版本
- javascript - 查找属性为小数的具有最大值的对象属性
- qt - 如何动态绘制多边形并使其点/标记在 QML 中可移动?
- c++ - 我应该使用 std::optional 还是继承添加可选的类成员?
- mysql - 在 docker 容器中运行时,Scala Play JDBC 无法连接到 MySQL
- python - Object Leds 没有属性 animate_stop(ev3dev2 库)
- php - 如何使用 .htaccess 重写 URL(删除 id?=1)
- php - PHP:按索引对数组进行分组(每 1、2、3、nth ...)
- accelerometer - Micro:bit - 加速度计 - (Micro python) 使 microbit 向下计数 - 仅适用于手势