2010-11-22 21 views
2

已更新2010-11-25如何將多個用戶訪問數據庫的遷移到一個單一的SQLServer數據庫

遺留單機應用(A1)正在重新創建爲一個Web應用程序(A2)。

A1是用Delphi 7編寫的,使用MS Access數據庫來存儲數據。 A1已經分發給約1000個活躍用戶,我們在構建A2期間無法控制。數據庫有50個表,其中一些包含用戶數據,一些包含模板數據(不需要複製);另一些包含用戶數據,其中一些包含模板數據(不需要複製)。這些用戶表中的3-4個較大(< 5000個記錄),其餘很小(<100)。

一旦A2是'活的',A1的用戶應該能夠遷移到A2。我正在尋找場景的比較來做到這一點。

一種選擇是爲這些用戶開發一個獨立的「更新」工具,並通過web服務將此更新工具與A2數據庫進行通信。

另一種方法是允許用戶將他們的Access數據庫(〜15 MB)上傳到我們的服務器,運行某種SSIS包(可能一夜之間),以便爲該用戶獲得此A2,並刪除Access數據庫之後。

我是否缺少選項?哪個選項是「最好的」(我理解這可能有點主觀,但希望至少可以明確場景的贊成和反對)。

如果需要,我會很樂意使這個社區wiki。

UPDATE更新2010-11-23:有人建議方案1的變體應該是讓更新工具/應用程序直接與生產數據庫對話。這是可行的嗎?

UPDATE 2011-11:到目前爲止,這已經投入生產。用戶上傳.mdb所在的.zip文件,將其解壓並放置在安全的位置。每晚安排一次SSIS預定作業,並將數據轉移到登臺表格,然後通過SP將其轉移到生產環境中。

+5

你的意思是說有1000個dstinct的A1拷貝,每個都有自己的數據? – 2010-11-22 13:31:09

+0

@iDevlop:是的,我有。 – Tobiasopdenbrouw 2010-11-23 13:18:09

+0

@iDevlop:當然,從這些數據庫中只會導入每個用戶實際定製的數據:通用/公用數據將不會被傳輸。 – Tobiasopdenbrouw 2010-11-23 15:48:38

回答

2

我會傾向於上傳完整的數據庫並在服務器上運行轉換。

無論哪種情況,您都需要編寫一個轉換程序。真正的問題是您在客戶的計算機上部署和運行多少轉換。我會盡可能保持簡單,即上傳。這樣,如果在轉換過程中發現任何錯誤或意外數據,您可以簡單地更新服務器,而不需要重新部署轉換程序。

您所談論的數據總量不會太大,無法上傳,聽起來大部分數據都需要上傳。

如果您在本地安裝轉換程序,它需要一種方法來從部分停止的轉換中恢復。這可能比簡單地重新啓動訪問數據庫的上傳複雜得多。

此外,您並未指出轉換完成後Web服務將有任何需要。將這些服務放在一起並在轉換期間保持運行和安全的努力遠不止是簡單的上傳應用程序或Web表單。

另一個因素是客戶轉換的速度。如果其中一些應用程序將運行當前應用程序一段時間,則可能需要隨着服務器數據庫隨時間變化而更新轉換應用程序。如果您上傳數據庫並在服務器上運行轉換,則只需要更新服務器轉換程序。客戶不會有任何下載轉換程序的風險,但在服務器數據庫更新之前不會運行轉換程序。

我們有類似的情況,我們選擇在服務器上運行轉換。我們爲用戶建立了一個網頁來上傳他們的文件。在這種情況下,新應用程序不需要部署。我們發現唯一的缺點是讓用戶選擇正確的文件。如果您使用Web表單上傳,則由於安全限制,無法爲用戶預先選擇文件名。在我們的案例中,我們知道文件的位置,但客戶沒有。我們在上傳頁面上提供幫助用戶的指導。您可以通過編寫一個小型桌面應用程序來爲用戶執行上載來避免這種情況。

我認爲編寫一個基於服務器的轉換唯一的缺點是您的一些模板數據將被上傳,這是不需要的。無論如何,這是少量的數據。

服務器優點: - 無需轉換重新部署由於錯誤,意外的數據,或者對服務器數據庫 變化 - 更容易獲得(可能),只有一個接入點 - 上傳。當然,您以訪問數據庫的形式接受客戶數據,因此您仍然不能相信任何內容。

服務器缺點: - 上傳聯合國需要的模板數據

桌面優點: - ?我在未來與任何

桌面缺點麻煩: - 可能需要多個版本部署

