台灣最大程式設計社群網站
線上人數
774
 
會員總數:245220
討論主題:189091
歡迎您免費加入會員
討論區列表 >> AJAX / JSON / jQuery >> 利用ajax實現"多線程"下載資料庫以減少client等待時間
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
利用ajax實現"多線程"下載資料庫以減少client等待時間
價值 : 10 QP  點閱數:2732 回應數:2

樓主

一個頭兩個大
初級專家
1530 29
1014 297
發送站內信

1,把1000萬筆資料依創建日期排序(用一般access會自動加入的索引"ID"排多即可),然後分割成每個只有20萬筆資料的mdb檔
2,在htm檔中用javascript指示當form submit時,那些mdb的網址在哪裡,才能確保用ajax送出時,會全部mdb都有去讀取.
3,若一頁要呈現有排序過的top 20筆資料,則對每個mdb檔都取出top 20筆後傳回網頁的javascript陣列,在javascript中將它們排序後,取出top 20筆呈現給client
4,xmlhttp中,記得一定要設open為true以確保全部mdb連線能"同時"送出.(詳情請參閱:http://wiki.moztw.org/index.php/AJAX_%E4%B8%8A%E6%89%8B%E7%AF%87)

此方法雖會增加伺服器的連線負擔,讓人覺得網頁應該會變慢,但事實上應該反而會讓網頁加快,理由如下:
1,(每個)mdb檔被某個client佔用做sql處理的時間被縮短,故後面遲來的client不必等太久,前面的人就會退出來讓他進
2,即使所有mdb檔都在同一架主機上,雖然會造成伺服器的連線數倍增,但就像flashget這類多線程下載軟體一樣,雖然會造成伺服負擔增加,但郤能縮短client的等待時間達好幾倍.
3,若把mdb檔分散到不同的主機上,就能分散每台主機的連線負擔

寫入資料庫時也一樣可用多線程,例如想對ID=782的資料做更動,送出去的所有mdb連線中,只有其中一個會成功對它的mdb做更動,其它的只會傳回找不到ID的訊息來讓您忽略

以上純屬個人想出來的理論,
手邊也沒資料筆數達數百萬到數千萬的資料庫可測試,
希望有興趣測試的前輩能做測試後,能報告一下自己測出來的實驗數據(多線程設計之前跟之後的各項數據),
以方便大家瞭解此法是否真的可行,與及找出當使用access時,每個mdb的資料最多只能到多少筆,才不會讓client覺得等太久.

搜尋相關Tags的文章: [ ajax access mdb 多線程 ] ,
本篇文章發表於2006-09-17 15:32
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
點二的狀況已經抵銷掉多線程的好處了(資料傳輸量倍增50倍)
這個資料切割法並不能解決lock問題,因為最終client還是得巡完所有內容
若只看DB,或許切割能強制達到多處理序
但通常資料庫回應最有影響的還是I/O跟負載的問題
前者需要適當的索引及資料表優化調教
後者請參考有關叢集技術的平衡負載

我以為多線程好處是用在大量資料可分配傳輸之用
對於資料庫查詢往往是部分資料,可能難以達到效果

well..我也沒有維護資料庫的經驗
只有敗在1.3k萬筆資料過+小小程設師的經驗 :P
或許因為access的限制在大量資料時還是得分割吧
但最好還是在server端就做整合
client端能分攤的只有非總匯類運算
本篇文章回覆於2006-09-18 11:09
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

一個頭兩個大
檢舉此回應
失敗.

自己測試後,發現ajax中即使同時下達送出連線指令,
各連線還是會排隊去完成,只會有多個單線程輪流去完成的效果,而不會有全部同時進行連線的效果(多線程)
本篇文章回覆於2006-09-19 01:42
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.