a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 數(shù)據(jù)庫 > Access > 正文

[翻譯]比較ADO.NET中的不同數(shù)據(jù)訪問技術(shù)(Performance Comparison:Data Access Techniques)

2024-09-07 19:05:15
字體:
供稿:網(wǎng)友
[翻譯]比較ADO.NET中的不同數(shù)據(jù)訪問技術(shù)(Performance Comparison:Data access Techniques) Posted on 2015-01-26 10:50 lsr_flying 閱讀(...) 評(píng)論(...) 編輯 收藏Performance Comparison: Data Access Techniques

PRiya DhawanMicrosoft Developer Network

January 2002

原文鏈接:https://msdn.microsoft.com/en-us/library/ms978388.aspx

概要:在典型的應(yīng)用環(huán)境中,比較不同數(shù)據(jù)訪問技術(shù)的表現(xiàn)性能。適用于Microsoft .NET Framework Beta2 和 Microsoft SQL Server 2000.(23頁打印頁)

簡(jiǎn)介

  數(shù)據(jù)訪問方式的架構(gòu)選擇會(huì)對(duì)程序的性能、擴(kuò)展性、可維護(hù)性和易用性帶來影響。這篇文章的重點(diǎn)在于論述這些選擇產(chǎn)生的不同性能表現(xiàn)。數(shù)據(jù)訪問技術(shù)包括:Microsoft ADO.NET Command,DataReader,DataSet和xmlReader,這里使用Microsoft SQL ServerTM 2000數(shù)據(jù)庫比較這些不同技術(shù)在一些典型的應(yīng)用環(huán)境下的區(qū)別。在這些比較當(dāng)中,會(huì)在一定的用戶負(fù)載范圍內(nèi)對(duì)Customer,Order和OrderDetail 數(shù)據(jù)執(zhí)行一系列的命令操作。

  展示這些不同數(shù)據(jù)訪問技術(shù)的代碼示例同樣可以使用在討論ADO.NET的數(shù)據(jù)訪問技術(shù)的相關(guān)文章當(dāng)中。這些例子包括了使用ADO.NET訪問單個(gè)值,單行,多行和層次數(shù)據(jù)。

測(cè)試場(chǎng)景

  任何數(shù)據(jù)操作的性能表現(xiàn)取決于以下因素:

  數(shù)據(jù)訪問中的對(duì)象構(gòu)造和對(duì)象填充會(huì)帶來很大的系統(tǒng)開銷。比如,使用ADO.NET的DataSet進(jìn)行實(shí)例和填充操作就比使用DataReader或XMLReader進(jìn)行同樣操作要占用更多的系統(tǒng)開銷。

  數(shù)據(jù)訪問技術(shù)對(duì)數(shù)據(jù)庫造成的負(fù)載情況是不一樣的。比如,應(yīng)用程序讀取數(shù)據(jù)時(shí),DataSet和DataReader使用的連接方式是不一樣的。使用存儲(chǔ)過程的數(shù)據(jù)訪問技術(shù)就比使用動(dòng)態(tài)SQL表達(dá)式的方式要少一些數(shù)據(jù)庫的工作負(fù)荷。關(guān)系型數(shù)據(jù)與XML之間的轉(zhuǎn)化對(duì)服務(wù)器資源的使用也與此類似。

  對(duì)數(shù)據(jù)庫的數(shù)據(jù)往返訪問的數(shù)量也是一個(gè)因素,特別是在鎖和事務(wù)跨越多個(gè)數(shù)據(jù)來回。

  通過網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量也是一個(gè)關(guān)鍵因素,呈現(xiàn)為xml格式的數(shù)據(jù)比其它格式的數(shù)據(jù)要大很多。

  我們使用一些在業(yè)務(wù)應(yīng)用當(dāng)中常用的操作,比如獲取一個(gè)客戶列,查詢一個(gè)客戶的相關(guān)訂單或者插入一個(gè)訂單,來比較ADO.NET的不同的數(shù)據(jù)訪問技術(shù)。為了使測(cè)試更加可靠,數(shù)據(jù)庫加載了超過100,000行的客戶賬號(hào),一百萬行訂單(每個(gè)客戶10個(gè)訂單)和超過五百萬行的訂單細(xì)節(jié)(每個(gè)訂單有5個(gè)細(xì)節(jié))。這些數(shù)據(jù)存在一個(gè)SQL Server 2000數(shù)據(jù)庫當(dāng)中,通過SQL Server .NET data provider連接到SQL Server中。在這里比較的一些方法使用了SQL Server 2000的XML特性。

