关于Web应用程序数据库连接的使用
生活随笔
收集整理的這篇文章主要介紹了
关于Web应用程序数据库连接的使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
之前的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
觀點:對于一個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
總結
以上是生活随笔為你收集整理的关于Web应用程序数据库连接的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 人民币存款利率表
- 下一篇: 《互联网项目运营分析》第四章 :互联网项