【數(shù)據(jù)庫(kù)部分】數(shù)據(jù)庫(kù)的表結(jié)構(gòu)方面沒(méi)有特殊要求。
所有操作都必須做成存儲(chǔ)過(guò)程供應(yīng)用程序來(lái)調(diào)用。
每個(gè)存儲(chǔ)過(guò)程的首參數(shù)是一個(gè)輸出的int,名為ret。其他參數(shù)排布在其后。
存儲(chǔ)過(guò)程中所有操作使用事務(wù)包裹起來(lái),并設(shè)置異常處理。處理方式是rollback,并設(shè)置ret為約定的缺省錯(cuò)誤碼(實(shí)際使用時(shí)設(shè)置為-1)
存儲(chǔ)過(guò)程向應(yīng)用程序返回?cái)?shù)據(jù)時(shí),用“select 行標(biāo)識(shí),其他字段”的方式。其中,行標(biāo)識(shí)的作用是指定該條數(shù)據(jù)的類(lèi)型。這個(gè)類(lèi)似網(wǎng)絡(luò)通信封包的命令號(hào)的概念。
ret為OK(實(shí)際使用時(shí)值為0)表示存儲(chǔ)過(guò)程無(wú)錯(cuò)執(zhí)行。其他值表示有錯(cuò)誤。
存儲(chǔ)過(guò)程要返回錯(cuò)誤時(shí),設(shè)置ret為要返回的錯(cuò)誤號(hào)碼,并rollback,然后leave最高層begin,end。
【應(yīng)用程序部分】
調(diào)用存儲(chǔ)過(guò)程時(shí),使用統(tǒng)一的接口,調(diào)用參數(shù)打成一個(gè)包(實(shí)際使用時(shí)采用網(wǎng)絡(luò)封包相同的容器)。
返回的數(shù)據(jù)行,通過(guò)行首的“行標(biāo)識(shí)”字段來(lái)識(shí)別其數(shù)據(jù)含義。
當(dāng)返回的ret不是OK值(0)時(shí),則不處理返回的任何數(shù)據(jù)行。
【優(yōu)化】
建立數(shù)據(jù)庫(kù)連接池。
在線程池中進(jìn)行存儲(chǔ)過(guò)程的調(diào)用。并對(duì)返回?cái)?shù)據(jù)進(jìn)行打包(vector)
在邏輯線程中進(jìn)行數(shù)據(jù)的處理。
使用協(xié)程技術(shù),將異步的數(shù)據(jù)庫(kù)操作變成同步的執(zhí)行順序。
【通用性和擴(kuò)展性】
調(diào)用時(shí)使用的是封包容器,所以整個(gè)應(yīng)用程序(一般為服務(wù)器應(yīng)用)數(shù)據(jù)容器都非常統(tǒng)一,而且接口也可以做成非常一致。簡(jiǎn)單的說(shuō)就是像發(fā)網(wǎng)絡(luò)封包一樣調(diào)數(shù)據(jù)庫(kù)。
返回的數(shù)據(jù),都是帶“命令號(hào)”的,可以用處理網(wǎng)絡(luò)封包的方式去處理。在服務(wù)器應(yīng)用中,也是能夠和各種服務(wù)邏輯統(tǒng)一在一起。
要擴(kuò)展數(shù)據(jù)庫(kù)操作,只要寫(xiě)存儲(chǔ)過(guò)程,并處理新增的數(shù)據(jù)命令號(hào)即可,減少了很多重復(fù)的工作,提高了數(shù)據(jù)庫(kù)相關(guān)邏輯的開(kāi)發(fā)速度。