在数据库频繁访问与本地处理数据之间找到一个平衡

        最近在做一个与气象有关的软件,因为气象数据大都详细到每一天的记录,而在气象各种预测或者等级评定中, 我们往往要不断的访问这些数据库,例如我要计算2006年4月的palmer指数,该指数我们以旬为基本计算单位,其中涉及到的气象观测数据很多,中间数据也多的惊人,如果我们要一次性计算出这个palmer指数,以我们大部分人用的pc机来说,完成一个地区的该指数的计算可能要等上几分钟,这对用户来说是不能忍受的(实际上气象用计算机要求要很高配置的,但穷地方却让pc做服务器,所以优化的责任落到编程人的肩上)。

    我们想到的是把一些中间结果入库,例如吧1951年到2006年每年36个旬25个站点的蒸散量数据统计出来放到一个数据库中,这样在下面的计算就方便了很多,并且这些结果也可以作为农业气象专家的参考资料。

   问题来了,一个地区56年*12旬的计算,我们要计算一次数据读取一次数据,这样,就需要间歇性地不断的访问数据库,实验证明这个方法是不可取的。

      我的办法是在本地开辟一块结构数组,将一个地区的一年的相关数据读到该结构数组中,这样,本次访问完成以后,访问数据的的次数变为原来的1/36,尤其是我们使用的才c/s结构的方式,访问次数降低以后,可以极大地提高效率,接下来的搜索,就是对数据结构进行搜索了。

   但是即使这样,那么计算该地区的该中间变量还是需要访问56次记录,一个地区56次,25个地区也是一个不小的数目,这就需要寻找一个合理的中间量,比如你一次将一个地区的全部年份的全部旬都读到缓存里,这样访问数据库的次数就降低为25次,但是,这必然导致你程序运行时变的臃肿,也是不可取的,最好的办法就是根据你的需要,合理定缓存大小。

你可能感兴趣的:(在数据库频繁访问与本地处理数据之间找到一个平衡)