数据库docker限制资源:CPU 4核,内存 8G。数据库版本:1.3.0
表结构如下,每个位号对应一张表:
create device template t2 aligned (
id INT64 encoding=PLAIN
, ds_id INT64 encoding=PLAIN
, quality INT32 encoding=PLAIN
, app_time TEXT encoding=PLAIN
, tag_value TEXT encoding=PLAIN
, tag_time TEXT encoding=PLAIN
, create_time TEXT encoding=PLAIN
);
从本地机器读取csv文件数据调用JDBC批量写入测试数据库
1. 写入性能
- insertRecords方式,2线程(cpu100%,内存90%)
Total rows processed: 11832048
Total time taken: 288.868 s
Overall write speed: 40960.05095753077 rows/sec - insertRecords方式,3线程(cpu100%,内存90%)
Total rows processed: 11103208
Total time taken: 268.895 s
Overall write speed: 41291.983859870954 rows/sec
2. 空间占用
在所有序列默认压缩算法SNAPPY的情况,总占用:3.3G
3. 查询性能
数据量72815929
全量count()
select count(id) from root.obp_data_hub_value.* group by level = 3;
耗时:7.5s
count()一天
SELECT COUNT(id) FROM root.obp_data_hub_value.* WHERE time >= 2024-06-02T00:00:00 AND time < 2024-06-03T00:00:00 group by level=3
耗时:2.5s
单个位号查询
SELECT count(id) from root.obp_data_hub_value.dm_tag_value_TAG9972_ISYS7_1
耗时:8ms
SELECT * from root.obp_data_hub_value.dm_tag_value_TAG9972_ISYS7_1
耗时:168ms
SELECT count(id) from root.obp_data_hub_value.dm_tag_value_TAG9972_ISYS7_1 WHERE time >= 2024-06-02T00:00:00 AND time < 2024-06-03T00:00:00
耗时:9ms
SELECT * from root.obp_data_hub_value.dm_tag_value_TAG9972_ISYS7_1 WHERE time >= 2024-06-02T00:00:00 AND time < 2024-06-03T00:00:00 limit 200
耗时:11ms
小时聚合
SELECT avg(cast(tag_value, 'type'='DOUBLE')) FROM root.obp_data_hub_value.dm_tag_value_TAG9972_ISYS7_1
WHERE time >= 2024-06-02T00:00:00 AND time < 2024-06-03T00:00:00
GROUP BY ([ 2024-06-02T00:00:00,2024-06-03T00:00:00), 1h)
耗时:69ms
4. 总结
- iotdb语法和关系数据库差异比较大,部分语法不支持(比如:子查询是group的场景),建表序列的时候需要提前考虑好数据使用场景。
- 写入性能
在4CPU,8G内存的情况下写入能到4W行/S,也就是4W位号的情况下可以做到秒级延时。更多位号的情况下会延时,如要减少延迟时间需要增加资源,单机的话可以提升cpu和内存,把机械硬盘改为SSD固态硬盘,非单机的话可以分布式部署提高吞吐。 - 存储空间
数据默认就会压缩,默认压缩算法的情况下存储空间是MariaDB的五分之一左右,有压缩率更高的算法,相应的插入会变慢。 - 查询性能
正常通过时间+加位号查询毫秒级返回(目前业务场景都是这种),不带位号的扫描查询秒级返回。
附件:时序数据库选型