現在正在做項目代碼最佳化工作。
對於某些固定資料的獲得方法主要有如下兩種:
(1) 從資料庫(oracle)相應table讀取;
(2) 從設定檔(properties檔案)中讀取(將相應資料寫到txt檔案中準備好,使用時從txt檔案中獲得)
設定檔:
XXX.properties:
industry+0-I=%:所有行業;A:農、林、牧、漁業;B:採掘業;C:製造業;D:電力、瓦斯及水的生產和供應業;。。
area+0=%:所有地區;11:北京;12:天津;13:河北;14:山西;15:內蒙古;21:遼寧;22:吉林;23:黑龍江;。。。
level+0=0:所有等級;1:AAA;2:AA+;3:AA;4:AA-;5:A+;6:A;7:A-;8:BBB+;9:BBB;10:BBB-;11:BB+;12:BB;13:BB-;14:B;15:CCC
servlet中測試耗時的資料庫讀取、設定檔讀取代碼:
long begin1 = System.currentTimeMillis();
List<GradeVo> grades = gradeBussiness.getALLGrade();
List<IndustryVo> industrys = industryBussiness.getAllIndustrys();
List<AreaVo> areas = areaBussiness.getAllAreas();
request.setAttribute("grades", grades);
request.setAttribute("industrys",industrys);
request.setAttribute("areas", areas);
long end1 = System.currentTimeMillis();
long totalTime1 = end1 - begin1;
System.out.println("取庫共用時:"+totalTime1);
long begin2 = System.currentTimeMillis();
request.setAttribute("industrySelectStr", XXXXUtil.makeSelect("industry", "industry", "industry+0-I", "%", ""));
request.setAttribute("areaSelectStr", XXXXUtil.makeSelect("area", "area", "area+0", "%", ""));
request.setAttribute("companyLevelSelectStr", XXXXUtil.makeSelect("companyLevel", "companyLevel", "level+0", "%", "companyLevelChange()"));
long end2 = System.currentTimeMillis();
long totalTime2 = end2 - begin2;
System.out.println("取設定檔共用時:"+totalTime2);
運行結果:
取庫共用時:235
取設定檔共用時:0
耗時差別很大!!!
沒有關閉tomcat,將再次訪問此servlet:
取庫共用時:266
取設定檔共用時:0
注意:
以上讀取資料庫的過程中,每次資料的讀取都進行了jdbc串連、資料查詢擷取、串連關閉(暫時項目沒有使用串連池)。
結論:
對於某些值固定的資料,“讀取預先寫入到設定檔中的資料速度”優於“讀取資料庫中的資料速度”。
——前提:在設定檔中的資料不是很多的情況下沒問題,至於設定檔資料量達到nM的情況,以後進行測試。
網路資料:
I/0讀寫快還是插入資料庫快
http://www.javaeye.com/problems/30594
io寫硬碟
優勢:本地檔案系統,不需要通過jdbc驅動序列化進行網路傳輸,不存在網路問題
劣勢:跟硬碟效能有關,沒有最佳化(當然自己可以封裝,例如:使用記憶體緩衝,然後批量觸發,但這樣會佔用少量記憶體資源,也比較麻煩)
存資料庫
優勢:如果串連已經存在,用戶端無需關心服務端的處理(cilent發送過去 ->服務端緩衝-〉結束),無需像寫硬碟等待寫入結束。自己負責事情少,檢索方便!
劣勢:網路問題,如果串連不存在,有串連資料庫的開銷
[精彩] 讀寫檔案不是效率很低的嘛,那麼資料庫為何效率高呢
http://www.chinaunix.net/jh/23/527591.html:
正常情況讀寫檔案系統比資料庫快一到兩個資料級
資料庫的查詢,大量並發的時候可能最浪費時間的是connect和close,資料庫的優勢是體現的大量資料的查詢、統計以及並發讀寫,不是在速度上.
以 Oracle 為例
1。讀
使用資料庫有時候比file 要慢
比如說第一次使用某個資料時,Oracle肯定會比直接讀file慢
但是,如果第二次要用到這個資料,Oracle直接從mem裡讀取,這樣就比file要快
2。寫
Oracle對data update / insert 的確是可以延遲寫到磁碟的
它是先在mem裡作修改,再由專門的dbwr 來寫資料到磁碟。
3。個人認為,資料庫和檔案並不存在可比性
用檔案,很難實現sql語句。
但是,使用資料庫會耗用更多的系統資源。