七彩课堂[网页设计教程系列]
采用多个相同数据库减轻了数据库的压力
   第一种:
以上部分全文转载无修改。前几天采集了一个3万6千数据,但是发现空闲的主机上已经没有数据库空间了,转换为mdb后,产生了一个巨大的网站,现在经常宕机。
总而言之,如果使用access作为网站的数据库,集中生产HTML页面的时候,是很痛苦的。
Private Function UnionRs(rsA As Recordset, rsB As Recordset) As Recordset
Dim rs As New Recordset, i%
For i = 0 To rsA.Fields.Count - 1
'设置记录集标题列
rs.Fields.Append rsA.Fields(i).Name, rsA.Fields(i).Type, adFldMayBeNull + adFldIsNullable + adFldUpdatable
Next
'添加rsA到rs
If Not rsA.EOF Then
rsA.MoveFirst
If rs.State = adStateClosed Then rs.Open
While Not rsA.EOF
rs.AddNew
For i = 0 To rs.Fields.Count - 1
rs(i) = rsA(i)
Next
rsA.MoveNext
Wend
rs.UpdateBatch
End If
'添加rsB到rs
If Not rsB.EOF Then
rsB.MoveFirst
If rs.State = adStateClosed Then rs.Open
While Not rsB.EOF
rs.AddNew
For i = 0 To rs.Fields.Count - 1
rs(i) = rsB(i)
Next
rsB.MoveNext
Wend
rs.UpdateBatch
End If
'返回合成后的新的记录集
Set UnionRs = rs
End Function
'调用合并函数
Private Sub Command1_Click()
Dim rs As Recordset
Set rs = UnionRs(rsA, rsB) '合并rsA和rsB
Set DataGrid1.DataSource = rs
End Sub
第二种:
当记录条数很多的时候,用循环的方法确实比较慢,比较快一点的,可以借助临时表来做:
假设你的两个数据库位置为:C:\testA.mdb和C:\testB.mdb
Dim cnA As New ADODB.Connection, cnB As New ADODB.Connection, rs As New ADODB.Recordset
cnA.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\TestA.mdb;User Id=admin;Password=;"
cnB.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\TestB.mdb;User Id=admin;Password=;"
cn.Execute ("select * into temp from tableA") '把tableA的数据插入到临时表temp里(具体的查询数据的语句自己改)
cn1.Execute ("INSERT INTO [C:\testA.mdb].temp SELECT * From tableB") 'tableB的数据追加testA的临时表temp里(具体的查询数据的语句自己改)
rs.Open "temp", cnA, adOpenDynamic, adLockReadOnly, adCmdTable
采用多个相同数据库,访问时随机选择数据库。
这个相对来说方便一点,不过不会减少数据库的体积,而是减少数据库的连接数。
也在一定程度上减轻了数据库的压力。
灵感来自镜像站点的访问。
conn.asp(通常为数据库文件)里面加个随机数。。
例如有10个相同数据库,那么随机小于10的整数就OK。
这样以前一个数据库的压力会分配给10个数据库。
虽然不一定平均。。(如果你算法不错,做到平均也不难)
记得后台要有个克隆数据库的操作选项,当然手工也可以。
 
信息推荐
资讯中心 | 电子商务 | 搜索营销 | 设计学院 | 中医养生 | 养生保健 | 节日祝福 | 民俗文化 | 奇闻趣事
建站知识 | 人世百态 | 网站导航 | 传统节日 | 搜索热点 | 星座运势 | 趣闻轶事 | 祝福的话 | 短信大全
© 2023 QicaiSpace.Com