由 超級傳送帶 談系統中如何使用資料庫

2021-09-05 19:28:16 字數 1673 閱讀 2319

看過金同學的【超級傳送帶】這篇post及其裡面的reply,我又要深有所感,於是有話不得不發了。對系統設計來說之前我也說過沒有一定之規,不通的系統設計的前提和背景有所區別,那麼設計的方式有可能南轅北轍。就算是圍繞資料庫,以資料為核心的系統也會因為設計的出發點不通而產生很多相反的看法。那麼我還是首先設定本次討論的前提:乙個以資料庫為儲存手段,以資料為核心的應用程式,比如說乙個電子商務系統(又比如newegg,不要誤會,我不在newegg工作,只是有所了解)。

之前我提到過系統設計的取向問題,我們是先研究業務模型,先用oo的方法建模,然後再設計資料如何在資料庫儲存,還是反過來。這兩種方式都不影響我們在系統中使用oo、使用設計模式、採用分層的設計。但是我們的討論中最大的誤會就經常因為設計的角度不同而產生。

一種方式是資料庫參與到業務邏輯當中來,因為現在的資料庫和基於關係模型的資料庫查詢語言具備強大的功能,通過關係模型可以將一些業務邏輯直接在資料庫就實現了。在某些業務的邏輯計算中,關係模型具備一些天然的優勢,而且當開發團隊或者業務支撐團隊中的sql能力比較強的時候,大多會偏向用資料庫來處理業務邏輯的方式。儲存過程的優勢在速度和業務邏輯的靈活性方面,sql在資料庫在很多任務具的支援下也比較容易做效能調優,但是前提是必須要有足夠強大的dba,否則等於空談。這類方式的缺點也很明顯,乙個是對人員要求的提高,其二是對職責分配的劃分模糊,乙個問題到底在資料庫中解決還是在程式中解決,往往需要經過很多討論,其三就是可維護性的問題,維護儲存過程是乙個很講究的事情,我見過2萬行的儲存過程,要維護這樣的東西簡直可以稱之為噩夢,特別是在人員更替的時候,經過多次轉手後的儲存過程可能會因為某個比較鱉足的dba而搞砸。程式**尚且如此,儲存過程就更加令人鬱悶。最後是和其他系統的互動問題,在乙個業務邏輯的處理過程中涉及到第三方的諸如webservice之類的介面,是很難在儲存過程中去呼叫的。最大的問題是會造成資料訪問的**淪為連線程式裡的邏輯與儲存過程裡邏輯的介面,用dal來作為介面會大大增加系統的耦合度,造成的後果可能就是,在某些時候業務邏輯修改後,dba忙活半天,程式設計師也得跟著加班。

第二種方式就是徹底把資料庫當作資料持久化的最終目的地,而業務邏輯就全部放在了**中。之前的一篇post裡面,怪怪提到過資料庫裡也會包含業務邏輯的資訊。對於這點其實是很正常的,在這種設計方式的時候,本來資料庫的結構就是由業務模型分析出來,資料庫所儲存的都是業務資料,當然會包含業務邏輯的資訊咯。其實我更加傾向於這種方式,關於這種方式的設計前面大家都討論得比較多了我就不浪費筆墨在這裡。不過純粹的這類方式等於放棄了關係模型的強大業務計算能力。

接下來我們如何即避免第一種方式的缺點,但是有不要浪費資料庫的能力呢?我想到乙個辦法是利用資料庫將查詢發布為webservice的功能,將儲存過程發布成為乙個webservice。然後在業務邏輯層去呼叫(純粹嚇吹 的,我沒試過這種方式,就今晚籃球贏了後才想到的),這樣避免了dal與邏輯的耦合,又不會浪費強大的儲存過程。

最後我們看了這兩種方式後我們回過頭來看看金同學的【超級傳送帶】的想法。金同學想通過【超級傳送帶】來實現從ui到資料庫的一條龍式服務。這裡我猜測金同學可能常常乙個人孤軍奮戰,所以分層對他來說感覺就和脫了褲子放屁一樣的麻煩。不過這樣子橫跨多個領域的元件(ui->邏輯->資料)對擴充套件性和靈活性的要求太高了,也許對金同學當前的業務來說可能還能勝任,但是對於金同學沒有接觸過的領域來說就顯得不是那麼的好用了,那麼作為乙個小眾或者個人的玩具就顯得不是那麼有吸引力了,所謂獨樂樂不如眾樂樂嘛。那麼金同學這種資料庫就是邏輯的理論有點像用元件代替了第一種方式中的dba的地位。那麼我的觀點也就不言而喻了。

如何使用Python傳送帶附件的郵件

1 首先要理解乙個常識 rfc rfc the request for comments 是乙個關於internet各種標準的文件,定義了很多的網路協議和資料格式,標準的internet郵件遵從rfc2822 internet message format 等幾個文件,其中rfc822中描述了郵件頭...

Windows系統中如何使用Pycharm新手教程

pycharm 是一款功能強大的 python 編輯器,具有跨平台性,鑑於目前最新版 pycharm 使用教程較少,為了節約時間,來介紹一下 pycharm 在 windows下是如何安裝的。進入該 後,我們會看到如下介面 professional 表示專業版,community 是社群版,推薦安裝...

Linux系統中如何新增 使用硬碟

前提條件 在裝有linux作業系統的主機中,新增一塊物理硬碟。步驟 1 開機文字模式下啟動linux作業系統,進入 dev,檢視新增的硬碟裝置檔案 ls hdb 2 對硬碟hdb進行分割槽操作 1 輸入命令 fdisk dev sdb,進入分割槽命令模式。2 在command m for help ...