關於Web應用程式資料庫串連的使用

來源:互聯網
上載者:User
之前的Post掀起掀然大波,砸磚者紛至遝來好不熱鬧。之前的Post觀點不夠明確,準確,先say sorry,重新整理思路後再分別說明

觀點:對於一個WebApplication,提高整體吞吐能力,應該從提高單頁的響應能力開始,對於WebApplication使用上的一個原子操作:開啟一個頁面而言,在整個頁面的生存周期中開啟的資料連線數量越少,開閉的次數越少效率自然越高。

約束:頁面預設是同步的操作,我們在這裡約定再不採用非同步作業的時候,如果用非同步作業最佳化,那麼又是另外的問題了,會有其他的問題產生,比如當兩次操作有前因後果的關係的時候。

首先就是關於資料庫聯結的問題,我這裡用資料庫聯結而不用Connection就是為了滴水不漏,省得錯把關公當秦瓊把資料庫連接和.NET的XXConnection對象混淆起來。
這裡用代碼來說明,為了保證觀點的中性,我將使用NHibernate的實現來做例子。
這裡暫時委屈一下NHibernate暫時這樣子來用。
我們這裡面臨兩個問題資料庫連接的訪在那裡對象放在那裡,其二就是如何使用,如果按照一些人的觀點就是隨需開,在需要的時候開啟。比如

ISession vSession= mCfg.BuildSessionFactory().OpenSession();//建立會話工廠, 一般來說應該使用一個單例對象來封裝會話工廠.

              ITransaction vTransaction = vSession.BeginTransaction();//建立事物處理

              try

              {

                   vSession.Save(vEntity);//向資料庫添加資料

                   vTransaction.Commit();

                   Labmessage.Text="OK";

              }

              catch(Exception ex)

              {

                   vTransaction.Rollback();

                   Labmessage.Text="Error"+ex.ToString();

              }

              finally

              {

                   vSession.Close();

              }

這段代碼來自http://www.cnblogs.com/surprise/archive/2004/10/13/51701.aspx 

一般我們會將這段代碼放進一個處理商務邏輯的對象。裡面,當需要添加一個Entity的時候調用,當然Entity有更多的用法,不過我們在這裡就對這樣子的簡單的來做第一個例子。

那麼如果我們針對這一個簡單實體封裝了一個邏輯:添加XX(使用者資訊、Post)等,當我們需要在一個頁面操作多個的時候,就會有一個問題,一個是事務,這裡我們暫且跳開不管,然後的情況就是在這個頁面頻繁的關閉開啟了多次資料庫。

這個時候我所提出的一個頁面一個Connection的方式就是指的,將:ISession vSession= mCfg.BuildSessionFactory().OpenSession();//建立會話工廠, 一般來說應該使用一個單例對象來封裝會話工廠.

              ITransaction vTransaction = vSession.BeginTransaction();//建立事物處理

              try

              {

                商務邏輯對象.操作(vSession)
                   vTransaction.Commit();

                   Labmessage.Text="OK";

              }

              catch(Exception ex)

              {

                   vTransaction.Rollback();

                   Labmessage.Text="Error"+ex.ToString();

              }

              finally

              {

                   vSession.Close();

              }

這樣子的代碼寫在頁面上。

so,就是這個樣子了,在商務邏輯裡將操作做完了,以後不需要做資料庫操作的時候就將資料庫連接關閉,事務提交。
我不知道很多人是怎麼理解的。

就寫到這裡,等大蝦來拍磚,還有就是這樣子的代碼如果存線上程問題的話。那麼是不是應該對page_load方法這樣子的方法都要處理安全執行緒問題了?效率的問題不知道是頻繁關閉開啟資料庫來的有效率?一個建議,如果不在乎這點開銷的話也無所謂,如果為了結構上的清晰而讓步,這點我不反對,但是這個指標絕對是在最佳化效率的時候應該考慮到的
很多人在上一片post裡說這樣子做要我會死得很難看,我就不明白了,還有其他不死的很難看的方法?

之前Post的串連http://www.cnblogs.com/Alexander-Lee/archive/2007/03/31/694847.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.