国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

用Microsoft.net實現(xiàn)數(shù)據(jù)庫事務(wù)(一)

2024-07-10 13:03:31
字體:
供稿:網(wǎng)友
用microsoft.net實現(xiàn)數(shù)據(jù)庫事務(wù)



摘要:了解.net的pet shop 2企業(yè)版本是怎樣幫助企業(yè)解決實際中的業(yè)務(wù)問題,net pet shop

驗證了怎樣利用.net框架和visual studio.net來開發(fā)最佳的企業(yè)級系統(tǒng)。就如sun公司的java™ pet store j2ee™ blueprint application,它也是一個最佳的系統(tǒng)實現(xiàn)。



介紹
.net 寵物店程序開發(fā)于2001年11月,它描述了.net開發(fā)者怎樣利用.net框架和visual studio.net開發(fā)最佳的系統(tǒng)。下面關(guān)于寵物店和原來的j2ee寵物店的討論涉及了企業(yè)級系統(tǒng)的一些特性,如可靠性和伸縮性。對于一個系統(tǒng)要部署成企業(yè)級,一定要考慮它的安全性、可靠性、可伸縮性、可管理性以及與已有的系統(tǒng)和數(shù)據(jù)進行協(xié)同的工作。以前版本的寵物店系統(tǒng)所表現(xiàn)出來的成本優(yōu)勢、性能和開發(fā)效率在.net平臺上仍然存在。本文通過描述了.net支持的其他的企業(yè)級需求,從而把寵物店的討論引向深入。

許多企業(yè)都有他們存在于不同系統(tǒng)中的分布的數(shù)據(jù),比如存貨數(shù)據(jù)在一個存貨控制系統(tǒng)中,而客戶資料數(shù)據(jù)卻在他們的crm系統(tǒng)中。我們的系統(tǒng)需要處理這些不同數(shù)據(jù)庫中的數(shù)據(jù),并且保證數(shù)據(jù)的更改在這些系統(tǒng)中正確進行,要達到這些要求,我們需要跨數(shù)據(jù)庫的事務(wù)處理。

寵物店企業(yè)級版本是為了展示.net平臺上的技術(shù)可以很好的支持那些企業(yè)級系統(tǒng)的特性。它在處理現(xiàn)實世界中存在的數(shù)據(jù)存儲方面提供了一個可靠的、可伸縮的系統(tǒng)。寵物店企業(yè)級版本處理這樣的一些情形,如客戶數(shù)據(jù)存在于一個服務(wù)器上的客戶數(shù)據(jù)庫系統(tǒng)中,而客戶定單數(shù)據(jù)存在于物理上不同的服務(wù)器上的一個不同的數(shù)據(jù)庫系統(tǒng)中,這樣的情形在許多機構(gòu)中是一個普遍的現(xiàn)象。

為了保證客戶數(shù)據(jù)和客戶定單數(shù)據(jù)永遠是正確的,需要一個包含這兩個數(shù)據(jù)源的分布式系統(tǒng)。本文討論了在.net企業(yè)級系統(tǒng)中處理事務(wù)的不同機制,給出了每種機制的示例代碼,討論了一些最佳做法。本文中的代碼是用c#寫成的,但所有的方法和技術(shù)一樣適用于vb.net.

本文所討論的跨多個數(shù)據(jù)庫的分布式事務(wù)對于一個系統(tǒng)來說早已被證實具有優(yōu)良的性能和伸縮性。這里還測試了.net平臺上的幾種事務(wù)機制的性能,詳細的列舉和描述了它們的結(jié)果。從這些結(jié)果中,我們可以清楚的看到.net從功能上和性能上都提供了優(yōu)秀的企業(yè)級事務(wù)支持。

本文還包含了寵物店的一些介紹,它的初始架構(gòu)和實現(xiàn),以及為了支持企業(yè)級特性對它的一些改動。還詳細討論了不同的事務(wù)方式和他們的測試性能結(jié)果圖。

請參閱how sun microsystems' java pet store j2ee blueprint application was implemented using microsoft .net.



假設(shè)的情景
假設(shè)一個可以在線訂購寵物的電子商務(wù)企業(yè),當你進入系統(tǒng)后,你可以瀏覽、查詢從犬類到爬行動物的各種類型的寵物。

一個典型的寵物店系統(tǒng)包括:

l 主頁 -當你打開系統(tǒng)后載入的頁面。

l 類別瀏覽 –頂層有五種類別,每種類別下面都有若干產(chǎn)品。

