当我接手到这样一个项目的时候,我内心是崩溃的,第一次去处理串口通信,第一次那么短的时间去读取那么多的数据,第一次去存那么大量的数据,每一个问题都能让我在生死边缘徘徊,我先简单的表述一下这个程序的主要功能吧。
这个程序主要是对500个电流表头进行实时数据的监控,每100个电流表头为一组,通过一根串口线进行通讯,软件要实现的功能是循环的去读取这100个设备的电流数据。读取的时间是10s。意思是100ms读取完一个电流表头的数据,这条数据里存了这100ms内的100条电流数据。500个电流表头存一天的数据就是4亿3200万条数据,要求存一个月。
上述就是整个项目要完成的功能,在这个项目中遇到了两个难以解决的问题。
1.java串口通讯的延时,10s内去读取100个设备的数据,至少丢50条数据。后来发现,java从发送指令到监听到数据返回的时间大概在150ms到300ms之间,尝试了多种方法也无法解决。
2.大量的数据存储,根据计算,1天的数据量在4亿3200万条左右,这个数据怎么存到数据库中才能保证查询不会太过卡顿。并且,要存30天的数据。数据库的选择,数据结构的设计等。
java串口通信及处理大量数据
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答
- 再写三行 2019-03-01 17:22关注
1.这么大的数据量你去数据库查询的话肯定速度很慢啊 所以得进行分表设计也就是横向的拆分,你一天要存储4亿3200万条数据,
那么一个月就是129亿6千万条 我们暂且为130亿条数据一般数据库拿mysql来说吧只能存储1000万条数据那你就要分1300张表,1300张表肯定不能放到一个数据库里面你最起码得分库吧分库你就要加机器啊,最起码5台服务器吧。然后再加上redis fluster 就差不多了吧2.或者你可以考虑一下使用mongodb 这是链接http://forum.foxera.com/mongodb/topic/444/对比mysql-什么场景更适用mongodb?un=Jesse 当然如果你要使用的话得去自己研究一下
解决 无用评论 打赏 举报