關於B/S結構的效率, 一些看法.Re: 誰偷走了我的ejb?
>>另一公司因為使用jsp+javabeans 兩層結構,使用jdbc直連資料庫(相
>>同水平下,理論上速度應比使用ejb更快),慢的導致使用者不滿,已經
>>被中途踢掉了。
典型的把B/S結構做成了C/S結構, 而且比真真的C/S結構效率低下是肯定的.
B/S結構怎麼能和C/S結構比較呢??? 讓我們來比較這樣作兩者的結構把
這種B/S結構其實就是Browers--->Java(JSP+Java Bean+JDBC)--->DB的結構, 而其中肯定沒有加諸如快取等等增強效能的設計. 在這種情況下其實和C/S結構透過ODBC或者其他直接訪問資料庫是沒有任何區別的.
在用B/S結構做過幾箇中型企業資訊話專案(白天平均線上人數80左右),剛開始我們也是這樣設計的, 效率的確成問題, 還好因為我的設計中使用了DAO和VO模式, 所以在第一個專案的後期在DAO統一加入了快取, 這才提高了大部分的效率, 讓整個專案透過了驗收. 如果這個專案沒有使用DAO/VO模式, 估計肯定死掉.
透過這幾個專案對於B/S結構的效率, 我有一些體會
1.提高效率的基礎 (沒有基礎, 談不上最佳化效率, 只不過是小打小鬧)
首先是技術構架要合理, 如果技術構架不合理, 那麼就很難找到提高效率的地方和方式. 至於上面那種結構,幾乎沒有技術構架可言.如果技術構架不合理, 不管你如何最佳化自己的程式都是不可能的大幅度的提高效率的.
其次是資料庫設計, 這是另外一個重要的方面, 在資料庫設計需要考慮本身的效率和功能實現時的效率, 而且希望能以簡單為主,比如說表之間的關聯關係等等. 大家都應該知道同樣的資料量下, 5個表的關聯查詢比3個表的要慢(只是一個例子). 在我開發的一個專案中, 給遇見過因為資料庫設計不好導致效率低下, 不論我怎麼最佳化程式都無濟於事, 隨後重新設計了資料庫結構, 簡化了設計. 在其中我們還有一個很極端的做法, 一些常用資料時重複的, 比如說一個表關聯了使用者表, 那麼在這張表裡出了有ID欄位, 還有使用者姓名的欄位.
關於B/S結構下的資料庫還有一個問題就是java開發人員不注意SQL語句,而且不管自己的SQL語句效率如何,只要資料正確,這是一個大問題,在我原來(我現在失業了^_^)專案小組中,就有這樣的人, 因為一個SQL語句導致整個系統崩潰也是發生過的. 所以建議所有的java程式設計師補一補資料庫的知識, 特別是資料庫設計和SQL語句.
如果說上面還不能解決問題, 那麼就必須考慮對資料庫進行專門的最佳化或者資料庫叢集.
最後是程式設計師個人的程式設計能力.
2.提高B/S結構效率的總體方向
最主要的方向是平衡 App Server和DB Server的執行壓力.
不知道有多少B/S結構在開始的時候比較過App Server和DB Server佔用的系統資源, 可以試著把兩者分開放到兩個服務其上, 在上面提到的jsp+javabeans 兩層結構中, 你肯定可以發現, App Server其實很輕閒, 而DB Server卻很忙. 當然如果在這種結構下,如果反問次數不多, 卻發現App Server系統資源佔用率很高的話, 哪不用說, 肯定是系統結構不合理或者就是程式效率低下.
我作過這個比較, 在大量人員訪問的情況下, 一般DB Server幾乎滿負荷運轉, 而App Server去沒有使用太多的系統資源.
所以如何平衡兩者之間, 真真的把App Server利用起來是主要方向, 這樣才能體現出App Server的優勢.
在平衡了兩者之間的執行壓力以後, 如果還出現了大的效率問題, 那麼只能使用提高硬體, 使用叢集等等方式來提高效率了.
3.很好利用App Server的幾種方法(以為實踐的java技術有限,所以只能提出這幾種, 希望各位高手能在提供一些)
(Connection pool等等常用的就不提了)
a. 快取, 這是必不可少的, 把一些常用的資料從資料庫中提取出來, 然後放在快取中,這樣可以減少訪問資料庫的次數, 加快讀取速度. 我在具體實踐是使用的是DAO模式和Hibernate, 使用hibernate的快取機制對常用單條記錄進行快取, 使用jcs, 自己寫程式, 對常用的資料列表(比如人員列表)作快取
b. 靜態頁面, 在實際工作中, 有些資料長時間是不會發生改變, 這種情況下我就會考慮把這些資料儲存為靜態頁面.本來是打算儲存為XML檔案的, 但是一直沒有時間作
c. JMS 把一些同步處理改為非同步處理, 加快反應速度, 把一些處理放到App Server空閒時來執行.
關於EJB, 在使用hibernate以後我基本上不再使用EJB, 因為不管是對開發人員的培訓和高效的使用我都沒有把握. 因為我自己對ejb就不是很精通, 至於它好與不好, 我沒有太大的感覺. 也不想去討論.
透過我自己的一些總結,希望大家能就如果增強B/S的效率展開討論.
>>同水平下,理論上速度應比使用ejb更快),慢的導致使用者不滿,已經
>>被中途踢掉了。
典型的把B/S結構做成了C/S結構, 而且比真真的C/S結構效率低下是肯定的.
B/S結構怎麼能和C/S結構比較呢??? 讓我們來比較這樣作兩者的結構把
這種B/S結構其實就是Browers--->Java(JSP+Java Bean+JDBC)--->DB的結構, 而其中肯定沒有加諸如快取等等增強效能的設計. 在這種情況下其實和C/S結構透過ODBC或者其他直接訪問資料庫是沒有任何區別的.
在用B/S結構做過幾箇中型企業資訊話專案(白天平均線上人數80左右),剛開始我們也是這樣設計的, 效率的確成問題, 還好因為我的設計中使用了DAO和VO模式, 所以在第一個專案的後期在DAO統一加入了快取, 這才提高了大部分的效率, 讓整個專案透過了驗收. 如果這個專案沒有使用DAO/VO模式, 估計肯定死掉.
透過這幾個專案對於B/S結構的效率, 我有一些體會
1.提高效率的基礎 (沒有基礎, 談不上最佳化效率, 只不過是小打小鬧)
首先是技術構架要合理, 如果技術構架不合理, 那麼就很難找到提高效率的地方和方式. 至於上面那種結構,幾乎沒有技術構架可言.如果技術構架不合理, 不管你如何最佳化自己的程式都是不可能的大幅度的提高效率的.
其次是資料庫設計, 這是另外一個重要的方面, 在資料庫設計需要考慮本身的效率和功能實現時的效率, 而且希望能以簡單為主,比如說表之間的關聯關係等等. 大家都應該知道同樣的資料量下, 5個表的關聯查詢比3個表的要慢(只是一個例子). 在我開發的一個專案中, 給遇見過因為資料庫設計不好導致效率低下, 不論我怎麼最佳化程式都無濟於事, 隨後重新設計了資料庫結構, 簡化了設計. 在其中我們還有一個很極端的做法, 一些常用資料時重複的, 比如說一個表關聯了使用者表, 那麼在這張表裡出了有ID欄位, 還有使用者姓名的欄位.
關於B/S結構下的資料庫還有一個問題就是java開發人員不注意SQL語句,而且不管自己的SQL語句效率如何,只要資料正確,這是一個大問題,在我原來(我現在失業了^_^)專案小組中,就有這樣的人, 因為一個SQL語句導致整個系統崩潰也是發生過的. 所以建議所有的java程式設計師補一補資料庫的知識, 特別是資料庫設計和SQL語句.
如果說上面還不能解決問題, 那麼就必須考慮對資料庫進行專門的最佳化或者資料庫叢集.
最後是程式設計師個人的程式設計能力.
2.提高B/S結構效率的總體方向
最主要的方向是平衡 App Server和DB Server的執行壓力.
不知道有多少B/S結構在開始的時候比較過App Server和DB Server佔用的系統資源, 可以試著把兩者分開放到兩個服務其上, 在上面提到的jsp+javabeans 兩層結構中, 你肯定可以發現, App Server其實很輕閒, 而DB Server卻很忙. 當然如果在這種結構下,如果反問次數不多, 卻發現App Server系統資源佔用率很高的話, 哪不用說, 肯定是系統結構不合理或者就是程式效率低下.
我作過這個比較, 在大量人員訪問的情況下, 一般DB Server幾乎滿負荷運轉, 而App Server去沒有使用太多的系統資源.
所以如何平衡兩者之間, 真真的把App Server利用起來是主要方向, 這樣才能體現出App Server的優勢.
在平衡了兩者之間的執行壓力以後, 如果還出現了大的效率問題, 那麼只能使用提高硬體, 使用叢集等等方式來提高效率了.
3.很好利用App Server的幾種方法(以為實踐的java技術有限,所以只能提出這幾種, 希望各位高手能在提供一些)
(Connection pool等等常用的就不提了)
a. 快取, 這是必不可少的, 把一些常用的資料從資料庫中提取出來, 然後放在快取中,這樣可以減少訪問資料庫的次數, 加快讀取速度. 我在具體實踐是使用的是DAO模式和Hibernate, 使用hibernate的快取機制對常用單條記錄進行快取, 使用jcs, 自己寫程式, 對常用的資料列表(比如人員列表)作快取
b. 靜態頁面, 在實際工作中, 有些資料長時間是不會發生改變, 這種情況下我就會考慮把這些資料儲存為靜態頁面.本來是打算儲存為XML檔案的, 但是一直沒有時間作
c. JMS 把一些同步處理改為非同步處理, 加快反應速度, 把一些處理放到App Server空閒時來執行.
關於EJB, 在使用hibernate以後我基本上不再使用EJB, 因為不管是對開發人員的培訓和高效的使用我都沒有把握. 因為我自己對ejb就不是很精通, 至於它好與不好, 我沒有太大的感覺. 也不想去討論.
透過我自己的一些總結,希望大家能就如果增強B/S的效率展開討論.
相關文章
- 關於我對c#的一些看法C#
- 關於機器學習的一些看法機器學習
- 關於蘋果銷量的一些看法蘋果
- 關於面試的一些個人看法面試
- 故障分析 | 是誰偷走了我的 IO
- 關於Jpa和Mybatis的一些看法MyBatis
- 關於IT培訓機構的個人看法
- C/S結構與B/S結構的特點分析
- C/S結構下呼叫EJB的問題
- 我對軟體架構的一些看法和思考架構
- 關於博彩門事件的一些看法和自己的一些事事件
- C/S和B/S結構
- 對Banq大哥的"EJB3與EJB2架構對比"一文發表一些看法架構
- 我對技術潮流的一些看法
- 能否使用B/S結構實現所有C/S結構軟體的功能
- 關於效率、程式與生活的一些思考
- 關於RE
- 你偷走了我的Apple Watch 也帶走了我的心APP
- C/S和B/S結構區別整理
- 關於效率的一些思考:節點創新
- 關於UI自動化技術及測試的一些看法UI
- 關於學習 Linux 系統結構的一些總結Linux
- 關於spring + ejb進行組合的一些疑問Spring
- 我對女生做程式設計師的一些看法程式設計師
- 關於C#、java泛型的看法C#Java泛型
- 關於學習-Linux-系統結構的一些總結Linux
- 關於開源軟體和閉源軟體我個人Naive的看法AI
- B/S和C/S架構的比較架構
- 關於反射的一點不成熟的看法反射
- 我對工程師轉市場的一些個人看法工程師
- 關於Mysql使用的一些總結MySql
- MySql關於鎖的一些總結MySql
- 關於繼承的一些小總結繼承
- 關於EM配置的一些總結
- 關於BUFFER POOL的一些總結
- 關於Oracle塊的一些總結Oracle
- 關於結構體中指標的一些探討結構體指標
- 關於工廠模式的一點個人看法模式