请教下,物联网的大量数据采集如何保存数据 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Essaim
V2EX    Java

请教下,物联网的大量数据采集如何保存数据

  •  
  •   Essaim 2019-05-20 12:20:06 +08:00 9057 次点击
    这是一个创建于 2344 天前的主题,其中的信息可能已经有所发展或是发生改变。
    公司突然要求做行车轨迹,而且还不调用地图软件的开放 api.然后让我这个半年开发经验,没有任何物联网数据的蔡狗子来搞.一点头绪都没有.
    简单的以公司 10W 个设备来计算,每天平均 3 小时在线,每 10 秒钟采集一条数据,那么一天的数据量就能达到上亿条.那么 mysql 等关系数据库肯定是不行了.但是实际数据大小肯定不大,一个设备 ID,一个经纬度信息,一个时间戳.
    简单的想了个思路:
    以一段路程作为一个单位,从起点开始采集数据,将数据放在 nosql 缓存中,然后当设备发送结束路径请求的时候,将数据打包序列化到文件中,通过 fastdfs 存储起来,然后在 mysql 中存储一条文件索记录,因为系统的查询量比较少,所以性能应该还是过得去的.
    大佬们有没有更好的想法,或者我这个想法有什么不可行的地方,希望大家斧正.
    49 条回复    2019-05-21 14:48:58 +08:00
    leeyuzhe
        1
    leeyuzhe  
       2019-05-20 12:27:11 +08:00 via Android
    时序数据库了解一下
    wizzer
        2
    wizzer  
       2019-05-20 12:32:19 +08:00
    1、业务拆分,实时数据只是在需要查看的时候才显示,比如 10 分钟内的实时数据可以放 redis ;
    2、历史数据,根据需要,每隔多长时间存 mongodb 去,而不是 10s 一次的保存;
    3、统计数据,可以实时统计出来的数据、或通过历史数据统计出的数据,放 mysql 里去,按月分表等;
    4、队列肯定是要加的,并发转队列,慢慢处理生成以上数据;
    MoHen9
        3
    MoHen9  
       2019-05-20 12:37:19 +08:00 via Android
    一楼是正解,但是数据量一上去就必须得大数据了。
    snappyone
        4
    snappyone  
       2019-05-20 12:42:30 +08:00
    时序数据库+1
    David1119
        5
    David1119  
       2019-05-20 12:44:57 +08:00
    timescaleDB
    looseChen
        6
    looseChen  
       2019-05-20 12:45:07 +08:00 via iPhone
    influxdb
    Essaim
        7
    Essaim  
    OP
       2019-05-20 12:56:14 +08:00
    @leeyuzhe 谢谢,我去了解一下~
    goodryb
        8
    goodryb  
       2019-05-20 12:56:26 +08:00
    云计算 IOT 平台了解一下,一条龙服务
    Essaim
        9
    Essaim  
    OP
       2019-05-20 13:02:27 +08:00
    先说下另外一个想法,如果一段路线看做一个单位,并且绝对不会用这些数据来查询,那么是否可以直接把这段路程的所有数据打包成一个 json 字符串,然后存储到一个字段里面去,这样的话就可以忽略数据条数带来的影响了.但是相应的,是否会影响数据的使用?如果以后有什么新需求,需要对数据做统计的话.
    然后现在去了解一下时序数据库,统一谢过楼上各位.
    Essaim
        10
    Essaim  
    OP
       2019-05-20 13:08:16 +08:00
    @goodryb 我先吐槽下公司决策层,虽然这些东西涉及到物联网,但是他们似乎根本没想往这方面发展,所以需求都是,数据保存一段时间后删除.
    采集这么多数据,然后后面还不用,还得出这么多钱,他们肯定不愿意了.
    goodryb
        11
    goodryb  
       2019-05-20 13:11:42 +08:00
    @Essaim #10 你们公司有架构师吗,有的话这个问题应该是他来考虑的,如果没有,根据需求,给出 2-3 个解决方案和所需要的资源,提交老板审批即可。
    Essaim
        12
    Essaim  
    OP
       2019-05-20 13:15:30 +08:00
    @goodryb 没有!后端目前就两人,我的上级以前还是搞安卓开发的,没有任何后端经验,在我两个月前进来后公司才开始做互联网项目.
    ps:我也不明白公司为什么不找个大牛招个半年开发经验的过来,我现在都特别想溜了.
    Essaim
        13
    Essaim  
    OP
       2019-05-20 13:16:46 +08:00
    @goodryb 明白了,谢了,我看下几个方案,稍微评估下交给上级去.最难受的是上级还请陪产假了,公司后端目前就我一个.Orz
    goodryb
        14
    goodryb  
       2019-05-20 13:16:57 +08:00
    @Essaim #12 没有就找第三方服务商去买,要不就用云平台,自己搞不了就不要硬抗,要不然到时候还要甩锅
    Essaim
        15
    Essaim  
    OP
       2019-05-20 13:18:55 +08:00
    @goodryb 好的,谢谢.
    youngce
        16
    youngce  
       2019-05-20 13:37:32 +08:00
    influxdb+1
    opengps
        17
    opengps  
       2019-05-20 13:38:25 +08:00
    咱可以沟通一下,我做了 6 年多的汽车位置平台
    opengps
        18
    opengps  
       2019-05-20 13:39:32 +08:00
    我第一版设计的 sqlserver,单数据库单表,实际应用达到了 15 亿行数据毫无压力,设计峰值每秒 3000,实际才用到 100 多点
    Vkery
        19
    Vkery  
       2019-05-20 13:41:19 +08:00
    cassandra
    F281M6Dh8DXpD1g2
        20
    F281M6Dh8DXpD1g2  
       2019-05-20 13:42:58 +08:00
    keep 以前存跑步轨迹的时候,是把 gps 坐标放到一个 json 数组里面,然后把这个数组 base64 之后用 zip 压缩这个字符串,然后放到 hbase 里.
    做分析的时候简直噩梦一样
    largecat
        21
    largecat  
       2019-05-20 14:05:52 +08:00 via Android
    找半年经验的,对 boss 威胁小,
    哈哈
    Essaim
        22
    Essaim  
    OP
       2019-05-20 14:11:11 +08:00
    @largecat 2333,我偶尔也会这么想.
    @opengps 老哥怎么联系.
    janxin
        23
    janxin  
       2019-05-20 14:22:00 +08:00
    influxdb 了解一下
    janxin
        24
    janxin  
       2019-05-20 14:23:38 +08:00
    @liprais 卧槽这个操作是怎么想到的,真神了
    opengps
        25
    opengps  
       2019-05-20 14:28:46 +08:00
    @Essaim v 站 id 同微信 id
    opengps
        26
    opengps  
       2019-05-20 14:29:25 +08:00
    @liprais 666,这是我见过最安全的操作方式
    opengps
        27
    opengps  
       2019-05-20 14:34:31 +08:00
    更正 18 楼数据,iops 指标,闲时 100 多,忙时 500 左右,并发 tcp 在线连接数 20 万
    ponymaggie
        28
    ponymaggie  
       2019-05-20 14:46:48 +08:00
    openTDB 可以看看
    youngce
        29
    youngce  
       2019-05-20 14:47:55 +08:00
    @opengps 我想请教一下,在大概 15 亿行数据后, 假如需要调取某辆,某一天的某个时间段的轨迹数据,大概需要耗费多少时间?
    kim01
        30
    kim01  
       2019-05-20 14:52:51 +08:00   1
    车联网行业做 GPS 定位的同仁路过,不好评价!!!
    cszchen
        31
    cszchen  
       2019-05-20 14:52:51 +08:00 via Android
    行车轨迹一般要纠偏,也就是 gps 数据会有误差,一般采用地图 api 接口,自己搞会有点难度。
    tmac6740
        32
    tmac6740  
       2019-05-20 14:53:42 +08:00 via iPhone
    之前做过 把位置数据绘制一张图片 存起来
    opengps
        33
    opengps  
       2019-05-20 14:56:17 +08:00
    @youngce 很快,跟单表性能相差很小,因为做了表分区 https://www.opengps.cn/Blog/View.aspx?id=284
    opengps
        34
    opengps  
       2019-05-20 14:56:54 +08:00   1
    @cszchen 自己做个纠偏库就很好办了,也有同行是输出时候做一次批量转化
    goodleixiao
        35
    goodleixiao  
       2019-05-20 15:00:52 +08:00
    HBase 是一个开源的非关系型分布式数据库( NoSQL ),它参考了谷歌的 BigTable 建模,实现的编程语言为 Java。
    youngce
        36
    youngce  
       2019-05-20 15:24:13 +08:00
    @opengps 感谢大佬的回复,博客看了很有启发。谢谢,祝工作顺利:)
    opengps
        37
    opengps  
       2019-05-20 16:07:28 +08:00 via Android
    @youngce 实际应用更建议分库分表,因为数据库文件到了一定量,由于存储太大会不方便扩展,我当时是到了 700G,然后把轨迹部分单独换作 nosql 类型处理,现在则又走回 mysql 的老路,选用阿里云 drds 了
    wplct
        38
    wplct  
       2019-05-20 18:44:52 +08:00
    先出方案和成本,调研也是做事情的基本
    老板不会怪罪你的
    rockyou12
        39
    rockyou12  
       2019-05-20 20:00:43 +08:00
    别用关系库,虽然上面有人做过方案但是和专门的时序数据库没得比。哪怕在时序数据库里,influxdb 这种自己实现底层存储的都强国 opentsdb 这种依赖 hbase 的好几倍。

    我之前在做服务器监控的时候顺带研究过这块,最开始用的 elasticsearch 做采集,一天的数据有 20g,后来换成了 promethus 一天就 500m 都没有。由于关系库不会像专门的时序数据库这样有很多优化与压缩,所以至少存储上你会很快遇到压力。

    promethus 和 infuxdb 有很多设计上的相似,所以可以期望 infuxdb 至少在存储上也有这样大的优势。而且有大量 benchmark 都说明了综合看 infuxdb 是性能最好的了,唯一缺点就是集群要收费。
    izoabr
        40
    izoabr  
       2019-05-20 20:45:58 +08:00
    postgres 的 gis 了解一下
    killadm
        41
    killadm  
       2019-05-20 21:14:39 +08:00 via Android
    influxdb+1
    IsA26hN4DcQDS7Z9
        42
    IsA26hN4DcQDS7Z9  
       2019-05-20 21:27:21 +08:00
    地图偏移会经常变吗?
    smdbh
        43
    smdbh  
       2019-05-20 21:27:59 +08:00 via iPhone
    内存保存不下的,就用硬盘啊
    opengps
        44
    opengps  
       2019-05-20 21:49:40 +08:00
    @Raynard 几乎不会,都是固定的坐标系了。(可以参考 https://www.opengps.cn/Map/offset/offset.aspx )
    比如大部分国内地图都采用的国测局 gcj02,百度是自己又做了一次加密的 bd09ll
    国内要出版上限的地图服务,必须至少使用 gcj02 坐标系
    byteli
        45
    byteli  
       2019-05-20 23:25:49 +08:00
    楼上的大家 influxdb 有单机瓶颈吧,集群收费
    midoks
        46
    midoks  
       2019-05-20 23:34:31 +08:00 via iPhone
    肯定是大数据的相关软件呀 hadoop,spark...
    ryomahan
        47
    ryomahan  
       2019-05-20 23:42:45 +08:00
    为啥没看到有用 MongoDB 的,我(同楼主工作经验半年)目前在做一个车联网项目,研究了一下选用了 MongoDB,目前还在做开发,性能方面确实没怎么考虑,不过我结合了阿里云给出的自家 MongoDB 和 时序数据库的介绍,感觉两者差别不大(本人非专业数据库工作人员),有人愿意给我们这些小白科普一下 MongoDB 与 InfluxDB 在读写方面差距在哪吗?关系型数据库暂时不想考虑,貌似得优化不少东西吧。
    janxin
        48
    janxin  
       2019-05-21 06:27:55 +08:00 via iPhone
    @byteli 自己做集群方案
    @ryomahan influxdb 在压缩比 io 优化做了很多工作,可以搜索一下 influxdb tsm 相关的东西了解一下。最终还是落到使用场景上,influxdb 也不是银弹
    lbxl2345
        49
    lbxl2345  
       2019-05-21 14:48:58 +08:00
    我在阿里云做物联网平台,楼主有空加个微信交流下~ hunter19901016
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2655 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 09:29 PVG 17:29 LAX 02:29 JFK 05:29
    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