@
rapperx2 我还真造了点数据来测试一下 clickhouse 。
表结构:
create table ts_test
(
ts DateTime64 CODEC(DoubleDelta),
car_id Int32,
lat Float32 CODEC(Gorilla),
log Float32 CODEC(Gorilla),
dir Float32 CODEC(Gorilla)
) engine MergeTree() order by (car_id, ts) partition by toDate(ts);
其中,方向 dir 平均 100s 随机刷新,速度 0-100 之间随机,ts 的间隔 1s±100ms 并加入随机抖动,20000 辆车,每辆车起始位置随机,然后模拟每辆车运动,生成 csv 数据导入 clickhouse 。共使用了 20 分钟导入了 983725233(9.8 亿)行数据,占用硬盘空间 9.45 GiB,大概每 1 亿行 1G 。
然后测试了一些简单的查询。
Q1: 查询某个车的完整轨迹: select * from ts_test where car_id=1;
行数和耗时:49187 rows in set. Elapsed: 0.041 sec.
Q2: 查询表总行数: select count(*) from ts_test;
行数和耗时:1 rows in set. Elapsed: 0.001 sec. (估计缓存了)
Q3: 查询每辆车的数据点数量: select car_id,count(*) from ts_test group by car_id;
行数和耗时:20000 rows in set. Elapsed: 0.129 sec.
Q4: 查询每辆车的活动范围(矩形):select car_id,min(lat),max(lat),min(log),max(log) from ts_test group by car_id;
行数和耗时:20000 rows in set. Elapsed: 0.568 sec.
Q5: 查询一辆车的活动范围(矩形):select min(lat),max(lat),min(log),max(log) from ts_test where car_id=100;
行数和耗时:1 rows in set. Elapsed: 0.003 sec.
Q6: 查询每小时的数据点(每小时约 7200w )数量: select count(*),toYYYYMMDD(ts)+toHour(ts) as hour from ts_test group by hour;
行数和耗时:14 rows in set. Elapsed: 0.347 sec.
测试硬件:单机 AMD EPYC 7702P 64-Core Processor 64 核,256G 内存,SSD
希望对楼主有帮助