l 產(chǎn)品 –當系統(tǒng)里面的一個產(chǎn)品被選種時,產(chǎn)品的屬性就被顯示出來,典型的如公或者母。

l 產(chǎn)品明細 –每種產(chǎn)品屬性的詳細說明,如照片、價格和庫存數(shù)量。

l 購物車 –允許客戶去維護一個購物車(增加、刪除、更新數(shù)量)。

l 校驗 –只讀地顯示一個購物車信息。

l 登錄定向 –當用戶在校驗頁面上選擇繼續(xù)的時候,如果他還沒有登錄,則會定向到登錄頁面。

l 驗證登錄 –當?shù)卿洷或炞C后,就會轉(zhuǎn)到信用卡信息和訂購地址信息頁面。

l 確認定單 –定單和客戶地址信息被顯示出來等待確認。

l 提交定單 –最后的一個步驟,在這里定單被提交到數(shù)據(jù)庫。

寵物店的一個例子如圖:


圖1:.net寵物店

。net寵物店的總體邏輯架構(gòu)如圖:


圖2:.net寵物店邏輯架構(gòu)

有三個邏輯層:表示層、中間層、數(shù)據(jù)層,這三層可以使不同特征的分布式系統(tǒng)進行清晰的部署,邏輯層被裝成一個.net裝配(用c#類庫實現(xiàn)),對數(shù)據(jù)庫的訪問是用一個類來處理所有的與sql server managed provider的交互,用存儲過程來存取數(shù)據(jù),這個系統(tǒng)利用了.net實現(xiàn)了完全的邏輯上的三層架構(gòu),表現(xiàn)了.net平臺上的最佳實踐。


圖3:.net寵物店系統(tǒng)的物理部署圖



程序架構(gòu)

圖4是用來表現(xiàn)我們的設(shè)計的詳細圖,我們可以看到寵物店每層的實現(xiàn)和交互細節(jié)


圖4:架構(gòu)設(shè)想



數(shù)據(jù)庫

數(shù)據(jù)庫有如下的表

表名
解釋

account
基本的客戶信息

bannerdata
存儲廣告和標語信息

category
類別信息 (如魚類、犬類、貓類等).

inventory
產(chǎn)品存貨信息

item
每個產(chǎn)品詳細信息

lineitem
定單明細

orders
客戶下的定單,一個定單包含一個或一個以上定單明細

orderstatus
定單狀態(tài)

product
產(chǎn)品目錄 ,每個產(chǎn)品包含一個或者一個以上屬性,典型的屬性如公母。

profile
客戶定制的信息

signon
客戶登錄信息

supplier
有關(guān)供應方信息


表格1:數(shù)據(jù)庫表名

.net寵物店的事務(wù)實現(xiàn)
原有的.net寵物店中order類的addorder方法所調(diào)用的存儲過程中用到了數(shù)據(jù)庫事務(wù),這個調(diào)用涉及到了四個表的數(shù)據(jù),需要定義acid屬性。因為如果一個定單被創(chuàng)建,庫存數(shù)據(jù)需要被調(diào)整。存儲過程利用了一個xml文檔做參數(shù),插入定單數(shù)據(jù)、定單明細,插入定單狀態(tài)數(shù)據(jù),更新定單里涉及到的產(chǎn)品的庫存數(shù)據(jù),我們的目標是從單一數(shù)據(jù)庫架構(gòu)變?yōu)榉植际綌?shù)據(jù)庫架構(gòu),也就是客戶、產(chǎn)品和庫存數(shù)據(jù)存在一個數(shù)據(jù)庫里面,定單存在于另外的一個數(shù)據(jù)庫中。為了達到這個目標,我們需要轉(zhuǎn)移到一個企業(yè)服務(wù)型架構(gòu),這是唯一的一種可以控制分布式事務(wù)和提供兩階段的提交的機制。為了轉(zhuǎn)移到企業(yè)服務(wù)級,我們需要考察幾種情形的影響:

l 引入企業(yè)服務(wù)類庫,但是用數(shù)據(jù)庫事務(wù)/ado.net事務(wù)

l 引入企業(yè)服務(wù)類庫,利用它來控制事務(wù)

l 引入企業(yè)服務(wù)類庫,利用它來控制分布式事務(wù)

