[轉載]Java 性能優化技巧集錦(4)

http://tech.ccidnet.com/pub/article/c1077_a199225_p4.html
marginwidth="0" marginheight="0" src="http://tech.ccidnet.com/pub/html/tech_pip2.html" frameborder="0" width="365" scrolling="no" height="300">13. JDBC與I/O

如果應用程序需要訪問一個規模很大的數據集,則應當考慮使用塊提取方式。默認情況下,JDBC每次提取32行數據。舉例來說,假設我們要遍歷一個5000行的記錄集,JDBC必須調用數據庫157次才能提取到全部數據。如果把塊大小改成512,則調用數據庫的次數將減少到10次。在一些情形下這種技術無效。例如,如果使用可滾動的記錄集,或者在查詢中指定了FOR UPDATE,則塊操作方式不再有效。

14. 內存數據庫

許多應用需要以用戶爲單位在會話對象中保存相當數量的數據,典型的應用如購物籃和目錄等。由於這類數據可以按照行/列的形式組織,因此,許多應用創建了龐大的Vector或HashMap。在會話中保存這類數據極大地限制了應用的可伸縮性,因爲服務器擁有的內存至少必須達到每個會話佔用的內存數量乘以併發用戶最大數量,它不僅使服務器價格昂貴,而且垃圾收集的時間間隔也可能延長到難以忍受的程度。

一些人把購物籃/目錄功能轉移到數據庫層,在一定程度上提高了可伸縮性。然而,把這部分功能放到數據庫層也存在問題,且問題的根源與大多數關係數據庫系統的體系結構有關。對於關係數據庫來說,運行時的重要原則之一是確保所有的寫入操作穩定、可靠,因而,所有的性能問題都與物理上把數據寫入磁盤的能力有關。關係數據庫力圖減少I/O操作,特別是對於讀操作,但實現該目標的主要途徑只是執行一套實現緩衝機制的複雜算法,而這正是數據庫層第一號性能瓶頸通常總是CPU的主要原因。

一種替代傳統關係數據庫的方案是,使用在內存中運行的數據庫(In-memory Database),例如TimesTen。內存數據庫的出發點是允許數據臨時地寫入,但這些數據不必永久地保存到磁盤上,所有的操作都在內存中進行。這樣,內存數據庫不需要複雜的算法來減少I/O操作,而且可以採用比較簡單的加鎖機制,因而速度很快。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章