隨著(zhù)Microsoft SQL Server 2005 Beta 2的發(fā)布,數據庫開(kāi)發(fā)的方式正在改變中。 作為一個(gè)數據庫開(kāi)發(fā)人員,現在你可以更好的把工作關(guān)注在功能、對本機格式的數據的訪(fǎng)問(wèn)(如XML)、以及利用強大的數據庫服務(wù)器創(chuàng )建更復雜的系統上。數據庫開(kāi)發(fā)工作正前所未有的越來(lái)越集成,你所需要的所有工具都觸手可及。
本文討論了一些SQL Server 2005的新特性,這些新特性將幫助你創(chuàng )建一個(gè)新型的數據庫應用程序。
隨著(zhù)Microsoft SQL Server 2005 Beta 2的發(fā)布,數據庫編程人員現在可以充分利用Microsoft .NET Framework 類(lèi)庫和現代編程語(yǔ)言來(lái)開(kāi)發(fā)數據庫應用。 通過(guò)集成的CLR,你可以用.NET Framework language 里的Visual Basic .NET 和C#中面向對象的結構、結構化的錯誤處理、數組、命名空間和類(lèi)來(lái)編寫(xiě)存儲過(guò)程、函數和觸發(fā)器。此外, .NET Framework所提供的幾千個(gè)類(lèi)和方法也擴展了服務(wù)器功能,使你能夠更容易的在服務(wù)器端使用。許多之前我們用T-SQL難以實(shí)現的任務(wù)現在可以更容易的用托管代碼實(shí)現。同時(shí),系統還新增了兩個(gè)數據庫對象類(lèi)型:聚合和用戶(hù)自定義類(lèi)型。你現在能夠更好的利用已掌握的知識和技能編寫(xiě)in-process 代碼。 總之,SQL Server 2005 Beta 2 能夠使你的數據庫服務(wù)器更方便地在后臺執行適當的計算和操作。
SQL Server 和 CLR 的集成主要提供了如下好處:
利用CLR集成,你可以用Visual Basic .NET 和 C#這樣的語(yǔ)言寫(xiě)出具有更復雜邏輯的代碼和更適用于計算型任務(wù)的代碼。而且, Visual Basic .NET 和 C# 還提供了諸如封裝、繼承、多態(tài)這樣的面向對象的功能。你現在可以更容易的把代碼和類(lèi)、命名空間組織在一起,這意味著(zhù)你更容易組織和維護在工作中產(chǎn)生的大量代碼。這種從邏輯上和物理上把代碼組織到程序集和命名空間中的功能非常有用,它將使你能夠更好的在一個(gè)大型數據庫實(shí)現項目中發(fā)現和關(guān)聯(lián)不同的代碼塊。
托管代碼在處理運算和管理復雜執行邏輯上比T-SQL更有效,并且提供了對字符串處理、正則表達式之類(lèi)功能的額外支持。此外,由于現在可以利用.NET Framework類(lèi)庫的功能,你可以更容易的從存儲過(guò)程、觸發(fā)器、用戶(hù)定義函數中訪(fǎng)問(wèn)幾千個(gè)內置的類(lèi)和例程(routines)。通過(guò)托管存儲過(guò)程、函數、觸發(fā)器、聚合,可以更容易的實(shí)現字符串處理、數學(xué)函數、日期操作、系統自由訪(fǎng)問(wèn)、高級加密算法、文件訪(fǎng)問(wèn)、圖像處理、XML數據操作等功能。
托管代碼的一個(gè)主要好處就是類(lèi)型安全。在托管代碼執行前,CLR將執行一些檢查,通過(guò)一個(gè)被稱(chēng)之為“驗證”的處理過(guò)程來(lái)保證所執行的代碼是安全的。例如,會(huì )檢查代碼以確保不會(huì )讀未寫(xiě)的內存地址。
當編寫(xiě)存儲過(guò)程、觸發(fā)器、用戶(hù)自定義函數時(shí),你現在要決定是使用傳統的Transact-SQL 還是.NET Framework兼容的編程語(yǔ)言,如Visual Basic .NET or C#來(lái)編寫(xiě)它們。這個(gè)問(wèn)題的答案依賴(lài)于使用的場(chǎng)合,在某些情形下,你會(huì )使用Transact-SQL,而另外一些情形下,你將使用托管代碼。
Transact-SQL 更適合代碼主要是進(jìn)行數據訪(fǎng)問(wèn)、沒(méi)有邏輯或邏輯簡(jiǎn)單的場(chǎng)合。托管代碼更適合密集計算和復雜邏輯的場(chǎng)合,或者是那些你想利用.NET Framework 類(lèi)庫的場(chǎng)合。
代碼放置也很重要。你可以把Transact-SQL 和 托管代碼都放在服務(wù)器上運行,代碼和數據的緊密結合使你能夠充分利用服務(wù)器的處理能力。而且因為它減少了數據層和中間層之間的流量,所以這非常有益。特別是對I/O密集的系統,可能會(huì )有顯著(zhù)的好處。CLR 函數也可以利用到SQL Server 查詢(xún)處理器的并行和優(yōu)化功能。另一方面,你可能不希望把密集計算的任務(wù)放在數據庫服務(wù)器上,現在的大多數客戶(hù)端計算機都很強大,你可能希望把盡可能多的代碼放到客戶(hù)端來(lái)利用其處理能力。這沒(méi)有一成不變的答案。
在SQL Server 2005中,你可以開(kāi)發(fā)數據庫層的XML Web services,把SQL Server 作為一個(gè)HTTP listener。這對那些以Web services為中心的應用程序提供了新型的數據訪(fǎng)問(wèn)功能。在SQL Server 2005 Beta 2中,你可以使用HTTP直接訪(fǎng)問(wèn)SQL Server,無(wú)需使用IIS這樣的中間層listener。SQL Server 開(kāi)放了一個(gè) Web service 接口, 可以執行SQL語(yǔ)句和調用函數和過(guò)程,查詢(xún)結果可用XML格式返回,并且可以利用Visual Studio 的Web services 架構。
很多新的功能出現在下一個(gè)版本的ADO.NET中。從查詢(xún)改變通知到多活動(dòng)結果集(MARS),ADO.NET使數據訪(fǎng)問(wèn)和操作更加可伸縮和靈活。
SQL Server 2005 Beta 2 引入了對SQL Server 查詢(xún)的通知支持。 你可以使用這一功能來(lái)發(fā)送一個(gè)命令到SQL Server,并且要求當其后運行的同樣命令產(chǎn)生不同的結果時(shí),SQL Server生成一個(gè)通知。這一功能是通過(guò)從屬對象檢測到基礎數據的改變來(lái)實(shí)現的??捎猛ㄟ^(guò)多種客戶(hù)端API將命令發(fā)送到服務(wù)器,如:ADO.NET, OLE DB, Open Database Connectivity (ODBC), Microsoft ActiveX Data Objects (ADO), 或 SOAP等,這些命令可能包含一個(gè)通知請求的tag。對于被作為請求一部分的被執行的每一條語(yǔ)句,服務(wù)器都會(huì )為請求中的每一條語(yǔ)句創(chuàng )建一個(gè)“通知訂閱”。通知通過(guò)一個(gè)SQL Service Broker 隊列傳遞,應用程序可以輪詢(xún),并且無(wú)論通知是否可用,都可以使用活動(dòng)服務(wù),或者阻礙語(yǔ)句的返回。 查詢(xún)通知對于在那些數據庫驅動(dòng)Web 站點(diǎn)應用程序中啟用結果緩存非常有用。
多活動(dòng)結果集 (MARS)允許每個(gè)連接有超過(guò)1個(gè)的掛起請求,特別是允許每個(gè)連接有超過(guò)1個(gè)的打開(kāi)的默認結果集。默認結果集是一種前向的、只讀的結果集,采用默認結果集,客戶(hù)端驅動(dòng)可以透明的接受數據塊(表格數據流buffer大小的數據塊)以滿(mǎn)足應用程序的要求,而無(wú)需在服務(wù)器往返(就像使用服務(wù)器光標)。 應用程序不需要犧牲性能即可實(shí)現一種簡(jiǎn)單的一次一行的編程方法。
多活動(dòng)結果集消除了這一當前的限制:一個(gè)打開(kāi)的默認結果集將阻止發(fā)送新的請求給服務(wù)器,直到整個(gè)結果集關(guān)閉為止。
SQL Server 2005 Beta 2 引入了新的快照隔離級別??煺崭綦x是一種行級數據版本化機制,行數據版本被存儲以供讀取。這種新的隔離級別提供了以下優(yōu)點(diǎn):
例如,當同時(shí)讀寫(xiě)同樣數據時(shí),鎖將造成程序堵塞。如果一個(gè)事務(wù)中改變了一行,另一個(gè)事務(wù)將不能讀這行,直到前一事務(wù)的改寫(xiě)提交為止。有了快照隔離,讀依然可以訪(fǎng)問(wèn)到改寫(xiě)前的值。
快照隔離級別在以下技術(shù)中被支持: ADO, OLE DB, SQLOLEDB, Shape Provider, SQLODBC, OLE DB Managed Provider, SQL Managed Provider。
聯(lián)系客服