看Mars数据库怎么将190M数据压缩进1

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年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

**](https://bbs.csdn.net/topics/618654289)

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

  • 19
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值