GetOrderStatus

  GetOrderStatus方法接受一個(gè)OrderId,然后返回一個(gè)表示這個(gè)訂單狀態(tài)的整型。

GetCustomer

  GetCustomer方法接受一個(gè)CustomerId參數(shù),然后返回關(guān)于該客戶信息的一行記錄。

GetCustomers

  GetCustomers方法接受一個(gè)CustomerId和一個(gè)指明你要讀取的行數(shù)的參數(shù)。在所有CustomerID大于傳給網(wǎng)頁服務(wù)方法的CustomerID的行中,將讀取最上面的n行數(shù)據(jù),并返回。

  我們?cè)谝淮蠖丫哂胁煌摂?shù)的客戶記錄中執(zhí)行帶分頁的測(cè)試。這些客戶記錄的頁數(shù)分別為:100,500和1000。 

GetOrders

  GetOrders方法從數(shù)據(jù)庫獲取一系列層次訂單和它們對(duì)應(yīng)的細(xì)節(jié)。這個(gè)方法接受一個(gè)OrderId和一個(gè)指明要讀取多少訂單數(shù)的參數(shù)。在所有OrderId大于傳入的OrderId的記錄當(dāng)中,最上面的n行記錄將被讀取到。

  我們?cè)谝淮蠖丫哂胁煌摂?shù)的客戶記錄中執(zhí)行帶分頁的測(cè)試。這些客戶記錄的頁數(shù)分別為:10個(gè)訂單(50個(gè)細(xì)節(jié)),50個(gè)訂單(250個(gè)細(xì)節(jié))和100個(gè)訂單(500個(gè)細(xì)節(jié))。

InsertCustomer

  InsertCustomer方法接受一個(gè)customer數(shù)據(jù),并向數(shù)據(jù)庫中插入一個(gè)customer行,然后將CustomerId作為一個(gè)整型返回。  

InsertCustomers

  InsertCustomers方法接受一系列customer類集合,然后向數(shù)據(jù)庫中插入多行對(duì)應(yīng)的customer記錄。

InsertOrder

  InsertOrder方法接受的數(shù)據(jù),包含了一個(gè)帶多個(gè)detail數(shù)據(jù)的order記錄,并把對(duì)應(yīng)的Order和OrderDetails信息插入數(shù)據(jù)庫當(dāng)中。測(cè)試方法通過插入一個(gè)order表頭和不同的details來進(jìn)行。

測(cè)試工具

  基于我們的測(cè)試目的,我們使用application Center Test(ACT),它適合用于對(duì)Web服務(wù)器進(jìn)行壓力測(cè)試,并分析Web程序的性能和擴(kuò)展性問題。Web程序就包括ASP頁面和它們使用的組件。要了解更多關(guān)于創(chuàng)建和運(yùn)行測(cè)試的方法,請(qǐng)參考ACT documentation。使用ACT來測(cè)試Web服務(wù)器中的不同數(shù)據(jù)訪問技術(shù)是很適合的,因?yàn)樗峁┝撕芏嘤杏玫墓δ軄硗瓿蓽y(cè)試。首先,它可以通過打開多個(gè)對(duì)服務(wù)器的連接和快速發(fā)送HTTP請(qǐng)求來模擬一大組客戶并發(fā)操作。其次,它也允許我們建立真實(shí)的測(cè)試環(huán)境,在其中我們可以使用有一系列隨機(jī)參數(shù)調(diào)用同樣的一個(gè)方法。這是一個(gè)很重要的功能,因?yàn)橛脩舨粦?yīng)該反復(fù)地利用同樣的參數(shù)調(diào)用同樣的方法。另一個(gè)更重要的功能就是,Application Center Test會(huì)記錄測(cè)試結(jié)果,這些測(cè)試結(jié)果可以提供關(guān)于Web程序性能表現(xiàn)的最重要的信息。

  雖然直接測(cè)試數(shù)據(jù)訪問技術(shù),而不是像我們這樣通過Web服務(wù)器來測(cè)試,會(huì)讓我們得到更好的吞吐量和響應(yīng)時(shí)間,但是在一個(gè)無狀態(tài)的環(huán)境下更接近真實(shí)的程序應(yīng)用環(huán)境。并且,因?yàn)槲覀兓旧鲜潜容^這些數(shù)據(jù)訪問技術(shù)的相對(duì)性能,在無狀態(tài)環(huán)境(也就是在Web服務(wù)器背后)中,測(cè)試的系統(tǒng)開銷在所有情況下都是一樣的。

  我們之前討論的所有數(shù)據(jù)訪問技術(shù)都通過.NET Framework程序集進(jìn)行實(shí)施。使用ACT對(duì)程序集產(chǎn)生客戶負(fù)載,我們實(shí)現(xiàn)wrapper.aspx頁面,所有的客戶請(qǐng)求全部都送到這個(gè)界面,然后調(diào)用程序集。這些程序集中的方法實(shí)施了使用ADO.NET技術(shù)的數(shù)據(jù)操作。他們是一些簡(jiǎn)單的子過程,并不會(huì)向.aspx 頁面返回?cái)?shù)據(jù)。當(dāng)從數(shù)據(jù)庫獲得數(shù)據(jù)行后,這些方法在記錄行中進(jìn)行迭代,然后把列值賦給本地變量。通過在讀取從ADO.NET對(duì)象中得到的數(shù)據(jù)時(shí)添加延遲,我們模擬使用這些數(shù)據(jù)進(jìn)行一些處理操作時(shí)的開銷。

  測(cè)試腳本使用Microsoft VBScript進(jìn)行編寫。根據(jù)在test script中執(zhí)行的具體方法,我們隨機(jī)化對(duì)不同的Customer或Order的請(qǐng)求。比如:

  Dim URL  Dim UB, LB  ' Set the upperbound for Orders list  UB = 1000000  ' Set the lowerbound for Orders list  LB = 1  ' Set the URL  URL  = "http://myServer/DataAccessPerf/DataReader.aspx"  ' Use the Randomize funtion to initialize the Rnd function  Randomize  Test.SendRequest(URL & "?OrderId=" & int((UB – LB + 1)*Rnd + LB))機(jī)器配置

  下面的表格對(duì)進(jìn)行測(cè)試的測(cè)試臺(tái)配置進(jìn)行了一個(gè)概要總結(jié):  

  表1.客戶機(jī)配置