為了實現(xiàn)分布式事務(wù),我們需要修改addorder方法和數(shù)據(jù)庫交互的方式,在單一的數(shù)據(jù)庫情形下,我們利用了一個存儲過程;對于分布式,我們需要變?yōu)閮蓚€存儲過程,每個數(shù)據(jù)庫一個,我們意識到原先的存儲過程在最后表之間用了連接,現(xiàn)在這些表存在于不同的數(shù)據(jù)庫中,所以我們最好還是把這些實現(xiàn)放到中間層中,用動態(tài)生成sql語句。

為了顯示引入企業(yè)服務(wù)類庫對于每個組件的影響,我們設(shè)計了.net寵物店的幾個版本:

l 用最初的.net寵物店v1.5作為基礎(chǔ)

l 利用ado.net事務(wù)的.net寵物店

l 使用企業(yè)服務(wù)類庫和ado.net事務(wù)(企業(yè)服務(wù)的事務(wù)屬性設(shè)置為”不支持”)

l 利用企業(yè)服務(wù)的事務(wù)(事務(wù)屬性在order組件被設(shè)置為”需要”,ado.net的事務(wù)去掉)

l 利用企業(yè)服務(wù)來處理分布式事務(wù)



分布式情形下的數(shù)據(jù)庫設(shè)計

圖5:寵物店數(shù)據(jù)庫模型


圖6:定單數(shù)據(jù)庫模型

.net的事務(wù)機制
.net開發(fā)者可以使用四種機制:

l 數(shù)據(jù)庫事務(wù)

l ado.net事務(wù)

l asp.net事務(wù)

l 企業(yè)服務(wù)級事務(wù)

每種機制在以下的幾方面有各自的優(yōu)勢和劣勢:性能、代碼數(shù)量、部署設(shè)置。許多開發(fā)者都很熟悉數(shù)據(jù)庫的事務(wù),在這種情形下,中間層調(diào)用數(shù)據(jù)庫的存儲過程,存儲過程中開始一個事務(wù),如果每個語句都執(zhí)行成功則提交,如果有錯誤發(fā)生時就會回滾。

如果你的事務(wù)需要幾個調(diào)用,例如,你需要插入多個定單明細到一個表中,但不想用一個xml文檔或者傳遞一個很長的字符串,這些都需要在存儲過程中被解析,你可以用ado.net事務(wù)機制。ado.net事務(wù)允許你在當前的連接上創(chuàng)建一個事務(wù)上下文,運行對數(shù)據(jù)庫的多次調(diào)用,在最后或者提交或者回滾。

asp.net事務(wù)是在web應用程序的頁面層工作,你只要簡單的在頁面屬性中加一個” transaction="required”,這樣在頁面中的事件處理都作為頁面整個事務(wù)的一部分,任何處理出現(xiàn)錯誤,則所有的處理都將回滾。

企業(yè)服務(wù)型組件通過資源管理器和分布事務(wù)控制器(dtc)來實現(xiàn)事務(wù),當asp.net,一個數(shù)據(jù)庫的調(diào)用或者事務(wù)中涉及到的其他資源發(fā)生錯誤或者異常時,整個事務(wù)將被回滾,企業(yè)服務(wù)建立在com+技術(shù)的基礎(chǔ)上來處理事務(wù),熟悉com+的開發(fā)者應該理解企業(yè)服務(wù)。

應該被提到實現(xiàn)一個事務(wù)的這些不同方式之間可能是互斥的,如果你混合使用數(shù)據(jù)庫事務(wù)和企業(yè)服務(wù)事務(wù),你就會得到一個錯誤,這是因為你會得到重復的提交,你在企業(yè)服務(wù)中可能提交一個在數(shù)據(jù)庫事務(wù)中已經(jīng)提交了的事務(wù),這樣已經(jīng)沒有事務(wù)上下文來進行提交動作了。同樣的問題如在數(shù)據(jù)庫事務(wù)中提交了一個事務(wù),但在企業(yè)服務(wù)中卻因為在系統(tǒng)中發(fā)生異常而回滾。


菜鳥學堂:
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 成都市| 吉木萨尔县| 青海省| 中方县| 长治市| 兴化市| 若尔盖县| 柘城县| 台山市| 德州市| 安康市| 河北区| 论坛| 孟村| 陵川县| 晴隆县| 内黄县| 灵山县| 方山县| 刚察县| 铜陵市| 颍上县| 天气| 五常市| 宣武区| 乌兰察布市| 吉木乃县| 九龙县| 军事| 松滋市| 和静县| 黑龙江省| 海丰县| 礼泉县| 屏山县| 伊金霍洛旗| 乌拉特后旗| 临城县| 化州市| 壤塘县| 绵竹市|