2.数据准备
甲方给的是一段5分钟的parquet格式的数据量在194M大小的数据文件,同时还有一个数据信号列表数据。这194M parquet格式的数据也是压缩过后的数据,其采用时间、名称、值三列结构的表格式存储。下面先将数据解压、转换能够符合Mars数据库入库的格式的数据。
a. 借助Python脚本,将Parquet格式的数据转换成CSV格式的数据,转换成CSV格式的目的是为了下一步能够较好的读取和使用。转换成CSV格式后,文件大小在3G 左右,如下图:
b. 再以信号名称为单位将CSV格式的数据,主要原因`1是Mars数据库中是以单个信号为单位进行数据组织的。整体转换完成后,6000个二进制存储的数据文件大小在960M左右,如下图:
由此可以看出,在不进行任何压缩的状态,5分钟的数据产生的数据量在960M左右。
通过数据文件分析发现,总共6122个测点,其中模拟量:1534 数字量:4588。数据的再整理:以测点为单位重新组织数据,每个测点一个文件,文件的内容是以二进制格式存储的时间+值的集合。
6122个测点中,其中不同的测点数据变化的频率不一样,具体如下:
采集间隔 <=5ms :30 个
采集间隔 5~10ms :799 个
采集间隔 10~100ms :3471 个
采集间隔 100ms~1s :1607 个
采集间隔 >1s :215 个
采集间隔 100ms~1s :1607 个
采集间隔 >1s :215 个
3.数据库建模
Mars数据库是以变量进行数据组织的,所以根据信号的名称以及类型创建相应的变量。变量之间是松散的关系,对于有关系的变量间可以通过变量的“区域”属性进行关联,同一个区域内的变量,在做数据存储时会进行时间戳优化,能够较好进一步压缩数据;一个区域可以理解关系库中一个表,每个变量对应一列。相较于时序库的列式存储,一个变量可以理解为一列,而具有相关性的列又可以通过区域来组成一个表;相比时序库,Mars数据库既支持表格式存储,也支持松散的单列存储。建模完成后,数据库表配置如下图所示:
4.数据写入
通过针对这次测试专门开发驱动程序,写入数据到Mars数据库中。数据写入同样以变量为单位,将一个变量的5分钟的数据一次写入。
原始数据
入库过程中资源占用情况1
入库过程中资源占用情况2
可见在整个数据写入过程中,CPU资源始终维持在10%左右,而内存在在2.8G附近。写入整个5分钟7000多万条数据总耗时:40秒。压缩以后最终数据:
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!
**](https://bbs.csdn.net/topics/618654289)
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!