專家訪談:有關SQL Server 2005 CLR

iSQlServer發表於2010-03-17

關於CLR的重要性有一些主要的原因。首先,隨著SQL Server 程式設計技術的成熟,程式碼編寫人員陷入了SQL Server自身的一些限制之中,並且在很大程度上依賴外部的程式碼來執行一些繁重的移植。T-SQL (事務處理SQL)在返回資料集方面很好,但是除了這個之外則表現不佳。CLR使得問題的解決有了可能,並且在SQL Server內部進行資料操作,而這些原本需要一個完全獨立的程式來實現的。.net的操作程式碼和執行速度比SQL Server/T-SQL好得多;.NET中的同一位的程式碼可以執行更快地執行許多次,當它是二進位制的,而不是作為儲存過程來構建時。

使用CLR的另一個巨大的好處就是安全。所有的程式碼都在執行前檢測型別和安全許可權。例如,先前沒有被寫入的記憶體是不允許被問題中的程式碼讀取的。CLR也很完善;.NET框架中的每樣東西都可以從儲存過程、觸發器或者使用者函式進行訪問——除了處理類似使用者介面的類,它在SQL Server是無論如何不會有用的。

要防止CLR程式碼胡亂執行,微軟為CLR程式碼的呼叫建立了一個三層的安全模型:SAFE, EXTERNAL_Access 和 UNSAFE。SAFE許可權集合在本質上與傳統的儲存過程能夠做的事情一樣。在SQL Server之外不能對其進行任何修改。EXTERNAL_ACCESS允許通過.NET對登錄檔和檔案系統進行訪問。UNSAFE正如其名。標記為UNSAFE的程式碼不能做任何事情,並且它實際上是不應該在除錯或者實驗環境之外使用的。大多數的程式設計人員應該永遠都不需要用到高於EXTERNAL_ACCESS級別的任何東西。(如果你需要在儲存過程或者函式的環境中與檔案系統或者登錄檔對話,這有可能意味著你需要重新考慮你嘗試的邏輯了。)

然而,CLR並不是適合一切。一方面,它可能適合那些不容易、需要進行程式設計,在T-SQL中實現的環境。許多簡單的操作可以在T-SQL以儲存過程的方式完成,並且不需要擴充套件到外部程式。這意味著上下文交換和額外的事務開銷,這兩項中的任何一項開銷都能首先抹消你使用CLR獲得的速度提升。CLR最好用於替代擴充套件儲存過程——例如,那些必須封閉在資料庫中,但是卻非常麻煩,無法用T-SQL從容完成,同時又不能輕鬆移動到業務邏輯末尾的事情。

另一個可能的缺點就是:正如SQL的領袖Rod Paddock在他的blog中指出的,如果你講業務邏輯中的某個元素移動到資料庫,那就可能會引起可測量性的問題。畢竟,SQL Server 更適合於按比例提高的單個大型機器,而不是橫跨在幾個比較小的機器(通常是按照業務比例來的)上。這一點指出了有選擇的使用CLR有多重要。T-SQL簡潔、有效;CLR/.NET昂貴並且範圍廣泛。正確的工作選擇正確的工具,儘管擁有眾多選擇也不錯。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-629698/,如需轉載,請註明出處,否則將追究法律責任。

相關文章