公司IOT业务涉及一个查询 终端过去两天上报数据曲线
数据量:单日新增460w
查询曲线时特别卡
这个问题本质上是
海量数据的存储和查询问题
特点是写入的数据不需要修改,和日志非常像
时序数据库InfluxDB进入视线
经过两天的折腾,基本把InfluxDB官方文档全撸了...
https://docs.influxdata.com/influxdb/v1.7/about_the_project/
测试结果如下:
Mac盒子OSX10.12 InfluxDB1.7
2019-06-01 ~ 2019-06-04
4天多一点的数据(本来计划导一个月,周末机器断电了)
18692759 --> 1800万条记录
占磁盘空间 160M +50M索引 ---》210M左右
查询单个设备 5天内 数据点值
LZYZX00009
耗时 494毫秒(MySql 需要21s)
迁移成本:
初步思路
1,历史数据(昨天及之前一个月内)
从MySql 导出到InfluxDB
写个定时任务,每天晚21:00导出前一天整天数据到InfluxDB
2,开发一个模块 ,提供Rest api接口,
查询某个设备,指定时间段内的数据点值
what:
时序数据库
why:
天生适合IOT
where:
配合Grafana 搭建很好的监控平台
借用别人的
优点:
支持基本sql
Retention policy :数据存活时间设置,过期自动清除、
down-sampling : 取样 非常适合IOT设备 数据压缩
占用空间小(实测 1600w条数据 5字段 time 1个tag 2个 value2个
InfluxDB1.7 osx系统 data + meta等共计 200M)
接口简单 安装后直接http访问 开发可用client api
上手容易
缺点:
不适合需要频繁修改的数据
OSS社区免费版 仅支持一个node ,即不支持冗余容灾(需要自己另外做处理,定期备份啥的)
槽点:
1,存活时间 不是依赖于数据插入时的时间,而是time字段的时间
比如 :
retention policy 设置 1天
你2019-06-29 12:00:00 插入一条记录
time值 2019-06-28 12:00:00
基本插入就没了.....
因为他是以插入的time值来推算的过期清理时间
2,有些概念比较绕
比如 Series, Group duration
3,管理工具远程操作 http不方便,是这样的格式:
curl -G 'http://192.168.1.138:8086/query?db=testdb&pretty=true' --data-urlencode 'q=SELECT * FROM "mymeas"'
所以推荐个工具:Time Series Admin
参考
https://dzone.com/articles/simplifying-influxdb-shards-and-retention-policies
https://stackshare.io/influxdb
https://docs.influxdata.com/influxdb/v1.7/tools/api/
https://www.influxdata.com/blog/influxdb-shards-retention-policies/
https://dzone.com/articles/influxdb-internals-101-part-one?fromrel=true
https://blog.codeship.com/a-deep-dive-into-influxdb/
Hardware sizing guidelines
https://docs.influxdata.com/influxdb/v1.7/guides/hardware_sizing/
https://medium.com/cobe-io/memory-adventures-with-influxdb-28b8157aebe8
网友评论