【发布时间】:2021-09-16 02:38:45
【问题描述】:
我们的项目中出现了以下问题,我们无法解决。 我们有大量的日志数据,我们从 MongoDB 转到 ClickHouse。
我们的表是这样创建的:
CREATE TABLE IF NOT EXISTS logs ON CLUSTER default (
raw String,
ts DateTime64(6) MATERIALIZED toDateTime64(JSONExtractString(raw, 'date_time'), 6),
device_id String MATERIALIZED JSONExtractString(raw, 'device_id'),
level Int8 MATERIALIZED JSONExtractInt(raw, 'level'),
context String MATERIALIZED JSONExtractString(raw, 'context'),
event String MATERIALIZED JSONExtractString(raw, 'event'),
event_code String MATERIALIZED JSONExtractInt(raw, 'event_code'),
data String MATERIALIZED JSONExtractRaw(raw, 'data'),
date Date DEFAULT toDate(ts),
week Date DEFAULT toMonday(ts)
)
ENGINE ReplicatedReplacingMergeTree()
ORDER BY (device_id, ts)
PARTITION BY week
我正在运行这样的查询
SELECT device_id,toDateTime(ts),context,level,event,data
FROM logs
WHERE device_id = 'some_uuid'
ORDER BY ts DESC
LIMIT 10
OFFSET 0;
这是集合中 10 行的结果。 经过:6.23 秒。
第二个没有顺序、限制和偏移:
SELECT device_id,toDateTime(ts),context,level,event,data
FROM logs
WHERE device_id = 'some_uuid'
这是每 500 行 130000+ 的结果经过:7.994 秒
太慢了。
似乎 CH 处理了表中的所有行。哪里出了问题,需要提高 CH 的速度?
在 MongoDB 上相同的实现需要 200-500 毫秒 max
【问题讨论】:
-
也许您可以尝试从 where select 中提取 raw,然后调用 JSONExtractString 获取您需要的参数
标签: sql mongodb performance clickhouse clickhouse-go