資料庫型別應用程式 中介軟體 設計 研究。

2021-05-22 20:20:34 字數 1696 閱讀 3910

資料庫應用程式按照其所具有的層次一般分為c/s、n-tier,c/s 結構即是通常意義上的客戶端/伺服器結構,n-tier就是近幾年流行的多層框架結構。

本文即來討論資料庫類開發下多層架構的設計和開發。

一般的資料庫型別n-tier應用,一般分為3層,即客戶端、中介軟體、資料庫。我們在工作過程中也應用過4層模式,即客戶端、中介軟體業務層、中介軟體資料訪問層、資料庫,這種模式實際上也是變形了的3層模式。

實際開發過程中,由於資料庫型別應用程式開發的特點,我們實際上沒有那麼多業務需要交給中介軟體業務層來幫助完成,最後中介軟體業務層退化成了客戶端和中介軟體之間的乙個只起交接作用的層,只起到查詢語句和更新語句組織的作用。最終,這個業務層中介軟體充斥了大量的查詢語句和更新語句的組合邏輯。而由於客戶端每次修改或增加新的功能需要修改或增加新的語句的時候,我們就要在中間層中修改或增加介面,最終中間層形成了乙個上百乃至上千個介面的龐然大物。到最後,不論是要想復用**或者是修改其中的**都是一場惡夢。

在很多軟體企業中,中間層的維護時交由專人負責的,客戶端開發人員需要增加或修改介面都要先聯絡中介軟體維護人員。這種情況下由於軟體開發的特性就會造成客戶端開發經常需要等待中間層開發完成的情況,在等待的過程中造成了軟體開發的不連貫性,甚至造成軟體開發周期增長。當然也有很多企業是講中間層的**也同時交給客戶端開發人員,由客戶端開發人員自行維護中介軟體,這種情況下容易造成中介軟體開發參差不齊,中介軟體的穩定也成為很大的問題。

在上述種種問題的作用下,相當企業的多層軟體開發者出現了抵制三層的情緒,認為多層架構沒有給軟體開發帶來任何好處,不僅沒有好處還帶來了很多***。很多軟體企業也退回了c/s開發模式,已經使用多層模式開發完成的軟體業成為了雞肋,維護過程中更是出現將查詢和更新語句組織好只是使用中間層**執行一下的行為。

最初,軟體企業使用多層架構開發應用程式一般出於下面一種或幾種考慮:

1、跟風,盲目使用新技術;

2、為了減少資料庫連線;

3、使軟體**在多層架構下盡可能復用;

4、... ...

實際開發過程中,多層架構遇到的問題是:

1、介面眾多,因為在介面的樹林中找不到合適復用的那個介面,我們每次都建立新介面;

2、現階段為減少資料庫連線的需求已經不大,我們的伺服器已經足夠強勁;

3、我們的資料獲取、儲存邏輯一點沒有簡化,只是都放在中介軟體中了,甚至寫起來更複雜;

那麼我們有沒有可能設計一種中間層解決上面的問題呢?答案是肯定的。

1、將所有的查詢語句從中介軟體中分離,讓中介軟體可以動態的從配置檔案或者資料庫中載入查詢語句,然後根據客戶端傳入的條件組合成合法的查詢語句執行查詢,並將結果返回給客戶端。

2、將所有的更新語句從中介軟體中分離,讓中介軟體可以動態的從配置檔案或者資料庫中載入更新語句,然後根據客戶端傳入的修改資料組合成合法的更新語句執行更新,並將執行結果返回給客戶端。

這樣,由於sql語句的分離,使這些語句集中儲存,可以得到下面的好處:

1、技術負責人、dba可以單獨檢視語句,優化語句,配合語句管理工具,語句管理更簡單;

2、客戶端不需要處理任何查詢和儲存邏輯,只要關心客戶端的具體功能設計即可,設計效率可以提高10%;

3、中介軟體極為簡化,只有2-3個常用介面,語句復用度高,由於設計簡化同時也提高了可靠性、穩定性;

下面是我們基於上述理念開發的中介軟體的乙個演示:

將來有機會,我將披露這個中介軟體更多的技術細節。

面試 資料庫 中介軟體

lru是redis唯一支援的 演算法 no eviction 不刪除策略 對於所有的key allkeys lru 刪除最近訪問頻率低的key allkeys random 隨機刪除一部分key 對於設定expire volatile lru 刪除最近訪問頻率低的key volatile rando...

mysql proxy資料庫中介軟體架構

一 mysql proxy簡介 mysql proxy是mysql官方提供的mysql中介軟體服務,上游可接入若干個mysql client,後端可連線若干個mysql server。它使用mysql協議,任何使用mysql client的上游無需修改任何 即可遷移至mysql proxy上。mys...

mysql proxy資料庫中介軟體架構

一 mysql proxy簡介 mysql proxy是mysql官方提供的mysql中介軟體服務,上游可接入若干個mysql client,後端可連線若干個mysql server。它使用mysql協議,任何使用mysql client的上游無需修改任何 即可遷移至mysql proxy上。mys...