1. 程式人生 > >【一種通用性擴充套件性較強的資料庫解決方案】

【一種通用性擴充套件性較強的資料庫解決方案】

【資料庫部分】資料庫的表結構方面沒有特殊要求。所有操作都必須做成儲存過程供應用程式來呼叫。每個儲存過程的首引數是一個輸出的int,名為ret。其他引數排布在其後。儲存過程中所有操作使用事務包裹起來,並設定異常處理。處理方式是rollback,並設定ret為約定的預設錯誤碼(實際使用時設定為-1)儲存過程嚮應用程式返回資料時,用“select 行標識,其他欄位”的方式。其中,行標識的作用是指定該條資料的型別。這個類似網路通訊封包的命令號的概念。ret為OK(實際使用時值為0)表示儲存過程無錯執行。其他值表示有錯誤。儲存過程要返回錯誤時,設定ret為要返回的錯誤號碼,並rollback,然後leave最高層begin,end。【應用程式部分】
呼叫儲存過程時,使用統一的介面,呼叫引數打成一個包(實際使用時採用網路封包相同的容器)。返回的資料行,通過行首的“行標識”欄位來識別其資料含義。當返回的ret不是OK值(0)時,則不處理返回的任何資料行。【優化】建立資料庫連線池。線上程池中進行儲存過程的呼叫。並對返回資料進行打包(vector)在邏輯執行緒中進行資料的處理。使用協程技術,將非同步的資料庫操作變成同步的執行順序。【通用性和擴充套件性】呼叫時使用的是封包容器,所以整個應用程式(一般為伺服器應用)資料容器都非常統一,而且介面也可以做成非常一致。簡單的說就是像髮網絡封包一樣調資料庫。返回的資料,都是帶“命令號”的,可以用處理網路封包的方式去處理。在伺服器應用中,也是能夠和各種服務邏輯統一在一起。要擴充套件資料庫操作,只要寫儲存過程,並處理新增的資料命令號即可,減少了很多重複的工作,提高了資料庫相關邏輯的開發速度。