毕设开发日志2017-11-30(性能优化)

【前言】

  28号完成了预测模型的雏形之后由于性能问题几经修改,在上次的日志里也说到了,今天还是这个主题:性能的优化。

【问题描述】

  在28号之后,由于预测模型的工作速度仍不满意,于是考虑是频繁的文件读写造成了计算速度慢,于是在数据库里新建了一个表,专门存放各个城市的预测模型数据。同时也编写了该表对应的Dao层,能够支持对模型数据的插入和更新,以及多种方式的查询。然后基于该数据表我对预测过程做了对应的修改。忙乎了一天之后在昨天晚上做测试,下面是输出每个省省会城市的预测值的计算运行过程:

2017-11-29 19:31:52----北京,38
2017-11-29 19:31:52----上海,68
2017-11-29 19:31:52----天津,129
2017-11-29 19:31:53----重庆,76
2017-11-29 19:31:54----黑龙江,155
2017-11-29 19:31:55----吉林,309
2017-11-29 19:31:56----辽宁,92
2017-11-29 19:31:59----内蒙古,79
2017-11-29 19:32:01----河北,112
2017-11-29 19:32:05----山西,112
2017-11-29 19:32:12----陕西,88
2017-11-29 19:32:18----山东,83
2017-11-29 19:32:27----新疆,147
2017-11-29 19:32:36----西藏,135
2017-11-29 19:32:43----青海,149
2017-11-29 19:32:51----甘肃,131
2017-11-29 19:32:59----宁夏,126
2017-11-29 19:33:08----河南,72
2017-11-29 19:33:18----江苏,18
2017-11-29 19:33:31----湖北,46
2017-11-29 19:33:47----浙江,80
2017-11-29 19:34:01----安徽,33
2017-11-29 19:34:17----福建,40
2017-11-29 19:34:38----江西,31
2017-11-29 19:34:58----湖南,32
2017-11-29 19:35:25----贵州,33
2017-11-29 19:35:52----四川,81
2017-11-29 19:36:22----广东,31
2017-11-29 19:36:53----云南,52
2017-11-29 19:37:27----广西,38
2017-11-29 19:38:05----海南,40

这里我发现了两点,第一,一开始的几个城市挺快,最后越来越慢,到最后到海南的时候需要38秒。第二,整个过程与文件读写方式来查预测模型的耗时几乎一样,也就是说耗时并不在于文件读写过程。于是我单独计算海口和北京两个城市的预测值,发现前者在1秒内出结果,而后者确实需要30多秒。然后仔细调试运行过程发现耗时瓶颈在于数据库查询。数据库该表的主键是"城市id_监测站_日期",所以hbase以字典序排序所有数据,这样的话北京的信息在前面,所以就能很快查到,同时造成了各个城市查询时间不一致的情况。

  考虑到这个问题,那么项目中其他功能势必会同样的影响,所以这个问题必须抓紧时间解决。

【解决过程】

   查了很多资料之后决定再做一个索引表,索引表中保存各个城市在数据库中的起始位置和终点位置,然后查询天气数据的时候就对过滤器加一个区间,使得过滤器在指定区间内查询,这样查询速度应该会快很多。

【最终效果】

  在完成所有工作之后对之前的scan设置了区间,最终实现了比较好的效果,如下:

2017-12-01 15:57:27----北京,226
2017-12-01 15:57:27----上海,107
2017-12-01 15:57:28----天津,57
2017-12-01 15:57:28----重庆,97
2017-12-01 15:57:28----黑龙江,58
2017-12-01 15:57:28----吉林,23
2017-12-01 15:57:28----辽宁,25
2017-12-01 15:57:28----内蒙古,29
2017-12-01 15:57:28----河北,288
2017-12-01 15:57:28----山西,40
2017-12-01 15:57:28----陕西,118
2017-12-01 15:57:28----山东,229
2017-12-01 15:57:28----新疆,334
2017-12-01 15:57:28----西藏,200
2017-12-01 15:57:28----青海,80
2017-12-01 15:57:29----甘肃,193
2017-12-01 15:57:29----宁夏,486
2017-12-01 15:57:29----河南,107
2017-12-01 15:57:29----江苏,90
2017-12-01 15:57:29----湖北,141
2017-12-01 15:57:29----浙江,134
2017-12-01 15:57:29----安徽,136
2017-12-01 15:57:29----福建,81
2017-12-01 15:57:29----江西,155
2017-12-01 15:57:29----湖南,129
2017-12-01 15:57:29----贵州,83
2017-12-01 15:57:29----四川,148
2017-12-01 15:57:29----广东,111
2017-12-01 15:57:30----云南,57
2017-12-01 15:57:30----广西,54
2017-12-01 15:57:30----海南,85
开始时间:  2017-12-01 15:57:25结束时间: 2017-12-01 15:57:30

  【后记】

在制作索引DAO的过程中遇到了一个问题,“org.apache.hadoop.hbase.client.ScannerTimeoutException”,另开一篇随笔叙述。

原文地址:https://www.cnblogs.com/420Rock/p/7928442.html