# of ClientsMachine/CPU# of CPUsMemoryDiskSoftware
1Dell Precision WorkStation530 MT1694 MHz1512 MB16.9 GB
  • Microsoft Windows® XP
  • Application Center Test

  表2. Web服務(wù)器配置

# of ServersMachine/CPU# of CPUsMemoryDiskSoftware
1Compaq Proliant 400 MHz4640 MB50 GB
  • Windows 2000 Advanced Server SP 2
  • .NET Framework Beta 2

  表3. 數(shù)據(jù)庫服務(wù)器配置

# of ServersMachine/CPU# of CPUsMemoryDiskSoftware
1American Megatrends Atlantis800 MHz21 GB28 GB
  • Windows 2000 Advance Server SP 2
  • SQL Server Enterprise Edition SP 2Throughput and latency are the key performance indicators. For a given amount of data being returned, throughput is the number of client requests processed within a certain unit of time, typically within a second. Because peak throughput may occur at a response time that is unacceptable from a usability standpoint, we tracked latency, measured as response time using the report generated by Application Center Test for each of the test run, and capped the testing of a given method once the response time exceeded 1 second.

性能測(cè)試結(jié)果

GetOrderStatus

  這里我們比較使用不同的數(shù)據(jù)訪問技術(shù)從數(shù)據(jù)庫獲取單個(gè)值的表現(xiàn)。

ms978388.bdadotnetarch031_01(en-us,MSDN.10).gif

圖1. GetOrderStatus: 吞吐量和延遲

注解

  • 所有的訪問都使用存儲(chǔ)過程。
  • 在ExecuteScalar方式中,單個(gè)值使用command對(duì)象的ExecuteScalar方法返回。
  • 在Output參數(shù)方式中,單個(gè)值作為command對(duì)象的一個(gè)output參數(shù)返回。
  • 在DataReader方式中,DataReader用來獲取單個(gè)值。
  • 在XmlReader方式中,指明了一個(gè)帶有FOR XML子句的SQL查詢來獲得單個(gè)值,這個(gè)值在XmlReader中以XML的形式保存。

  如圖1所示,ExecuteScalar,Output Parameter和DataReader方法獲取單個(gè)值得性能表現(xiàn)在所有用戶負(fù)載范圍內(nèi)都很接近。

  但ExecuteScalar方法比其它方法需要更少的代碼,因此,從代碼維護(hù)性的角度來說,是最好的選擇。

  XMLReader方法與其它方法相比,會(huì)產(chǎn)生更低的尖峰吞吐量,并且包含了FOR XML查詢的存儲(chǔ)過程會(huì)比其它方法使用的存儲(chǔ)過程花費(fèi)更多的時(shí)間。