至於直接對話服務器數據庫。我有一個應用程序直接與託管數據庫通信以避免創建Web服務。它工作正常,但如果有機會,我不會再採取該路線。互聯網被定期丟棄,SQL提供商不能很好地恢復。我們已經培訓了我們的客戶,以便在發生這種情況時再次嘗試我們這樣做是爲了避免爲我們的桌面應用程序創建Web服務。我們只是在服務器連接字符串中引用IP地址。有一整套安全原因不採取這條路線 - 我們對我們的安全設置和可能的風險感到滿意。最後,在沒有任何修改的情況下使用桌面應用程序的權衡並不值得擁有不穩定的產品。

+1

謝謝你。現在,這可能會得到賞金。 – Tobiasopdenbrouw 2010-12-01 08:24:16

2

由於新的數據庫服務器很可能是業界標準數據庫引擎之一,爲什麼不考慮將訪問應用程序鏈接到此數據庫服務器呢?這樣,您可以簡單地將數據以這種方式發送到SQL Server。

我不確定爲什麼你會考慮甚至建議在訪問支持到該數據庫引擎的ODBC鏈接時使用一組Web服務到數據庫引擎。因此,一種潛在的升級途徑是簡單地在訪問中發佈新的應用程序,該應用程序必須放置在與其當前現有數據文件(和應用程序)相同的目錄中。然後在啓動時,此應用程序可以簡單地將其所有表與您現有的數據庫重新鏈接,並附帶一組預錶鏈接到數據庫服務器。這在構建某種類型的Web服務方法方面的工作將會少得多。我認爲其中的一部分圍繞數據庫服務器託管的位置,但在大多數情況下,也許在遷移期間,數據庫服務器運行在每個人都可以訪問的地方。許多網絡提供商現在允許外部鏈接到他們的數據庫。

在數據庫服務器系統上,您將爲每個數據庫創建單獨的數據庫,或者如您在標題中所建議的那樣,它們都將被放置到一個數據庫中,這一點也不清楚。由於要放入一個數據庫中,因此在升遷過程中,會在此升遷過程中添加一個標識用戶位置或計劃區分每個數據庫的附加列,以區分每個用戶數據集。

這種類型的遷移很容易取決於開發人員用於新系統的模式和數據庫佈局。希望顯然它爲每個用戶或位置提供了條款,或者您計劃區分系統的每個用戶。因此,我不建議使用Web服務,但建議將Access應用程序的表與SQL服務器的實例(或任何您運行的服務器)連接起來。

+1

傳統應用程序(A1)是在用戶數據庫之上的Delphi應用程序。 (在考慮所有用戶時爲* 1000)。你的建議將涉及到改變德爾福應用程序(需要新版本或更新幫助工具,如我在選項1中所建議的),然後這需要建立並部署給用戶)。 A1(可能)不在受信任的環境中(就新的應用程序服務器而言,應該允許A1直接連接?),所以直接連接到生產數據庫是有問題的。個別遷移應該在項目後完成。是的,一個用於所有用戶ID的數據庫,aspnet成員資格。 – Tobiasopdenbrouw 2010-11-23 13:20:03

2

如何做到這一點將取決於必須執行的參照完整性和業務規則(如果有的話)。例如,數據庫合併時是否有重複的可能性?我收集他們正在從你有點神祕的陳述合併:「是的,一個數據庫的所有,用戶名的aspnet會員資格」。

+1

是的,數據庫將被合併。應該沒有重複的危險(源dbs中沒有,並且添加userid將防止重複合併後)。訪問數據庫沒有定義任何關係/引用(它在A1應用程序中處理),新系統將使用ORM(Telerik的OpenAccess)以及正確定義的關聯 – Tobiasopdenbrouw 2010-11-23 15:47:44

+2

只是要說清楚,你是說50個表中的每一個合併數據庫中的「鏡像」表定義,並且每個鏡像表將包含一個附加列以標識導入到其中的數據源(即,源-1到源〜1000),並且此附加列將成爲所有這50個表中的多部分主鍵的一部分?如果是這樣,當你說「通用數據不會被運輸」時,我不會遵循。 – Tim 2010-11-24 17:23:25

+0

是的,用戶特定的數據(這是50個表的子集)將按照您指示的方式傳輸。用於創建用戶特定數據的'通用'或'模板'數據(其餘表格)將已存在於A2數據庫中,無需傳輸。 – Tobiasopdenbrouw 2010-11-25 09:32:41

2

如果您無法控制A1的1000多個用戶,那麼您如何讓他們全部轉換爲A2?

你有沒有考慮給他們一個SQL Server Express數據庫升級,並讓他們在自己的服務器上託管Web應用程序?

+1

我不需要全部轉換爲A2 - 那些希望繼續使用傳統A1的用戶可以這樣做。 SQL服務器在自己的服務器上表達/託管是一個有趣的解決方案,但客戶希望獲得更直接的控制和編輯能力(遷移到集中位置的驅動程序之一)。 – Tobiasopdenbrouw 2010-12-01 08:22:48

相關問題