Python和SQL Server 2017的力量


Python是新的SQL Server 2017。 它主要的目的是允許使用面向機器學習在SQL Server中,但它可以用於遠遠超過這一點,與任何Python庫或框架。 提供一個例子,什么是可能的,Hitendra展示了如何使用該功能安全提供智能應用程序緩存,在SQL Server可以自動顯示數據更改時觸發一個緩存刷新。

MS SQL Server 2017增加了其先進的分析擴展,現在被稱為“機器學習服務”,通過啟用SQL Server執行Python腳本內TSQL通過機器學習服務與Python。 這基本上提供了一種方法,數據庫程序員可以直接從Python和傳遞數據。 這不是有限的有效性提供機器學習數據分析的功能,因為Python有許多隨時可用的模塊和框架來解決許多問題,如執行大量計算與數據結構、圖形處理進行分析,網絡操作、數據庫操作、網絡操作或本地/基於網絡文件系統操作。 顯然,這些最好是在中間件,但在數據庫系統中,有些時候它更方便直接溝通到外部系統,而不是依靠外部流程執行任務通過輪詢數據來源。 這個有意義的時候不是這樣的一個問題有一個解決方案在數據庫或數據層,當它不提供任何安全問題。在這里,我們將嘗試演示的一個例子使用高級分析內的Python擴展,顯示數據庫可以觸發外部進程執行一個活動的數據作為參數提供。 這是為了考慮到安全的問題,數據可靠性和事務響應時間。

用例為Python

一些任務可以做更容易通過調用一個Python腳本從SQL而不是依靠中間件。 這是特別的情況中的任務是由一個事件數據庫。 任務可能包括發送數據,或接收從基於網絡的系統TCP / HTTP / SOAP。利用當地的平台資源,比如文件系統、網絡或GPU。構建實時集成在一個或多個系統之間通過使用一個通用的數據格式如JSON、XML或YAML。與外部應用程序生成的數據或文件的溝通。自然,也有一些潛在的缺點如果您使用Python需要上網,有可能數據必須保持安全可能是不小心在互聯網上共享。 任何互聯網接入必須仔細的監管網絡。安全風險暴露通過允許執行Python腳本在服務器上通過“外部腳本執行啟用”。資源密集型的Python腳本在同一台服務器上可以影響交易正在進行的大型OLTP系統的性能。權衡這些優點和缺點,似乎仍有次當Python可以發揮有益的作用,如果它可以最小化風險。 作為一個例子,讓我們考慮如何使用Python來構建一個應用程序使用的數據緩存系統層。

示例解決方案緩存

緩存的數據可以提高應用程序性能的有效途徑。 緩存的存儲開銷成本,我們可以使有用的性能收益當面對諸如健談與數據庫、網絡通信和高資源消耗由數據庫當面對重復查詢。 當我們建立一個緩存基礎設施時,我們面臨的共同問題何時刷新緩存的內容。 我們傾向於采用簡單的解決方案在一定時間間隔后重建緩存。 然而,這是非常低效的。 最好是刷新緩存數據更改時,和只刷新是什么發生了改變。 我們可以接近實時數據時在創建、更新或刪除。 有許多可用的工具和框架來解決刷新的問題,但是他們遭受的問題如何確定中發生更改的數據和修改之后提交。 數據庫是最有能夠做到這一點。對於我們的緩存系統,可用的來源嗎,我們將限制微軟堆棧的一切除了Python本身。

Microsoft SQL Server 2017(CPT)

服務代理來隔離事務數據庫。

Python執行腳本,可以更新緩存通過HTTP(Python 3.5可執行庫從蟒蛇分布)

ASP MVC示例Web UI

ASPWebAPI封裝緩存存儲我們的示例解決方案。

 