GetCustomer

  這里我們比較從數(shù)據(jù)庫獲取單行記錄時(shí)不同數(shù)據(jù)訪問技術(shù)的表現(xiàn)差異。

ms978388.bdadotnetarch031_02(en-us,MSDN.10).gif

圖2. GetCustomer: 吞吐量和延時(shí)

注解:

  • 所有方法采用存儲(chǔ)過程。
  • 在Output參數(shù)方法中,單個(gè)行記錄通過command object的output參數(shù)集來返回。
  • 在DataReader方法中,DataReader被用來獲取單行記錄。
  • XmlReader方法使用一個(gè)帶FOR XML子句的SQL查詢來從數(shù)據(jù)庫中獲取一個(gè)行記錄,這條行記錄存儲(chǔ)以XML文件的形式存儲(chǔ)在XmlReader中。
  • DataSet方法把單行記錄填充到DataSet中。

  如圖2所示,Output參數(shù)和DataReader的方法在不同用戶負(fù)載范圍內(nèi)表現(xiàn)一致,并且產(chǎn)生比較好的網(wǎng)絡(luò)吞吐量,均比另外兩種方法好。XmlReader方法在吞吐量和響應(yīng)時(shí)間方面表現(xiàn)稍微比DataSet好一些。

  在XmlReader方法中,使用FOR XML的SQL查詢比其它方法要花更長(zhǎng)的執(zhí)行時(shí)間。

  在這中情況下,DataSet對(duì)象的創(chuàng)建引起的系統(tǒng)開銷是導(dǎo)致了比較低的吞吐量的主要原因。

GetCustomers

在這個(gè)部分,我們比較讀取多行記錄時(shí)(各數(shù)據(jù)訪問技術(shù)的)性能表現(xiàn)。我們分別進(jìn)行返回結(jié)果集有100行,500行,1000行記錄的測(cè)試,以觀察數(shù)據(jù)返回量對(duì)性能的影響。

ms978388.bdadotnetarch031_03(en-us,MSDN.10).gif

圖 3. GetCustomers (Customers=100): 吞吐量和延時(shí)

注解:

  • 所有方法采用存儲(chǔ)過程。
  • 在DataReader方法中,DataReader被用來獲取多行記錄。
  • XmlReader方法使用一個(gè)帶FOR XML子句的SQL查詢來從數(shù)據(jù)庫中獲取行記錄,這些行記錄存儲(chǔ)以XML文件的形式存儲(chǔ)在XmlReader中。
  • DataSet方法把行記錄填充到DataSet中。

  正如你所預(yù)料的,從數(shù)據(jù)庫讀取更多地行記錄會(huì)降低每秒的請(qǐng)求數(shù),因?yàn)樾枰幚砀嗟男杏涗?,并發(fā)送這些行記錄。

  圖3顯示了DataReader方法的吞吐量幾乎比另外兩種方法大兩倍。DataSet和XmlReader方法的性能表現(xiàn)幾乎一樣,不過,在吞吐量方面,XmlReader比DataSet方法稍微好一點(diǎn)點(diǎn)。

ms978388.bdadotnetarch031_04(en-us,MSDN.10).gif

圖4. GetCustomers (Customers=500): 吞吐量和延時(shí)

<
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产va| 日韩一区二区三区高清 | 欧美成人精品在线观看 | 欧美第一页 | 激情欧美一区二区三区中文字幕 | 国产精品视频污 | 国产高清视频在线 | 午夜免费片 | 国产不卡区 | 欧美日韩中文在线 | 国产精品国产三级国产aⅴ中文 | 黄色网址免费 | 国产成人在线视频 | 奇米影视77 | 亚洲天堂久久 | 亚洲三级网站 | 中文字幕日韩久久 | 成人精品视频99在线观看免费 | 污网站观看 | 99亚洲精品| 无码日韩精品一区二区免费 | 日本电影www | 男女靠逼视频 | 国产精品久久国产精品 | 国产精品女人视频 | 99国产精品久久久久久久 | 美女黄视频网站 | 日韩免费看 | 97国产一区二区精品久久呦 | 亚洲区在线 | 精品在线免费观看 | 午夜一区二区三区在线观看 | 成人影院欧美黄色 | 欧美激情一区二区三级高清视频 | 国产一区二区三区四区在线观看 | 午夜av亚洲女人剧场se | 久久精品久久久久电影 | 五月婷婷在线观看视频 | 亚洲精品国产setv | 男女网站在线观看 | 成人黄色在线看 |