V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
beric
V2EX  ›  问与答

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

  •  
  •   beric · 2014-11-24 19:58:40 +08:00 · 3155 次点击
    这是一个创建于 3654 天前的主题,其中的信息可能已经有所发展或是发生改变。
    简单点说就比如家里面室内温度,想通过采集传到服务器上,然后服务器保存数据到数据库,在外面就可以用浏览器查看或查询当前或历史温度。
    对于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 没看明白……
    beric
        7
    beric  
    OP
       2014-11-25 00:11:41 +08:00
    @virusdefender 不是硬件问题
    @zjgsamuel 谢谢,这个看起来有点意思……
    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   ·   实用小工具   ·   3231 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 12:59 · PVG 20:59 · LAX 04:59 · JFK 07:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.