日期:2014-05-17  浏览次数:20972 次

10000多个传感器的历史数据定时保存的思路
本帖最后由 yeqi3000 于 2013-08-12 09:36:17 编辑
目前有大概10000多个传感器,需要采用定时保存的方式对这10000个传感器的数据进行保存,且每个传感器的保存间隔周期根据用户要求自定义。
目前想到的方案有两种:
1.为每一个传感器对象创建一个计时器,当间隔时间到时,触发保存事件,将数据提交给历史数据模块保存处理。
2.后台开启一个检查线程,没间隔100毫秒,扫描所有的传感器一次,计算每个传感器上一次保存时间与当前时间的间隔是否满足间隔周期,是就将数据提交给历史数据模块保存处理。

间隔周期设定为秒级,最低在5秒以上,虽然设定间隔周期,但不需要保证十分精确的间隔保存数据。
因为这方面的经验不足,请教高手帮我分析,分析,或者还有其他更好的方案不。

------解决方案--------------------
传感器。。不懂,帮顶
------解决方案--------------------
要考虑传感器数据的变化频度。若是变化不快,只保存变化的数据即可。

服务器应采用队列处理模式。
传感器数据主动上传。
传感器数据到达时,加入队列。
服务器只处理队列数据即可。

------解决方案--------------------
重点是“队列处理”

你的方案,系统会忙死的
------解决方案--------------------
分2个模块:
1.设备注册管理:用来注册设备,和轮询设备;
2.数据存储模块:轮询满足条件后,通知存储模块存储;

性能是主要的问题,但是你的时间间隔固定,实际上不需要轮询设备,注册进来后,程序内部控制间隔;定期轮询下设备,做下时间同步即可;还有一些设备网络异常处理;

10000个设备数据存储,需要看数据量有多大,无法承受的话,只能多开几台存储模块服务器,每台负责部分
------解决方案--------------------
學習。。。。
------解决方案--------------------
这样的资料保存应该用文件保存吧,用数据库有点痛苦额
------解决方案--------------------
我认为可以在数据库中处理
建一个当前值表保存所有传感器的当前值,并根据上传的值随时更新,表中要放一个表示下次保存时间的字段
然后开启一个线程,每1秒执行一次,取出当前值表中,下次保存时间<=当前时间的数据,复制到历史表中,同时把下次保存时间设为 当前时间+时间间隔
------解决方案--------------------
上面的方案中,如果传感器的值不变,记录也会按时间间隔进行记录。
如果传感器值不变时不要记录,则可以在当前值表中放一个触发器来执行,就不需要开线程了。
------解决方案--------------------
关于存储,我们一般是设置传感器某个临界值,在高于这个值的时候都存储,在低于的时候存储的时间间隔就比较长了
------解决方案--------------------
NoSQL可以帮助你
------解决方案--------------------
我也是做传感器数据采集的。采集工作流程 初如化->启动服务->接收数据->解析->保存->显示 这样一个流程。异步接收。采集临界区方式同步解析。
------解决方案--------------------
你的2个方案都不太现实。技术上,不可行。
建议你这样做:
建立数组1:放置每个传感器的最后更新时间(推荐使用时钟计数)。
数组2:放置每个传感器的设定更新周期,(用户可自行修改)。