V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Essaim
V2EX  ›  Java

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

  •  
  •   Essaim · 2019-05-20 12:20:06 +08:00 · 8579 次点击
    这是一个创建于 2015 天前的主题,其中的信息可能已经有所发展或是发生改变。
    公司突然要求做行车轨迹,而且还不调用地图软件的开放 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
    liprais
        20
    liprais  
       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
    Raynard
        42
    Raynard  
       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   ·   实用小工具   ·   1123 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 18:19 · PVG 02:19 · LAX 10:19 · JFK 13:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.