想做一个类似家里数据监控的 WEB 服务,但想不到一个合适的方法储存数据 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
beric
V2EX    问与答

想做一个类似家里数据监控的 WEB 服务,但想不到一个合适的方法储存数据

  •  
  •   beric 2014-11-24 19:58:40 +08:00 3436 次点击
    这是一个创建于 3981 天前的主题,其中的信息可能已经有所发展或是发生改变。
    简单点说就比如家里面室内温度,想通过采集传到服务器上,然后服务器保存数据到数据库,在外面就可以用浏览器查看或查询当前或历史温度。
    对于WEB查询端想要的功能是:
    1.能查看实时温度,和1小时内的温度曲线。
    2.保存历史温度,半小时保存一次。
    3.假设上报的时候为5秒。
    下面问题来了:
    怎么设计一个好的方法保存数据到数据库,又不想把全部的数据都存下来?就比如超过1小时后的数据只存1个就行了,之前的1小时是要保存。
    18 条回复    2014-11-25 09:52:10 +08:00
    cbsw
        1
    cbsw  
       2014-11-24 20:13:48 +08:00
    没明白最后一句是什么意思,不过这个不是很简单的吗,一个树莓派,一个程序负责采集存储数据,数据库(MySQL/PostgreSQL...)有了数据之后,后面的网站就随便搭了
    virusdefender
        2
    virusdefender  
       2014-11-24 20:20:46 +08:00
    yeelink就行了~
    ZackYang
        3
    ZackYang  
       2014-11-24 20:46:02 +08:00
    设置个TTL=1小时, 搞定.
    zjgsamuel
        4
    zjgsamuel  
       2014-11-24 20:53:46 +08:00   1
    beric
        5
    beric  
    OP
       2014-11-25 00:10:00 +08:00
    @cbsw 就是不知道有什么好的方式的存储和展示数据。最后一句是,比如我只想保存1小时内的数据,而超过1小时的只按1小时的平均值保存一次到数据里
    beric
        6
    beric  
    OP
       2014-11-25 00:10:51 +08:00
    @ZackYang 没看明白……
        7
    beric  
    OP
       2014-11-25 00:11:41 +08:00
    @virusdefender 不是硬件问题
    @zjgsamuel 谢谢,这个看起来有点意思……
    beric
    cbsw
        8
    cbsw  
       2014-11-25 01:55:19 +08:00
    你这逻辑不是很清楚吗,采集的数据带有时间戳,直接把它们存到数据库中,即采集一次,就往数据库中写一次,1个小时比如采集60次,那就每写60个之后就从数据库中取出前60个,取个平均写入数据库,然后继续采集写入
    展示的话不就是写个简单的网站吗,网页打开,后台从数据库中取出数据,简单的话直接以表格形式显示,想要高端的话,后台利用数据生成图片返回给网页端,想要更高端的话,用 Ajax 实时从服务器拉数据,前端用 D3.js 之类的库甚至直接用 html5 的 canvas 画图
    kmcool
        10
    kmcool  
       2014-11-25 05:26:29 +08:00
    家用温度没必要5秒一次 大概1分钟一次就行 否则功耗很大
    如果是1分钟一次 一年下来的数据量也没多少。。。
    rrfeng
        11
    rrfeng  
       2014-11-25 08:42:09 +08:00
    就这点儿数据,一分钟一次全存了也没多少吧。
    bearice
        12
    bearice  
       2014-11-25 08:54:12 +08:00   1
    rrdtool 你值得拥有。
    beric
        13
    beric  
    OP
       2014-11-25 09:17:26 +08:00
    @cbsw
    @kmcool
    @rrfeng
    啊,看来我表达很有问题,我其实纠结的是,比如在频率高的一直存下去的情况下,不想数据库大太的做法是比如存够了10W条后这后存一条再删一条吗?我就想要一个缓存的FIFO之类的。
    ijse
        14
    ijse  
       2014-11-25 09:20:34 +08:00   1
    用redis或者memcached,对存入的数据可以设置过期时间的。
    virusdefender
        15
    virusdefender  
       2014-11-25 09:48:30 +08:00
    @beric yeelink可以帮你存储数据的 有开放平台~
    beric
        16
    beric  
    OP
       2014-11-25 09:51:25 +08:00
    @ijse 哈哈,感谢,正是我想要的!!!PS:有时候有需求,但还是很难用搜索引擎找出答案~~~
    beric
        17
    beric  
    OP
       2014-11-25 09:51:48 +08:00
    @virusdefender 只想自己做设计嘛……
    ZackYang
        18
    ZackYang  
       2014-11-25 09:52:10 +08:00
    @beric 很多数据库都能设置数据的生存时间(即TTL), 超过那个时间的数据会被自动删除, 你设置成1小时就好了.
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2499 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 10:54 PVG 18:54 LAX 03:54 JFK 06:54
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86