日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

关于Web应用程序数据库连接的使用

發(fā)布時(shí)間:2025/4/16 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于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

總結(jié)

以上是生活随笔為你收集整理的关于Web应用程序数据库连接的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。