PowerDotNet平台化軟件架構設計與實現系列(02):數據庫管理平台


為了DB復用和簡化管理,我們對常見應用依賴的DB模塊進行更高級的提取和抽象。

雖然一些ORM可以簡化DB開發,但是我們還是需要進行改進和優化,否則應用越多,后期管理運維越混亂。

根據常見開發需要,數據庫連接串、數據庫元數據管理基本上是合格的開發人員必須要用到的功能。

一、數據庫連接

數據庫連接串管理起來不難,但是寫法隨意可能造成編程開發的混亂。

通常我們寫的應用程序,如果要訪問數據庫,除了調用遠程API服務,基本都會配置一個或多個數據庫連接串,有數據庫密碼安全需要的還需要配置安全模塊。隨着應用增多,數據庫連接串使用容易失控。我個人在某廠碰到過某大型CS結構的應用程序,WinForm客戶端赫然寫着各種數據庫連接串,真是呵呵噠。

我們通常按照實際BU業務進行模塊划分,然后將業務數據落地保存至各自的DB中。

PowerDotNet數據管理平台提供了一些簡單工具和接口,方便開發人員管理數據庫連接,我們把數據庫簡易連接功能稱為DBKey或DBRoute(本系列統稱為DBKey,感謝前廠友情提供命名),根據一個DBKey可以快速獲取實際連接串。

除了傳統的RDBMS關系型數據庫,也支持NoSQL、NewSQL、ETCD及Redis之類的緩存連接串管理。

根據DBKey的設計初衷,所有業務系統,只有DBKey根服務需要配置一次帶有用戶名和密碼的數據庫連接串,其他地方直接配置DBkey就可以把問題都搞定。

二、元數據

 1、數據庫服務器

2、字段管理

其他相關元數據管理,如:

(1)數據表

表和字段查詢

僅表查詢

(2)視圖

(3)存儲過程

(4)函數

(5)觸發器

相對而言觸發器已經用的非常少了。

(6)索引

PowerDotNet可以像主流RDBMS管理工具一樣實現對數據庫執行基本的增刪改查操作,元數據管理也在持續完善中,常見的死鎖分析、耗時統計、最耗IO的查詢、統計SQL語句執行次數、慢查詢等功能會根據不同數據庫類型陸續集成進來,最終目標是做到完善的DML、DDL和DCL管理控制。

PowerDotNet已經實現了對關系型數據庫SQLServer、MySQL(MariaDB)和PostgreSQL的元數據完全支持,也預留了接口用於擴展支持更多類型的數據庫。

 實際上數據庫管理非常復雜,個人開發只用到常用功能,后續文章還會提到如何高效開發數據庫應用。

三、代碼生成器

如果熟悉常見的代碼生成器,大家都能想到這主要是用來生成單表對應的實體、DAL、Json數據、DDL、存儲過程、常用SQL、Form表單、JS(或VUE、TypeScript等)和沒啥特殊邏輯的BLL的。

通常代碼生成器生成的業務邏輯可以忽略,不要低估業務邏輯的復雜度,根據經驗,寫業務邏輯代碼同樣需要非常出色扎實的編程功底,建議大家老老實實寫業務邏輯,而DAL層幾乎可以不用改動。

代碼生成器默認支持SQLServer、MySQL(MariaDB)、PostgreSQL三種數據庫的代碼生成,這也是PowerDotNet默認支持的三種常用關系型數據庫。

配合DBKey功能,可以省去一堆配置和代碼,對於一般應用的DAL開發那是相當的爽,誰用誰知道。

1、WinForm版代碼生成器

2、Asp.Net MVC版代碼生成器

相對WinForm版本,個人更推崇Web版本的代碼生成器。

(1)支持DBKey或者連接串直連模式

(2)豐富的代碼生成和下載選型

(3)代碼生成和元數據查看

查看生成代碼,下圖示例是生成的業務邏輯對象截圖。

很多代碼生成器生成的業務邏輯代碼都是直接調用DAL方法,其實非常讓人無語,完全沒有“業務邏輯”的存在。PowerDotNet代碼生成器生成的業務邏輯代碼,業務邏輯豐富,常見校驗、判重、查詢邊界、批量處理、緩存等應有盡有。

查看表結構

(4)數據庫文檔生成

對數據庫的管理和抽象,可以快速提高我們的開發效率。論針對數據庫的應用開發,配合PowerDotNet自研的ORM工具,很多SQL都可以簡化,DAL層完全可以自動化一行SQL不寫。不過這是另外的開發問題了,本文不做探討。

真實情況下,DB管理平台可以擴展開發出很多功能,比如數據元數據管理、SQL變更管理、SQL版本管理、Job管理等,本文示例圖片主要用於展示開發常用的功能,其他功能沒做介紹。

四、未來計划

目前PowerDotNet自研的數據庫管理平台,前端用到sql-formatter組件,后端SQL使用了C#版本的SQL formatter(TGSqlParser),對基本的常用SQL進行語法合規性校驗是沒什么大問題的,但是對於復雜SQL還是略有不足。

業務數據庫開發過程中常見的數據統計、動態執行萬能SQL、動態報表生成等雖然都有相應模塊支持,但是還不是很完善,主要是復雜度上去以后還是不容易維護。

YearningArchery是流行的SQL審核查詢和工單管理平台,數據庫管理的基本功能都有,前廠的數據庫工單系統就參考了這兩個開源項目。

PowerDotNet的DB管理平台未來也向DB工單功能靠攏,但是計划是獨立出一個工單系統來做(最近還很忙,數據庫工單系統這篇文章來不及寫了^_^),包含數據庫工單,將數據庫變更、版本控制和回滾這幾個最重要功能開發出來,而不是所有都集成在當前的數據庫管理平台里。

根據我的理解,數據庫管理平台可以最大程度降低數據庫開發的混亂無序程度,哪怕是非生產環境的數據庫也要嚴格管理起來。我在某廠的時候開發人員已經沒有可能直連數據庫“亂寫亂畫”了。開發使用數據庫管理平台的目標和意義,就是最大可能規范開發人員,解放DBA、運維人員和業務支持,咩哈哈。

參考:

https://github.com/zeroturnaround/sql-formatter

https://docs.microsoft.com/en-us/dotnet/api/microsoft.sqlserver.transactsql.scriptdom.tsqlparser

https://www.nuget.org/packages/gudusoft.gsqlparser

http://support.sqlparser.com

https://github.com/sqlparser


免責聲明!

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



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