关于Web应用程序数据库连接的使用
生活随笔
收集整理的這篇文章主要介紹了
关于Web应用程序数据库连接的使用
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
之前的Post掀起掀然大波,砸磚者紛至沓來好不熱鬧。之前的Post觀點(diǎn)不夠明確,準(zhǔn)確,先say sorry,重新整理思路后再分別說明
觀點(diǎn):對(duì)于一個(gè)WebApplication,提高整體吞吐能力,應(yīng)該從提高單頁的響應(yīng)能力開始,對(duì)于WebApplication使用上的一個(gè)原子操作:打開一個(gè)頁面而言,在整個(gè)頁面的生存周期中打開的數(shù)據(jù)連接數(shù)量越少,開閉的次數(shù)越少效率自然越高。
約束:頁面默認(rèn)是同步的操作,我們?cè)谶@里約定再不采用異步操作的時(shí)候,如果用異步操作優(yōu)化,那么又是另外的問題了,會(huì)有其他的問題產(chǎn)生,比如當(dāng)兩次操作有前因后果的關(guān)系的時(shí)候。
首先就是關(guān)于數(shù)據(jù)庫聯(lián)接的問題,我這里用數(shù)據(jù)庫聯(lián)接而不用Connection就是為了滴水不漏,省得錯(cuò)把關(guān)公當(dāng)秦瓊把數(shù)據(jù)庫連接和.NET的XXConnection對(duì)象混淆起來。
這里用代碼來說明,為了保證觀點(diǎn)的中性,我將使用NHibernate的實(shí)現(xiàn)來做例子。
這里暫時(shí)委屈一下NHibernate暫時(shí)這樣子來用。
我們這里面臨兩個(gè)問題數(shù)據(jù)庫連接的訪在那里對(duì)象放在那里,其二就是如何使用,如果按照一些人的觀點(diǎn)就是隨需開,在需要的時(shí)候打開。比如
ISession?vSession=?mCfg.BuildSessionFactory().OpenSession();//創(chuàng)建會(huì)話工廠,?一般來說應(yīng)該使用一個(gè)單例對(duì)象來封裝會(huì)話工廠.
??????????????ITransaction?vTransaction?=?vSession.BeginTransaction();//創(chuàng)建事物處理
??????????????try
??????????????{
???????????????????vSession.Save(vEntity);//向數(shù)據(jù)庫添加數(shù)據(jù)
???????????????????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?
一般我們會(huì)將這段代碼放進(jìn)一個(gè)處理業(yè)務(wù)邏輯的對(duì)象。里面,當(dāng)需要添加一個(gè)Entity的時(shí)候調(diào)用,當(dāng)然Entity有更多的用法,不過我們?cè)谶@里就對(duì)這樣子的簡單的來做第一個(gè)例子。
那么如果我們針對(duì)這一個(gè)簡單實(shí)體封裝了一個(gè)邏輯:添加XX(用戶信息、Post)等,當(dāng)我們需要在一個(gè)頁面操作多個(gè)的時(shí)候,就會(huì)有一個(gè)問題,一個(gè)是事務(wù),這里我們暫且跳開不管,然后的情況就是在這個(gè)頁面頻繁的關(guān)閉打開了多次數(shù)據(jù)庫。
這個(gè)時(shí)候我所提出的一個(gè)頁面一個(gè)Connection的方式就是指的,將:
ISession?vSession=?mCfg.BuildSessionFactory().OpenSession();//創(chuàng)建會(huì)話工廠,?一般來說應(yīng)該使用一個(gè)單例對(duì)象來封裝會(huì)話工廠.
??????????????ITransaction?vTransaction?=?vSession.BeginTransaction();//創(chuàng)建事物處理
??????????????try
??????????????{
????????????????業(yè)務(wù)邏輯對(duì)象.操作(vSession)
???????????????????vTransaction.Commit();
???????????????????Labmessage.Text="OK";
??????????????}
??????????????catch(Exception?ex)
??????????????{
???????????????????vTransaction.Rollback();
???????????????????Labmessage.Text="Error"+ex.ToString();
??????????????}
??????????????finally
??????????????{
???????????????????vSession.Close();
??????????????}
這樣子的代碼寫在頁面上。
so,就是這個(gè)樣子了,在業(yè)務(wù)邏輯里將操作做完了,以后不需要做數(shù)據(jù)庫操作的時(shí)候就將數(shù)據(jù)庫連接關(guān)閉,事務(wù)提交。
我不知道很多人是怎么理解的。
就寫到這里,等大蝦來拍磚,還有就是這樣子的代碼如果存在線程問題的話。那么是不是應(yīng)該對(duì)page_load方法這樣子的方法都要處理線程安全問題了?效率的問題不知道是頻繁關(guān)閉打開數(shù)據(jù)庫來的有效率?一個(gè)建議,如果不在乎這點(diǎn)開銷的話也無所謂,如果為了結(jié)構(gòu)上的清晰而讓步,這點(diǎn)我不反對(duì),但是這個(gè)指標(biāo)絕對(duì)是在優(yōu)化效率的時(shí)候應(yīng)該考慮到的
很多人在上一片post里說這樣子做要我會(huì)死得很難看,我就不明白了,還有其他不死的很難看的方法?
之前Post的連接http://www.cnblogs.com/Alexander-Lee/archive/2007/03/31/694847.html
觀點(diǎn):對(duì)于一個(gè)WebApplication,提高整體吞吐能力,應(yīng)該從提高單頁的響應(yīng)能力開始,對(duì)于WebApplication使用上的一個(gè)原子操作:打開一個(gè)頁面而言,在整個(gè)頁面的生存周期中打開的數(shù)據(jù)連接數(shù)量越少,開閉的次數(shù)越少效率自然越高。
約束:頁面默認(rèn)是同步的操作,我們?cè)谶@里約定再不采用異步操作的時(shí)候,如果用異步操作優(yōu)化,那么又是另外的問題了,會(huì)有其他的問題產(chǎn)生,比如當(dāng)兩次操作有前因后果的關(guān)系的時(shí)候。
首先就是關(guān)于數(shù)據(jù)庫聯(lián)接的問題,我這里用數(shù)據(jù)庫聯(lián)接而不用Connection就是為了滴水不漏,省得錯(cuò)把關(guān)公當(dāng)秦瓊把數(shù)據(jù)庫連接和.NET的XXConnection對(duì)象混淆起來。
這里用代碼來說明,為了保證觀點(diǎn)的中性,我將使用NHibernate的實(shí)現(xiàn)來做例子。
這里暫時(shí)委屈一下NHibernate暫時(shí)這樣子來用。
我們這里面臨兩個(gè)問題數(shù)據(jù)庫連接的訪在那里對(duì)象放在那里,其二就是如何使用,如果按照一些人的觀點(diǎn)就是隨需開,在需要的時(shí)候打開。比如
ISession?vSession=?mCfg.BuildSessionFactory().OpenSession();//創(chuàng)建會(huì)話工廠,?一般來說應(yīng)該使用一個(gè)單例對(duì)象來封裝會(huì)話工廠.
??????????????ITransaction?vTransaction?=?vSession.BeginTransaction();//創(chuàng)建事物處理
??????????????try
??????????????{
???????????????????vSession.Save(vEntity);//向數(shù)據(jù)庫添加數(shù)據(jù)
???????????????????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?
一般我們會(huì)將這段代碼放進(jìn)一個(gè)處理業(yè)務(wù)邏輯的對(duì)象。里面,當(dāng)需要添加一個(gè)Entity的時(shí)候調(diào)用,當(dāng)然Entity有更多的用法,不過我們?cè)谶@里就對(duì)這樣子的簡單的來做第一個(gè)例子。
那么如果我們針對(duì)這一個(gè)簡單實(shí)體封裝了一個(gè)邏輯:添加XX(用戶信息、Post)等,當(dāng)我們需要在一個(gè)頁面操作多個(gè)的時(shí)候,就會(huì)有一個(gè)問題,一個(gè)是事務(wù),這里我們暫且跳開不管,然后的情況就是在這個(gè)頁面頻繁的關(guān)閉打開了多次數(shù)據(jù)庫。
這個(gè)時(shí)候我所提出的一個(gè)頁面一個(gè)Connection的方式就是指的,將:
ISession?vSession=?mCfg.BuildSessionFactory().OpenSession();//創(chuàng)建會(huì)話工廠,?一般來說應(yīng)該使用一個(gè)單例對(duì)象來封裝會(huì)話工廠.
??????????????ITransaction?vTransaction?=?vSession.BeginTransaction();//創(chuàng)建事物處理
??????????????try
??????????????{
????????????????業(yè)務(wù)邏輯對(duì)象.操作(vSession)
???????????????????vTransaction.Commit();
???????????????????Labmessage.Text="OK";
??????????????}
??????????????catch(Exception?ex)
??????????????{
???????????????????vTransaction.Rollback();
???????????????????Labmessage.Text="Error"+ex.ToString();
??????????????}
??????????????finally
??????????????{
???????????????????vSession.Close();
??????????????}
這樣子的代碼寫在頁面上。
so,就是這個(gè)樣子了,在業(yè)務(wù)邏輯里將操作做完了,以后不需要做數(shù)據(jù)庫操作的時(shí)候就將數(shù)據(jù)庫連接關(guān)閉,事務(wù)提交。
我不知道很多人是怎么理解的。
就寫到這里,等大蝦來拍磚,還有就是這樣子的代碼如果存在線程問題的話。那么是不是應(yīng)該對(duì)page_load方法這樣子的方法都要處理線程安全問題了?效率的問題不知道是頻繁關(guān)閉打開數(shù)據(jù)庫來的有效率?一個(gè)建議,如果不在乎這點(diǎn)開銷的話也無所謂,如果為了結(jié)構(gòu)上的清晰而讓步,這點(diǎn)我不反對(duì),但是這個(gè)指標(biāo)絕對(duì)是在優(yōu)化效率的時(shí)候應(yīng)該考慮到的
很多人在上一片post里說這樣子做要我會(huì)死得很難看,我就不明白了,還有其他不死的很難看的方法?
之前Post的連接http://www.cnblogs.com/Alexander-Lee/archive/2007/03/31/694847.html
總結(jié)
以上是生活随笔為你收集整理的关于Web应用程序数据库连接的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 人民币存款利率表
- 下一篇: linux cmake编译源码,linu