前段时间的一些突发事件促使我在Z-Blog中发现了一个非常严重的特性问题,那就是当每篇文章都有几十万的日浏览量时,会有很多高并发的客户写Access数据库,导致数据库死锁,未来外在的主要表现就是CPU占有量激增。
分析了Z-Blog的代码,发现原因是大高的并发客户端写了另一个数据库。
这里我想到一个解决这个问题的办法,就是及时缓存文件,定时写数据库。在一定时间内,数据信息只写入运行内存,不写入数据库。当缓存文件的时间到了,运行内存的数据信息被写入数据库。这样,无论并发性有多大,都不会再有数据库死锁。
经过基本的代码修改和检测,发现修改后没有这个问题。
要修改它,打开函数文件目录下的c_html_js.asp文件,将UpdateCountInfo函数修改为下面的代码。
复制下面的代码:
函数更新计数信息(ID)
Dimstr上次更新
Dimintarticlecount
Dimaryaarticlecount
DimobjRS
应用程序。lock
strlastupdate=Application(ZC博客CLSID&"LAST_UPDATE")
aryaarticlecount=Application(ZC_博客_CLSID&"CACHE_ARTICLE_viewcount")
aryaarticlecount(id)=aryaarticlecount(id)1
Application(ZC_博客_CLSID&"CACHE_ARTICLE_viewcount")=aryalticlecount
应用程序。解锁
如果IsEmpty(strLastUpdate)或NotIsDate(strLastUpdate),则
应用程序。锁定应用程序(ZC_博客_CLSID&"LAST_UPDATE")=Now()
strlastUPDATE=Application(ZC_博客_CLSID&"LAST_UPDATE")
应用程序。解锁
EndIf
IfDateDiff("s",strLastUpdate,Now())>;3然后
'如果获取的当前时间与先前存储的标记值之间的时间差超过设定的间隔时间,则将标记值写入数据库
callopenconnect()
setobjRS=objconn.execute("select[log_id],[log_viewnumbers]from[blog]id)
If(notobjRS.BOF)And(notobjRS.eof)然后
intarticlecount=objRS("log_viewnumsclose
SetobjRS=Nothing
Ifaryalticlecount(id)>;inarticlecountThen
objconn。execute("UPDATE[blog_Article]SET[log_ViewNums]="&;CStr(aryalticlecount(id))&;其中[log_ID]="&;id)
应用程序。锁定应用程序(ZC博客CLSID&LAST_UPDATE")=Now()
应用程序。解锁
Else
aryaarticlecount(id)=intArticleCount
应用程序。锁定应用程序(ZC博客CLSID&CACHE_ARTICLE_viewcount")=aryalticlecount
应用程序。解锁
EndIf
调用closeconnect()
EndIf
End函数
[/br/]另外,默认的Z-Blog留言板评估并不显示客户的IP地址信息。根据一些修改,它可以改善留言板中前三名客户IP地址的显示信息。实际完成方法如下。
修改c_system_lib.asp文件的公共函数maketemplate(strc)函数,添加以下句子:
复制以下代码:
redimArytemplattagname(12)
redimArytemplattagname(12)
Arytemplattagname(12)="article/comment/IP"/br/]ifauthorid=1then
arytemplattagsvalue(12)="]..”)"*"
endif
修改TArticle的函数Export_CMTandTB()函数将objcomment.loadinfobyarray(array(objRS("comm_id")、objrs("log_id")、objRS("comm_AuthorID")、objRS("comm_Author")、objRS("comm_Content")、objRS("comm_Email")、objRS("comm_HomePage")、objRS("comm_PostTime")、""、"")改为objcomment.loadinfoObjrs("comm_email")、objrs("comm_homepage")、objrs("comm_posttime")、objrs("comm_IP")、"")
修改b_article_comment.html并改进<#article/comment/IP#>;身份证明。
以后在文章内容的评价中会出现评论者的IP地址栏,但有一个问题是,当有人回答是时,只剩下最后一个回答者的IP地址。(全文)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)