|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
Access是一种桌面数据库,只适合数据量少的应用,在处理少量数据和单机访问的数据库时是很好的,效率也很高。但是它的同时访问客户端不能多于4个。access数据库有一定的极限,如果数据达到100M左右,很容易造成服务器iis假死,或者消耗掉服务器的内存导致服务器崩溃。特性:
读取机制:主动判别有没有缓存了的xml文件,当xml文件存在数据,侧从xml猎取数据,反之从数据库读取;
缓存机制:依据xml文件保存工夫和用户自界说的缓存工夫判别缓存有没有过时,过时侧保存新的xml文件;
无效削减数据库查询读取次数,缓存数据量小读取更快
修正了一下,加了两个办法,利用更便利
以下是援用片断:
代码:
<%
Remxml缓存类
’--------------------------------------------------------------------
’转载的时分请保存版权信息
’作者:t⑥月の雨r
’博客:http://chthp.cnblogs.com/
’版本:ver1.0
’本类部分自创walkmanxml数据缓存类,利用更加便利接待列位交换前进
’--------------------------------------------------------------------
ClassXmlCacheCls
Privatem_DataConn’数据源,必需已翻开
Privatem_CacheTime’缓存工夫,单元秒默许10分钟
Privatem_XmlFile’xml路径,用相对地点,不必要加扩大名
Privatem_Sql’SQL语句
Privatem_SQLArr’(只读)前往的数据数组
Privatem_ReadOn’(只读)前往读取体例1-数据库2-xml检测用
’类的属性=========================================
’数据源
PublicPropertySetConn(v)
Setm_DataConn=v
EndProperty
PublicPropertyGetConn
Conn=m_DataConn
EndProperty
’缓存工夫
PublicPropertyLetCacheTime(v)
m_CacheTime=v
EndProperty
PublicPropertyGetCacheTime
CacheTime=m_CacheTime
EndProperty
’xml路径,用相对地点
PublicPropertyLetXmlFile(v)
m_XmlFile=v
EndProperty
PublicPropertyGetXmlFile
XmlFile=m_XmlFile
EndProperty
’Sql语句
PublicPropertyLetSql(v)
m_Sql=v
EndProperty
PublicPropertyGetSql
Sql=m_Sql
EndProperty
’前往纪录数组
PublicPropertyGetSQLArr
SQLArr=m_SQLArr
EndProperty
’前往读取体例
PublicPropertyGetReadOn
ReadOn=m_ReadOn
EndProperty
’类的析构=========================================
PrivateSubClass_Initialize()’初始化类
m_CacheTime=60*10’默许缓存工夫为10分钟
EndSub
PrivateSubClass_Terminate()’开释类
EndSub
’类的大众办法=========================================
Rem读取数据
PublicFunctionReadData
IfFSOExistsFile(m_XmlFile)Then’存在xml缓存,间接从xml中读取
ReadDataFromXml
m_ReadOn=2
Else
ReadDataFromDB
m_ReadOn=1
EndIf
EndFunction
Rem写进XML数据
PublicFunctionWriteDataToXml
IfFSOExistsFile(m_XmlFile)Then’假如xml未过时则间接加入
IfNotisXmlCacheExpired(m_XmlFile,m_CacheTime)ThenExitFunction
EndIf
Dimrs
Dimxmlcontent
Dimk
xmlcontent=""
xmlcontent=xmlcontent&"<?xmlversion=""1.0""encoding=""gb2312""?>"&vbnewline
xmlcontent=xmlcontent&"<root>"&vbnewline
k=0
SetRs=Server.CreateObject("Adodb.Recordset")
Rs.openm_sql,m_DataConn,1
WhileNotrs.eof
xmlcontent=xmlcontent&"<item"
ForEachfieldInrs.Fields
xmlcontent=xmlcontent&field.name&"="""&XMLStringEnCode(field.value)&""""
Next
rs.movenext
k=k+1
xmlcontent=xmlcontent&"></item>"&vbnewline
Wend
rs.close
Setrs=Nothing
xmlcontent=xmlcontent&"</root>"&vbnewline
Dimfolderpath
folderpath=Trim(left(m_XmlFile,InstrRev(m_XmlFile,"")-1))
CallCreateDIR(folderpath&"")’创立文件夹
WriteStringToXMLFilem_XmlFile,xmlcontent
EndFunction
’类的公有办法=========================================
Rem从Xml文件读取数据
PrivateFunctionReadDataFromXml
DimSQLARR()’数组
DimXmlDoc’XmlDoc工具
DimobjNode’子节点
DimItemsLength’子节点的长度
DimAttributesLength’子节点属性的长度
SetXmlDoc=Server.CreateObject("Microsoft.XMLDOM")
XmlDoc.Async=False
XmlDoc.Load(m_XmlFile)
SetobjNode=XmlDoc.documentElement’猎取根节点
ItemsLength=objNode.ChildNodes.length’猎取子节点的长度
Foritems_i=0ToItemsLength-1
AttributesLength=objNode.childNodes(items_i).Attributes.length’猎取子节点属性的长度
ForAttributes_i=0ToAttributesLength-1
ReDimPreserveSQLARR(AttributesLength-1,items_i)
SQLArr(Attributes_i,items_i)=objNode.childNodes(items_i).Attributes(Attributes_i).Nodevalue
Next
Next
SetXmlDoc=Nothing
m_SQLArr=SQLARR
EndFunction
Rem从数据库读取数据
PrivateFunctionReadDataFromDB
Dimrs
DimSQLARR()
Dimk
k=0
SetRs=Server.CreateObject("Adodb.Recordset")
Rs.openm_sql,m_DataConn,1
IfNot(rs.eofandrs.bof)Then
WhileNotrs.eof
Dimfieldlegth
fieldlegth=rs.Fields.count
ReDimPreserveSQLARR(fieldlegth,k)
Dimfieldi
Forfieldi=0Tofieldlegth-1
SQLArr(fieldi,k)=rs.Fields(fieldi).value
Next
rs.movenext
k=k+1
Wend
EndIf
rs.close
Setrs=Nothing
m_SQLArr=SQLArr
EndFunction
’类的帮助公有办法=========================================
Rem写xml文件
PrivateSubWriteStringToXMLFile(filename,str)
Dimfs,ts
Setfs=createobject("scripting.filesystemobject")
IfNotIsObject(fs)ThenExitSub
Setts=fs.OpenTextFile(filename,2,True)
ts.writeline(str)
ts.close
Setts=Nothing
Setfs=Nothing
EndSub
Rem判别xml缓存是不是到期
PrivateFunctionisXmlCacheExpired(file,seconds)
Dimfilelasttime
filelasttime=FSOGetFileLastModifiedTime(file)
IfDateAdd("s",seconds,filelasttime)<NowThen
isXmlCacheExpired=True
Else
isXmlCacheExpired=False
EndIf
EndFunction
Rem失掉文件的最初修正工夫
PrivateFunctionFSOGetFileLastModifiedTime(file)
Dimfso,f,s
Setfso=CreateObject("Scripting.FileSystemObject")
Setf=fso.GetFile(file)
FSOGetFileLastModifiedTime=f.DateLastModified
Setf=Nothing
Setfso=Nothing
EndFunction
Rem文件是不是存在
PublicFunctionFSOExistsFile(file)
Dimfso
Setfso=Server.CreateObject("Scripting.FileSystemObject")
Iffso.FileExists(file)Then
FSOExistsFile=true
Else
FSOExistsFile=false
EndIf
Setfso=nothing
EndFunction
Remxml本义字符
PrivateFunctionXMLStringEnCode(str)
Ifstr&""=""ThenXMLStringEnCode="":ExitFunction
str=Replace(str,"<","<")
str=Replace(str,">",">")
str=Replace(str,"’","")
str=Replace(str,"""",""")
str=Replace(str,"&","&")
XMLStringEnCode=str
EndFunction
Rem创立文件夹
PrivatefunctionCreateDIR(byvalLocalPath)
OnErrorResumeNext
Dimi,FileObject,patharr,path_level,pathtmp,cpath
LocalPath=Replace(LocalPath,"","/")
SetFileObject=server.createobject("Scripting.FileSystemObject")
patharr=Split(LocalPath,"/")
path_level=UBound(patharr)
Fori=0Topath_level
Ifi=0Then
pathtmp=patharr(0)&"/"
Else
pathtmp=pathtmp&patharr(i)&"/"
EndIf
cpath=left(pathtmp,len(pathtmp)-1)
IfNotFileObject.FolderExists(cpath)Then
’Response.writecpath
FileObject.CreateFoldercpath
EndIf
Next
SetFileObject=Nothing
Iferr.number0Then
CreateDIR=False
err.Clear
Else
CreateDIR=True
EndIf
EndFunction
EndClass
’设置缓存
FunctionSetCache(xmlFilePath,CacheTime,Conn,Sql)
setcache=newXmlCacheCls
Setcache.Conn=Conn
cache.XmlFile=xmlFilePath
cache.Sql=Sql
cache.CacheTime=CacheTime
cache.WriteDataToXml
Setcache=Nothing
EndFunction
’读取缓存
FunctionReadCache(xmlFilePath,Conn,Sql,ByRefReadOn)
setcache=newXmlCacheCls
Setcache.Conn=conn
cache.XmlFile=xmlFilePath
cache.Sql=Sql
cache.ReadData
ReadCache=cache.SQLArr
ReadOn=cache.ReadOn
Setcache=Nothing
EndFunction
%>
利用办法:
1、读取数据
以下是援用片断:
代码:
<!--#includefile="include/xmlcachecls.asp"-->
strSel=""
ReadOn=0
rsArray=ReadCache(Server.Mappath("xmlcache/index/*********.xml"),Conn,strSel,ReadOn)
’response.Write("######"&ReadOn&"######<br>")测试数据从那里读取的利用时正文失落
IfIsArray(rsArray)then
fori=0toubound(rsarray,2)
*********
next
EndIf
strSel=""
rsarray=""
2、缓存数据
cache.asp以下是援用片断:
代码:
<!--#includefile="../conn.asp"-->
<!--#includefile="../include/xmlcachecls.asp"-->
Sql=""
callSetCache(Server.Mappath("../xmlcache/index/**********.xml"),60*10,Conn,Sql)’60*10暗示缓存的工夫
3、挪用
在页面底部到场,如许就不会影响页面翻开的速率
以下是援用片断:
代码:
<scripttype="text/javascript"src="cache.asp"></script>
缓存工夫,单元秒默许10分钟;也能够本人设定cache.CacheTime=60*3030分钟
SQLServer是基于服务器端的中型的数据库,可以适合大容量数据的应用,在功能上管理上也要比Access要强得多。在处理海量数据的效率,后台开发的灵活性,可扩展性等方面强大。 |
|