一種軟體多資料庫支援實現方式介紹
來源:互聯網
上載者:User
資料|資料庫 當我們以一個項目的方式來完成軟體設計開發時,通常開發的具體環境已經確定,採用的資料庫也已經確定,因此不存在支援多資料庫方面的需求。但是,如果一個軟體以產品的方式出現,需要以同一產品適應不同企業的IT環境時,多資料庫支援將是一個非常重要的需求;如何?多資料庫支援,將直接關係到產品的品質及實施和維護成本,關係到產品推廣的範圍和最終的成敗;本文將就當前常用的多資料庫實現方式做一簡要介紹,並以筆者所在公司開發的某軟體中採用的多資料庫支援實現技術做一介紹。
實現了多資料庫支援的軟體產品通常採用以下幾種方式:
1.統採用分層結構,為每種資料庫實現一套資料訪問層。該方案具有實現簡單、結構清晰的優點,但也具有很多問題。軟體中的某功能點修改可能牽涉到多套資料訪問層的修改,同時,也會給測試帶來成倍增長的工作量;由於實現同樣資料訪問功能需要對不同資料庫編碼,所以肯定會帶來更大的編碼量、引入更多的Bug,影響軟體品質。
2.系統採用的SQL語句置於系統外部,SQL語句分為多套,每種資料庫維護一套SQL語句。該實現方式可以在部分情況下達到不修改代碼而調整系統的目的、設定在簡單的情況下可達到不修改代碼而增加一種新資料庫支援的目的。但該實現方式存在調試困難、維護易出錯的缺陷。同時,如果系統較複雜的情況下,難以體現出其優點,實用性不高。
3.採用標準SQL語句實現多資料庫支援。該方法是談論較多的方法,但真正採用該方法實現了多資料庫支援的軟體系統的廠商並不多。原因在於各資料庫廠商對標準SQL的支援是不完全的,而且,對系統開發人員而言,要求其能準確區分出那些是標準SQL,那些是特定資料庫SQL,這本身並不現實;而一旦採用了特定資料庫SQL而測試又不是非常充分的話,就會埋下很多定時炸彈。
筆者所在公司在實現eHR軟體多資料庫支援功能前,提出以下要求:
1.能很方便的實現對新資料庫的支援,最好能達到不修改採用該方法實現的系統的代碼就能增加對新資料庫支援。
2.系統修改、維護容易,編碼工作量最好與支援的資料庫種類多少無關。
針對以上的一些,我們提出了以下的多資料庫支援的實現方案:
解決方案由三部分構成:SQL實體描述對象、SQL語句產生器、SQL實體執行器;這些部分構成一個介於資料訪問層與資料庫間的新的軟體層(Data I/O Controler),供資料訪問層調用;
與通常的多層體繫結構軟體比較起來,該方案不同之處在於資料訪問層訪問資料庫方法並不是直接執行SQL語句,而是以SQL實體物件的方式描述出對應SQL語句的語意;然後調用SQL實體執行器對SQL實體描述對象處理,產生對應的資料類型的SQL語句,並執行。在SQL執行器中,為了能支援多資料庫,需要對沒種資料庫實現一個以獨立DLL方式存在的Adapter,該Adapter接收傳入的SQL實體物件,並能根據SQL實體物件描述的語意,產生符合對應資料庫文法的SQL語句。Adapter需要實現一系列預先定義好的介面,以方便SQL實體執行器的調用;SQL實體執行器在運行期間才與具體Adapter關聯,不必事Crowdsourced Security Testing道由何種Adapter處理SQL實體物件;當需要增加對新資料庫的支援時,不必修改任何原有軟體,只需要實現一個新的Adapter就可;
該方案將支援多資料庫的複雜性與具體軟體隔離開來,將複雜性由通常的分佈於軟體各處變更為於一點集中處理,可使維護更容易、編碼量大大降低,系統可靠性更高;