WebApplication提供了一個用戶界面來讀取和更新數據。
RESTful.Cache在我們的示例應用程序緩存存儲解決方案是用ASP。 凈WebAPI2,其內容類型JSON。 http - get操作提供本地緩存的數據(一個靜態的集合)。
MS SQL Server 2017(CPT)是一個數據庫服務器:
TransDBOLTP數據庫,忙着處理事務。
隱藏自己代理執行Python腳本執行數據庫,使用外部腳本啟用的選項啟用腳本執行。 指的是微軟。 道格:外部腳本啟用服務器配置選項。
服務代理SQL server的可靠的消息傳遞框架,艾滋病的橋梁隱藏自己代理和TransDB。 接收到的消息的隱藏自己代理可以處理更新緩存。
Python是集成腳本語言和SQL 2017數據庫系統(CPT)。
解決方案的架構
在我們的解決方案,我們將緩存實體的產品類型名稱在一個RESTful.Cache應用程序和WebApplication將有一個函數來創建新的嗎產品 類型條目和閱讀RESTful.Cache。
先決條件
另外,有一些先決條件和一些我們需要考慮的更多信息。
1.SQL實例,CacheDB承載一定的Python的學習服務安裝
2.執行一個Python腳本CacheDB TSQL,SQL服務MSSQLLaunchpad應該運行或SQL Server發射台。 指微軟。 凈:微軟機器學習服務
3.外部腳本執行SP_Configure,請參考微軟。 道格:外部腳本啟用服務器配置選項
4.TransDB和隱藏自己托管環境應該有一個服務代理端點上創建它的實例,如果這些是獨立托管在兩個不同的SQL實例然后每個實例都應該有自己的端點。
5.TransDB和隱藏自己數據庫應該啟用代理。 指微軟。 技術:如何激活服務代理消息傳遞在數據庫中
WebApplication有兩個主要的MVC行動; 一個更新一個新的實體TransDBHTTP動詞POST和另一個操作返回的列表產品類型從緩存HTTP動詞。

 

RESTful.Cache有兩個操作方法,一個更新和新增實體緩存嗎產品類型與HTTP動詞后,另一個讓所有的緩存產品類型從本地緩存中。

對於我們的示例解決方案,兩個應用程序駐留在IIS在單個應用程序池標識保持應用程序了。 但對於實際系統的實現,可以個人網絡服務器托管環境在內部網或互聯網環境。

RESTful.Cache授權規則只有兩個服務帳戶處理HTTP請求。

abc \ WebApp_SVC和abc \ CacherAgent_SVC。 abc \ CacherAgent_SVC服務帳戶允許Python腳本在SQL的應用程序通過HTTP來刷新緩存。
abc \ WebApp_SVC用戶的WebApplication有授權規則允許的訪問方式RESTful.Cache應用程序。
SQL數據庫和服務代理
OLTP數據庫TransDB有幾個對象,包括表、存儲過程和服務代理對象。

就我們的目的而言,手術UpdateProductType更新ProductType表與新記錄AcknowledgeProductTypeCache過程的激活過程CacheIntegration隊列,它接收來自目標確認處理消息時,即從隱藏自己數據庫。 它還處理異常,以及這些在日志CacheIntegrationError表。
在服務代理可以找到更多的信息微軟。 道格:SQL Server服務代理

對於我們的示例解決方案,TransDB是一個創建的源數據庫更新緩存消息當一個新的ProductType創建記錄,一條消息來執行一個動作,它UpdateMessage消息類型,CacheIntegration合同發送消息CacheSource服務目標數據庫。 服務有CacheQueue使用服務代理組件執行可靠的消息傳遞。 的ToCacheTarget有信息傳遞消息路由到目標。
消除任何的機會增加事務處理時間以及避免任何安全風險在事務數據庫中的數據的其余部分,我們將解耦緩存更新過程通過使用一個代理數據庫,調用隱藏自己在我們的示例解決方案數據庫。 服務代理消息傳遞基礎結構將有助於連接TransDB和隱藏自己數據庫,基於事件的消息處理將使我們更新緩存存儲駐留在網絡系統。 的隱藏自己數據庫是扮演一個代理的角色為了執行緩存刷新當更新消息的到來。 它更新緩存通過執行一個Python腳本。

隱藏自己的數據庫有:

1.CacheLog和CacheIntegration錯誤表,跟蹤當緩存刷新和記錄在緩存刷新過程中可能發生的任何錯誤。的PerformCacheUpdate程序接收傳入的消息TransDB通過服務代理。 如果消息的類型UpdateMessage然后它執行另一個程序,UpdateWebCache,執行Python腳本的執行。的UpdateWebCache程序的執行結果保存在一個變量,然后插入到表CacheLog表的最后消息對話。這個過程也結束了談話當收到的消息的錯誤或結束消息類型,錯誤類型,異常日志寫在CacheIntegrationError表。UpdateWebCache過程中提取Id和的名字從傳入的XML消息作為參數傳遞和Python腳本中嵌入這些值文本。 腳本執行的結果集是一個結構化的表的類型UpddateCacheLog。

隱藏自己的主要是服務代理對象UpdateMessage消息類型和CacheIntegration合同是相同的TransDB,CacheQueue有一個激活過程叫什么PerfomCacheUpdate,一個服務CacheTarget,路由信息TransDB的服務CacheService和端點地址。對於我們的示例解決方案,最大隊列讀者對隊列的數據庫設置為1。 這可以增加如果需要,例如,如果數據修改是高,你需要增加緩存刷新頻率。
服務代理端點
我們的解決方案,數據庫駐留在相同的實例,所以都是使用相同的服務代理端點來發送和接收消息。


