zoukankan      html  css  js  c++  java
  • 毕设开发日志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”,另开一篇随笔叙述。

  • 相关阅读:
    Python基础语法精讲
    使用xlwt 库将数据导入为Excel 表格
    统计指定目录下所有mp4文件的时长(包含子目录下的文件)
    获取一个目录下所有文件(完整路径,要借助os.path.join()方法)
    中国参与MOOC 建设的大学有多少所?
    蒙特卡洛方法应用
    手欠,起了一卦,看那房子的风水,悲剧了
    好无聊,大半夜地找了份传世服务端源码,编着玩
    昨晚房屋的风水
    上午,写了个小东西
  • 原文地址:https://www.cnblogs.com/420Rock/p/7928442.html
Copyright © 2011-2022 走看看