10000多个传感器的历史数据定时保存的思路
传感器。。不懂,帮顶
[解决办法]
要考虑传感器数据的变化频度。若是变化不快,只保存变化的数据即可。
服务器应采用队列处理模式。
传感器数据主动上传。
传感器数据到达时,加入队列。
服务器只处理队列数据即可。
[解决办法]
重点是“队列处理”
你的方案,系统会忙死的
[解决办法]
分2个模块:
1.设备注册管理:用来注册设备,和轮询设备;
2.数据存储模块:轮询满足条件后,通知存储模块存储;
性能是主要的问题,但是你的时间间隔固定,实际上不需要轮询设备,注册进来后,程序内部控制间隔;定期轮询下设备,做下时间同步即可;还有一些设备网络异常处理;
10000个设备数据存储,需要看数据量有多大,无法承受的话,只能多开几台存储模块服务器,每台负责部分
[解决办法]
學習。。。。
[解决办法]
这样的资料保存应该用文件保存吧,用数据库有点痛苦额
[解决办法]
我认为可以在数据库中处理
建一个当前值表保存所有传感器的当前值,并根据上传的值随时更新,表中要放一个表示下次保存时间的字段
然后开启一个线程,每1秒执行一次,取出当前值表中,下次保存时间<=当前时间的数据,复制到历史表中,同时把下次保存时间设为 当前时间+时间间隔
[解决办法]
上面的方案中,如果传感器的值不变,记录也会按时间间隔进行记录。
如果传感器值不变时不要记录,则可以在当前值表中放一个触发器来执行,就不需要开线程了。
[解决办法]
关于存储,我们一般是设置传感器某个临界值,在高于这个值的时候都存储,在低于的时候存储的时间间隔就比较长了
[解决办法]
NoSQL可以帮助你
[解决办法]
我也是做传感器数据采集的。采集工作流程 初如化->启动服务->接收数据->解析->保存->显示 这样一个流程。异步接收。采集临界区方式同步解析。
[解决办法]
你的2个方案都不太现实。技术上,不可行。
建议你这样做:
建立数组1:放置每个传感器的最后更新时间(推荐使用时钟计数)。
数组2:放置每个传感器的设定更新周期,(用户可自行修改)。
建立死循环,依次轮询传感器,检查当前时钟计数与数组1的差值是否大于数组2。来界定是否读取传感器值。
如果需要读取:就开线程读取传感器,并存储数据,存到文件还是数据库就看你的喜好了。
其他的:不变化不存、少量变动不存什么的算法,自己可以选择的用。都可以的。
[解决办法]
我做工控软件好多年了,我的方法应该是比较好的。看不明白的话,继续联系。