但是如果我們想在個人主機數據庫實例然后每個SQL實例的服務帳戶應該有一個服務代理端點。 和SQL實例應該許可允許將消息發送給對方的端點。 連接的授權和批准可以用以下組TSQL命令。 注意,在消息傳遞基礎結構另一邊有一個發送方和接收方,如前所述,如果SQL實例發送方和接收方的一部分,那么每個實例都應該有自己的進程標識。 下圖表示的每個SQL服務器運行在自己的身份。

這是授權和批准端點連接到SQL代碼TransDB的服務帳戶(身份)在SQL SQL實例的實例隱藏自己數據庫。同樣,這是授權和批准端點連接的代碼隱藏自己的服務帳戶(身份)在SQL SQL實例的實例TransDB數據庫。
Python腳本
這是Python腳本文本,@UpdateCache TSQL保存為字符串變量。 它有UpdateCache方法與邏輯執行HTTP POST調用RESTful.Cache通過一個數據對象的名字和Id領域,收到作為輸入參數。 接收JSON對象並將其作為輸出結果的方法返回給調用者。在腳本結束時,返回的對象轉換成一個數組,所以它可以作為一個SQL結構化的結果。
有幾件事值得注意的是,使用SQL server的Python腳本。
1.我們可以編寫一個腳本或連續成方法我們做了在這個解決方案中。 另外,我們可以創建內聯類或創建一個包和進口在python PIP命令在命令提示符。
2.CPT的MS SQL版本,導入語句只能導入包范圍內放置的地方,因此我們可以注意,導入請求導入語句存在內部的方法UpdateCache熊貓,導入語句導入存在的腳本腳本的最后一行。
3.輸出對象的方法UpdateCache立即轉換為一個數組,熊貓。 DataFrame能夠將對象轉換為一個SQL server數據結構可以很容易地理解作為一個表行和列。
4.分配下來的數據結構OutputDataSet在TSQL執行上下文對象可用SQL服務器。
5.程序的最后一行dbo。UpdateWebCache,結果集(dbo.UpdateCacheLog類型); 有一個用戶定義的表類型dbo.UpdateCacheLog這有助於保持底層列秩序和避免任何不匹配過程中生成的結果集接收的數據結構。 另一種方法是建立一個映射列結構中的Python和結果集。
數據庫安全
TransDB是一個OLTP數據庫,我們不希望任何安全漏洞的攻擊系統,因此我們的示例解決方案的方法,這樣可以托管在一個SQL數據庫實例的機器學習服務”是沒有安裝。隱藏自己是一個代理,能夠達到一個基於網絡的系統,所以可以在SQL實例安裝機器學習服務。 SQL實例可以有個人服務帳戶的身份,已授權服務代理端點連接僅供特定端口。 另一種安全通信是通過使用證書進行認證。 授權服務代理端點引用微軟。 技術:如何:允許服務代理網絡訪問使用證書(transact - sql)為更多的細節。
所有組件放在一起
后把所有的組件,這是我們的WebApplication讓我們創建一個新的ProductType和列表相同的產品類型與RESTful HTTP調用刷新緩存。 后面牆上有組件的管理數據和緩存是無形的前端應用程序。


結論
應用,如電子商務、醫療電子政務可以受益於一個好的緩存實現。 通過擴展的使用技術,我們都很熟悉,我們可以得到一個解決方案,是易於維護的成本沒有學習一個新的框架或特性。
滿足我們需要的,因為我們的示例解決方案
1.當數據被創建或修改一個OLTP事務,系統刷新網絡緩存系統進行讀訪問。
2.它可以使用異步事件刷新緩存,接近實時的。 這不會影響原來的事務的性能。
3.它可以畫一個安全事務之間的界限,通過HTTP緩存系統,保證數據安全的OLTP數據庫。
4.它與最小啟用監測功能; 緩存日志和異常日志,可以增強進一步建立一個管理控制台。
5.與服務代理消息傳遞組件,解決方案是足夠靈活來觸發或到達網絡系統異步消息處理時發生。 換句話說,與SQL數據庫集成服務代理信息和基於接收的數據,執行一個動作來獲取或發送數據到外部系統數據層之外。
6.隔離,外部系統觸發事件內部專用的數據庫使用消息傳遞服務代理,有助於安全事務和OLTP數據庫的數據。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM