翻譯|使用教程|編輯:莫成敏|2020-01-15 15:21:21.883|閱讀 235 次
概述:Giorgi Abashidze解釋了他的團隊如何將兩階段部署過程與SQL Compare命令行以及一些SQL同義詞一起使用,以自動為其每個客戶進(jìn)行自定義部署,而只需要在源代碼管理中為每個版本維護(hù)一個分支。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
SQL Compare是一款比較和同步SQL Server數(shù)據(jù)庫結(jié)構(gòu)的工具。現(xiàn)有超過150,000的數(shù)據(jù)庫管理員、開發(fā)人員和測試人員在使用它。當(dāng)測試本地數(shù)據(jù)庫,暫存或激活遠(yuǎn)程服務(wù)器的數(shù)據(jù)庫時,SQL Compare將分配數(shù)據(jù)庫的過程自動化。
在以前的文章中,從使用SQL比較命令行的源代碼控制到數(shù)據(jù)庫,我解釋了我的團隊如何使用SQL Compare命令行為我們的客戶自動化數(shù)據(jù)庫部署,而無需訪問實際的登臺數(shù)據(jù)庫或生產(chǎn)數(shù)據(jù)庫,這是不可能的這是一個銀行數(shù)據(jù)庫。我演示了如何僅通過訪問我們的開發(fā)數(shù)據(jù)庫(包含在TFS源代碼管理下),如何使用SQL Compare命令行來部署所有客戶通用的數(shù)據(jù)庫元數(shù)據(jù)和代碼。
但是,除了此共享代碼外,還必須為我們的每個客戶提供每個軟件版本的唯一變體,以便向他們提供可滿足其不同業(yè)務(wù)和合規(guī)性要求的自定義例程。我們每個客戶都需要其中一些例程,當(dāng)然,此專有功能應(yīng)始終僅部署到該客戶的生產(chǎn)數(shù)據(jù)庫中:至關(guān)重要的是,任何客戶都不能看到專門為另一位客戶編寫的邏輯。
我們?nèi)绾螌崿F(xiàn)這一目標(biāo)?傳統(tǒng)觀點似乎是,在每個發(fā)行版中,我們將數(shù)據(jù)庫版本的每個特定于客戶的變體視為一個單獨的分支。但是,這可能會增加構(gòu)建的復(fù)雜性。有了一些創(chuàng)造力,我們可以避免這種情況,而是為每個新版本創(chuàng)建一個分支,我們可以使用該分支來維護(hù)和部署我們每個客戶的所有共享邏輯,以及專用于無限數(shù)量客戶的邏輯。
在本文中,我將解釋如何使用SQL Compare命令行、同義詞和一些獨創(chuàng)性來完成所有這些工作。
我們?nèi)绾螌⒖蛻籼囟ǖ睦檀鎯υ趩蝹€數(shù)據(jù)庫中
因此,為了更接近于開發(fā)數(shù)據(jù)庫的構(gòu)造方式,我們假設(shè)我們的Trunk結(jié)合了我們所有的邏輯。假設(shè)我們有三個客戶Cust1,Cust2和Cust3。
我們還提供了一些代碼,即一個稱為loan.calculate_effective_rate的SQL存儲過程,該程序根據(jù)某種算法來計算一段時間內(nèi)貸款的實際支付利率,稱為“有效利率”。 所有客戶的代碼都是相同的,但是有一天客戶Cust1要求我們更改其版本的算法,這意味著我們現(xiàn)在需要維護(hù)和部署“有效費率”程序的兩個不同版本。
首先,我們需要按照Cust1的要求,為Effective_rate過程實現(xiàn)替代算法(從這里開始,我將使用其縮寫形式)。 我們只有一個開發(fā)數(shù)據(jù)庫,稱為Trunk,并且由于任何例程中每個例程的名稱都必須唯一,這意味著我們必須有一種命名策略來區(qū)分這些變體。
我們做的方法是:
這意味著所有客戶的應(yīng)用程序代碼現(xiàn)在都必須調(diào)用該effective_rate_default過程,但必須調(diào)用的Cust1除外effective_rate_cust1。但是,我們不希望對任何客戶的調(diào)用代碼進(jìn)行任何更改。畢竟,該過程的目的沒有改變,但是我們現(xiàn)在有多個相同的操作實現(xiàn)(計算貸款的有效利率)的方法。相反,我們使用同義詞來表示具有多個實現(xiàn)的任何操作。換句話說,調(diào)用者代碼從不直接調(diào)用確切的實現(xiàn),而是調(diào)用操作(SQL同義詞)。
因此,在這種情況下,我們將創(chuàng)建一個SQL同義詞并將其部署給每個客戶,該SQL同義詞的名稱為effective_rate,表示effective_rate_default過程。 當(dāng)然,僅對于Cust1,此同義詞必須不引用默認(rèn)過程,而是引用Cust1變體。 但是,正如我已經(jīng)提到的,我們在源代碼管理中僅維護(hù)一個數(shù)據(jù)庫,而在Trunk(以及任何發(fā)行分支)中,每個同義詞始終僅引用相關(guān)操作的默認(rèn)實現(xiàn)。 那么我們?nèi)绾螌崿F(xiàn)這一目標(biāo)呢?
答案是一個兩階段的部署過程。第一階段向每個客戶部署effective_rate_default過程以及引用該過程的effective_rate同義詞。第二階段僅將effective_rate_cust1過程部署到Cust1,然后刪除Cust1數(shù)據(jù)庫中的effective_rate同義詞,并創(chuàng)建一個引用effective_rate_cust1的新同義詞。
通過遵循這種方法,基于對每個客戶的SQL同義詞和兩階段部署過程,我們可以在一個開發(fā)數(shù)據(jù)庫中包含所需的專用例程,因此仍然可以為我們的客戶提供代碼,考慮到不同的業(yè)務(wù)和合規(guī)性要求。
讓我們看看如何使用SQL Compare命令行實現(xiàn)此兩階段部署過程。
本教程內(nèi)容較多,分為上下兩篇文章,想要查看教程后續(xù)內(nèi)容,請繼續(xù)關(guān)注我們網(wǎng)站!或者下載SQL Compare試用版嘗試一下~
相關(guān)內(nèi)容推薦:
SQL Compare教程:使用SQL Compare命令行從源代碼管理到數(shù)據(jù)庫
SQL Compare使用教程:如何在SQL Compare中使用自定義過濾器
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: