剛看了 Chris Tacke 的
《Improving Data Access Performance with Data Caching》
一文,回想起以前做過的一些項目,對數據緩存在提高數據訪問性能方面的作用頗有感受,跟大家分享一下。
我們在開發 MIS 項目時,要跟各種業務和數據在打交道。其中數據可以根據它們的用途,分為業務數據和參考數據兩種。業務數據是業務的信息載體,如:采購進貨單、銷售出貨單、盤點單等。參考數據是業務數據組成部分,如:度量單位、顏色、城市等。參考數據在英文里面通常叫 Lookup Data 或 Reference Data,它們是在系統中使用頻率很高的一類數據。因此,這類數據的訪問性能將會影響整個系統的用戶體驗。那么,如何提高 lookup data 的訪問性能呢?
Chris Tacke 在他的文章中分析了三種數據訪問方式。前兩種訪問方式差不多,主要區別在于:第一種在每次訪問數據庫時都會打開和關閉數據庫連接;而第二種是在系統緩存一個數據庫連接對象,每次使用后不關閉它。我相信大家都會認為第二種方式在頻繁訪問數據庫時性能更優,因為打開一個數據庫連接是比較耗系統資源的。然而結果卻讓人出乎意料,這兩種方式的性能很接近,甚至第二種方式性能還更好。
測試結果1:
Device |
Processor |
Mean Execution (ms)* |
OLDI SAM-L8 |
800MHz Geode x86 |
7.5 to 9.5 |
iCOP eBox 2300 |
200MHz Vortex86 |
47 to 52 |
Dell Axim x51 |
416MUz Intel PXA270 |
38 to 62 |
測試結果2:
Device |
Processor |
Mean Execution (ms) |
OLDI SAM-L8 |
800MHz Geode x86 |
7.1 to 14.8 |
iCOP eBox 2300 |
200MHz Vortex86 |
51 to 52 |
Dell Axim x51 |
416MUz Intel PXA270 |
43 to 61 |
第三種方式利用數據緩存機制,在第一次獲取數據時,將數據加載到一個Hashtable中,然后再返回。以后就直接從緩存獲取數據。第三種方式的性能跟前面兩種相比差了十萬八千里呀!
測試結果3:
Device |
Processor |
Mean Execution (ms) |
OLDI SAM-L8 |
800MHz Geode x86 |
0.0193 to 0.0201 |
iCOP eBox 2300 |
200MHz Vortex86 |
0.1014 to 0.1164 |
Dell Axim x51 |
416MUz Intel PXA270 |
0.0975 to 0.1437 |
在以前做過的一些項目中,也是采用了類似的緩存機制來提高數據訪問性能,效果確實明顯。不過,要特別注意緩存數據的更新問題!在更新了數據庫中的 lookup data 時,別忘了內存中的緩存數據也需要更新。
Chris Tacke 的文章還提供示例代碼和PDF格式下載:
Download the Source Code
Download the PDF
另外,Chris Tacke 說他們在那個項目中還開發了一個運行在 Windows CE 的輕量級 ASP.NET Web 服務器,用來展現報表,在后續文章中會詳細介紹它的實現,期待ing...
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
