influxdb实战- 环境传感器数据存储与查询

一、数据准备

用python爬取pm25.in的数据,网址如下,http://www.pm25.in/,本测试的案例已经爬取了过去一年2017年5月到2018年5月的数据,大概200万条,存放在mongodb数据里。

二、数据描述

环境监测的信息项有很多,这里为了展示influxdb的存储,摘取了主要的几项,构建EnviInfos实体如下

private String city;//城市名称
private int aqi;//空气质量指数
private double pm_10;//pm10值
private double co;//co数值
private String updateDate;//数据更新时间(本次数据是1小时更新一次)

三、存储设计

1.创建envi表
2.将city属性作为tag值
3.将aqi、pm_10、co作为Field
4.将updateDate转换为long型时间,存储为time
5.分批批量加入,我这里是从mongodb里面每10000个点批量插入一次

  public static BatchPoints setUpBatchPoints(List<EnviInfos> infos) {
    System.out.println("构建BatchPoints");

    BatchPoints batchPoints = BatchPoints.database(InfluxdbUtils.DATABASE).tag("async", "true")
            .retentionPolicy(InfluxdbUtils.rpName).consistency(ConsistencyLevel.ALL).build();
    for (EnviInfos envi : infos) {
        Point point = Point.measurement("envi").tag("city", envi.getCity())
                .time(envi.getUpdateDate(), TimeUnit.MILLISECONDS).addField("aqi", envi.getAqi())
                .addField("pm_10", envi.getPm_10()).addField("co", envi.getCo()).build();

        batchPoints.point(point);
    }
    return batchPoints;
}

四、基础查询

1.当前表的总条数

SELECT COUNT(aqi) FROM envi
查询结果:
[[1970-01-01T00:00:00Z, 2013136.0]]#

2.指定城市,aqi的最新监测值

SELECT LAST(aqi) envi where city=’北京’
查询结果:
[[2018-05-05T02:00:00Z, 167.0]]
效果如下:
这里写图片描述

3.所有城市,aqi的最新监测值

SELECT LAST(aqi),city FROM envi GROUP BY city
查询结果:
**[[2018-05-05T03:00:00Z, 42.0, 七台河]]
[[2018-05-05T03:00:00Z, 23.0, 三亚]]
[[2018-05-05T03:00:00Z, 35.0, 三明]]
[[2018-05-05T03:00:00Z, 30.0, 三沙]]
[[2018-05-05T02:00:00Z, 89.0, 三门峡]]
[[2018-05-05T02:00:00Z, 66.0, 上海]]
[[2018-05-05T03:00:00Z, 46.0, 上饶]]**

效果如下:
这里写图片描述

指定城市,指定时间段的按天统计的平均aqi值

开始时间:2018-04-01T00:00:00Z
结束时间:2018-04-12T00:00:00Z
SELECT MEAN(aqi) FROM envi where city=’北京’ AND time>=’” +stdt + “’ AND time<’” + etdt+ “’ GROUP BY time(1d)
查询结果:
[[2018-04-01T00:00:00Z, 222.21428571428572], [2018-04-02T00:00:00Z, 227.0], [2018-04-03T00:00:00Z, 51.45454545454545], [2018-04-04T00:00:00Z, 40.90909090909091], [2018-04-05T00:00:00Z, 106.27272727272727], [2018-04-06T00:00:00Z, 50.0], [2018-04-07T00:00:00Z, 56.36363636363637], [2018-04-08T00:00:00Z, 73.63636363636364], [2018-04-09T00:00:00Z, 128.1818181818182], [2018-04-10T00:00:00Z, 70.72727272727273], [2018-04-11T00:00:00Z, 58.09090909090909]]
效果如下:
这里写图片描述

五、总结

1.相比mysql数据库存储,由于传感器数据格式非常标准统一,大多需要单表存储,但是随着传感器数据的不断增加,会导致传统mysql数据库查询速度越来越慢,influxdb作为时序数据库的代表,在解决这类问题上非常有优势。
2.我们之前这类数据的存储是mongodb存储的,但是在数据量不断增长,另外面对各类时间维度统计(获取所有城市过去7天平均aqi)的时候这种需求很难满足。

猜你喜欢

转载自blog.csdn.net/xinlingjun2007/article/details/80261156
今日推荐