当前位置:编程学习 > asp >>

asp里面G级Access数据库的网站如何优化

如果做企业站,ASP+Access是一个最佳选择。但是如果Access的数据库达到G级别,那么性能可能就会大大的下降。如果数据库没有优化,打开asp页面几秒是常有的事情。如果一个Access表内几十万条数据,恰巧ASP页面又有几十个查询,可能就悲剧了。网站打开时间要按分钟计算了。

Asp+Access以前数据量少的时候,没有任何问题。数据量一大,各种麻烦的问题就多了起来。总不能让客户等几分钟打开首页把。

最早的解决方案是将index.asp修改成index.res.asp,用XMLHTTP请求index.res.asp,将结果保存为文件、调用时间到文件,然后调用文件的内容,和时间,如果超时后,重新调用。

这种方案也用了很久,虽然解决了问题,但是效果仍不理想。多人同时访问的时候(经常,页面打开很慢),恰巧内容又超时了。仍然会出现服务器宕机的情况。

今天服务器有出现问题,实在受不了,为数据增加索引,效果仍然不明显。想到可以用Application来保存网页缓存。速度有提高,但是离理想的效果还是差很远。决心大改动,从18点~23点,耗时五个钟头,终于做出了一套比较完美的方案。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function is_cache(na)
'http://www.zhaoxi.org/
    if application("catseven_cache_" & na) = "" then
        is_cache = false
    else
        if not isdate(application("catseven_cachetime_" & na)) then
            is_cache = false
        else
            da = cdate(application("catseven_cachetime_" & na))
            if datediff("n",da,now()) > 60 then
                is_cache = false
            else
                is_cache = true
            end if
        end if
    end if
end function
 
function do_cache(na,va)
    application("catseven_cache_" & na) = va
    randomize()
    application("catseven_cachetime_" & na) = dateadd("s",cLng(rnd()*6000),now())
end function
 
function ech_cache(na)
    response.write application("catseven_cache_" & na)
end function

na是缓存名,不可重复

1
2
3
4
5
6
call cachename = "miaoqiyuan"
if not is_cache(cachename) then
    '执行代码(即以前的代码),结果保存为 tmpstring
    call do_cache(cachename,tmpstring)
end if
call ech_cache(cachename)

运行情况如下图所示。

第一个用户完整访问完一次后,其他用户不用读取数据库,直接访问缓存。

在第一个用户访问期间,如果有其他用户访问,已经缓存的部分,也无需读取数据库。所以仅在启动程序池的时候速度会较慢,以后的访问者访问速度会越来越快(已完成的缓存越来越多)。

假如仅一个人访问,一个小时后,缓存超时,再次访问,仍可能出现访问较慢。所以在保存缓存的时候增加了随机到期时间来提高访问速度。缓存有效期是50~60分钟不等。

本文猫七原创,转帖请注明来自苗启源的博客:http://www.miaoqiyuan.cn

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,