專利名稱:對數(shù)據(jù)庫進(jìn)行操作的方法和系統(tǒng)的制作方法
對數(shù)據(jù)庫進(jìn)行操作的方法和系統(tǒng)
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)絡(luò)技術(shù)領(lǐng)域,特別涉及一種對數(shù)據(jù)庫進(jìn)行操作的方法和系統(tǒng)。背景技術(shù):
伴隨著互聯(lián)網(wǎng)的告訴發(fā)展,用戶群體的變更、產(chǎn)品的更新、網(wǎng)站體驗(yàn)的升級需要對用戶中心保持敏感性,根據(jù)市場需求調(diào)整用戶中心發(fā)展的腳步。為了提高用戶的忠誠度、粘合度、滿意度和產(chǎn)品體驗(yàn),各種以更個性化的操作、更豐富的內(nèi)容、更活躍的互動形式的專業(yè)化綜合性用戶中心網(wǎng)站應(yīng)運(yùn)而生,例如近期涌現(xiàn)出的各種電子商務(wù)網(wǎng)站、微博網(wǎng)站等。上述用戶中心網(wǎng)站需要通過對數(shù)據(jù)庫進(jìn)行操作實(shí)現(xiàn)對用戶信息、行為的記錄,同時需要保證用戶信息的安全性。現(xiàn)有對數(shù)據(jù)庫進(jìn)行操作的方式大多使用瀏覽器/服務(wù)器模式,即b/s模式,用戶通過瀏覽器向服務(wù)器端發(fā)送操作請求,服務(wù)器端利用腳本直接對數(shù)據(jù)庫進(jìn)行操作,上述腳本包括超級文本預(yù)處理語言(PHP)、.net、java、pyth0n等。這種服務(wù)器端直接操作數(shù)據(jù)庫的方式具有以下缺陷1)服務(wù)器端直接操作數(shù)據(jù)庫,對數(shù)據(jù)庫中的數(shù)據(jù)無法實(shí)現(xiàn)比較安全的保護(hù)。2) 一旦數(shù)據(jù)庫的項(xiàng)目架構(gòu)發(fā)生修改,則需要同時對各前端服務(wù)器的腳本進(jìn)行修改,不利于項(xiàng)目的升級和擴(kuò)展。
發(fā)明內(nèi)容本發(fā)明提供了一種對數(shù)據(jù)庫進(jìn)行操作的方法和系統(tǒng),以便于提高數(shù)據(jù)庫的安全性和擴(kuò)展性。具體技術(shù)方案如下一種對數(shù)據(jù)庫進(jìn)行操作的方法,應(yīng)用于包含前端服務(wù)器、網(wǎng)關(guān)數(shù)據(jù)庫中間件和數(shù)據(jù)庫層的系統(tǒng);該方法包括Si、所述前端服務(wù)器將來自瀏覽器的操作請求發(fā)送給所述網(wǎng)關(guān)數(shù)據(jù)庫中間件;S2、所述網(wǎng)關(guān)數(shù)據(jù)庫中間件在對所述前端服務(wù)器進(jìn)行權(quán)限認(rèn)證通過后,向所述數(shù)據(jù)庫層發(fā)送操作請求;S3、所述數(shù)據(jù)庫層根據(jù)所述操作請求中的操作目標(biāo)信息對數(shù)據(jù)庫進(jìn)行操作并向所述網(wǎng)關(guān)數(shù)據(jù)庫中間件返回操作結(jié)果;S4、所述網(wǎng)關(guān)數(shù)據(jù)庫中間件按照與所述前端服務(wù)器約定的格式,向所述前端服務(wù)器返回操作結(jié)果。根據(jù)本發(fā)明一優(yōu)選實(shí)施例,如果所述操作請求為讀數(shù)據(jù)請求,則所述操作結(jié)果為所述數(shù)據(jù)庫層從數(shù)據(jù)庫讀取的數(shù)據(jù);如果所述操作請求為寫數(shù)據(jù)請求,則所述操作結(jié)果為所述數(shù)據(jù)庫層對所述數(shù)據(jù)庫寫成功或?qū)懯〉慕Y(jié)果;如果所述操作請求為修改數(shù)據(jù)請求,則所述操作結(jié)果為所述數(shù)據(jù)庫層對所述數(shù)據(jù)庫修改成功或修改失敗的結(jié)果;如果所述操作請求為搜索數(shù)據(jù)請求,則所述操作結(jié)果為所述數(shù)據(jù)庫層對所述數(shù)據(jù)庫進(jìn)行搜索后得到的搜索結(jié)果。根據(jù)本發(fā)明一優(yōu)選實(shí)施例,在所述步驟S4之后還包括如果所述操作請求為讀數(shù)據(jù)請求或搜索數(shù)據(jù)請求,則所述前端服務(wù)器將所述操作目標(biāo)信息和操作數(shù)據(jù)發(fā)送給緩存單元,由所述緩存單元存入內(nèi)存;在所述步驟Sl之前還包括所述前端服務(wù)器判斷所述操作請求的類型,如果是讀數(shù)據(jù)請求或搜索數(shù)據(jù)請求, 則將操作請求中攜帶的操作目標(biāo)信息發(fā)送給緩存單元;所述緩存單元判斷內(nèi)存中是否存在所述操作目標(biāo)信息對應(yīng)的操作數(shù)據(jù),如果存在,則將所述對應(yīng)的操作數(shù)據(jù)通過響應(yīng)返回給所述前端服務(wù)器;否則向所述前端服務(wù)器返回空數(shù)據(jù)的響應(yīng);所述前端服務(wù)器如果接收到包含所述對應(yīng)的操作數(shù)據(jù)的響應(yīng),則將所述對應(yīng)的操作數(shù)據(jù)發(fā)送給瀏覽器,結(jié)束流程;否則繼續(xù)執(zhí)行所述步驟Sl ;其中,所述讀數(shù)據(jù)請求對應(yīng)的操作數(shù)據(jù)為所述數(shù)據(jù)庫層從數(shù)據(jù)庫讀取的數(shù)據(jù),所述搜索數(shù)據(jù)請求對應(yīng)的操作數(shù)據(jù)為所述數(shù)據(jù)庫層對所述數(shù)據(jù)庫進(jìn)行搜索后得到的搜索結(jié)^ ο根據(jù)本發(fā)明一優(yōu)選實(shí)施例,步驟S2中所述權(quán)限認(rèn)證具體為如果所述網(wǎng)關(guān)數(shù)據(jù)庫中間件確定操作請求中所述前端服務(wù)器的IP地址為外網(wǎng)地址,則權(quán)限認(rèn)證失??;否則權(quán)限認(rèn)證通過。根據(jù)本發(fā)明一優(yōu)選實(shí)施例,該方法還包括如果所述網(wǎng)關(guān)數(shù)據(jù)庫中間件接收到的操作請求的并發(fā)數(shù)量超過預(yù)設(shè)的上限值,則不再接收操作請求,直至并發(fā)請求數(shù)量回落到所述上限值以下。根據(jù)本發(fā)明一優(yōu)選實(shí)施例,所述數(shù)據(jù)庫層包括主數(shù)據(jù)庫層和從數(shù)據(jù)庫層,所述數(shù)據(jù)庫分為讀庫和寫庫;所述網(wǎng)關(guān)數(shù)據(jù)庫中間件將讀數(shù)據(jù)請求和搜索數(shù)據(jù)請求發(fā)送給所述從數(shù)據(jù)庫層,將寫數(shù)據(jù)請求和修改數(shù)據(jù)請求發(fā)送給所述主數(shù)據(jù)庫層;所述主數(shù)據(jù)庫層在所述寫庫中執(zhí)行寫數(shù)據(jù)操作或者修改數(shù)據(jù)操作之后,將操作信息寫入BINLOG中,所述主數(shù)據(jù)庫層的IO進(jìn)程從BINLOG的預(yù)設(shè)位置開始讀取BINLOG中的數(shù)據(jù);所述從數(shù)據(jù)庫層中的進(jìn)程a定時連接所述主數(shù)據(jù)庫層的IO進(jìn)程,從BINLOG中讀取數(shù)據(jù)并寫入從數(shù)據(jù)庫層的RELAYL0G中;所述從數(shù)據(jù)庫層中的進(jìn)程b將RELAYL0G中的數(shù)據(jù)讀入所述讀庫,在接收到讀數(shù)據(jù)請求后,從所述讀庫中讀取相應(yīng)數(shù)據(jù)并返回給所述網(wǎng)關(guān)數(shù)據(jù)庫中間件,或者接收到搜索數(shù)據(jù)請求后,從所述讀庫中搜索相應(yīng)數(shù)據(jù)并返回給所述網(wǎng)關(guān)數(shù)據(jù)庫中間件。根據(jù)本發(fā)明一優(yōu)選實(shí)施例,所述從數(shù)據(jù)庫層為多個,所述網(wǎng)關(guān)數(shù)據(jù)庫中間件在多個從數(shù)據(jù)庫層中實(shí)現(xiàn)讀數(shù)據(jù)請求或搜索數(shù)據(jù)請求的負(fù)載均衡。根據(jù)本發(fā)明一優(yōu)選實(shí)施例,該方法還包括所述網(wǎng)關(guān)數(shù)據(jù)庫中間件的主進(jìn)程在運(yùn)行后,產(chǎn)生一個子進(jìn)程并關(guān)閉所述主進(jìn)程,由所述子進(jìn)程作為守護(hù)進(jìn)程,所述守護(hù)進(jìn)程創(chuàng)建套接字socket監(jiān)聽所述操作請求;所述守護(hù)進(jìn)程每監(jiān)聽到一個操作請求,都創(chuàng)建所述守護(hù)進(jìn)程的一個子進(jìn)程,并將操作請求交由該創(chuàng)建的子進(jìn)程處理,當(dāng)該創(chuàng)建的子進(jìn)程完成操作請求的處理后自動退出, 所述守護(hù)進(jìn)程刪除退出的子進(jìn)程。一種對數(shù)據(jù)庫進(jìn)行操作的系統(tǒng),該系統(tǒng)包括前端服務(wù)器、網(wǎng)關(guān)數(shù)據(jù)庫中間件和數(shù)據(jù)庫層;所述前端服務(wù)器,用于將來自瀏覽器的操作請求發(fā)送給所述網(wǎng)關(guān)數(shù)據(jù)庫中間件, 接收所述網(wǎng)關(guān)數(shù)據(jù)庫中間件發(fā)送的操作結(jié)果;所述網(wǎng)關(guān)數(shù)據(jù)庫中間件,用于接收到所述操作請求時,在對所述前端服務(wù)器進(jìn)行權(quán)限認(rèn)證通過后,向所述數(shù)據(jù)庫層發(fā)送所述操作請求;接收所述數(shù)據(jù)庫層返回的操作結(jié)果, 按照與所述前端服務(wù)器約定的格式,向所述前端服務(wù)器發(fā)送所述操作結(jié)果;所述數(shù)據(jù)庫層,用于根據(jù)所述操作請求中的操作目標(biāo)信息對數(shù)據(jù)庫進(jìn)行操作并向所述網(wǎng)關(guān)數(shù)據(jù)庫中間件返回操作結(jié)果。根據(jù)本發(fā)明一優(yōu)選實(shí)施例,如果所述操作請求為讀數(shù)據(jù)請求,則所述操作結(jié)果為所述數(shù)據(jù)庫層從數(shù)據(jù)庫讀取的數(shù)據(jù);如果所述操作請求為寫數(shù)據(jù)請求,則所述操作結(jié)果為所述數(shù)據(jù)庫層對所述數(shù)據(jù)庫寫成功或?qū)懯〉慕Y(jié)果;如果所述操作請求為修改數(shù)據(jù)請求,則所述操作結(jié)果為所述數(shù)據(jù)庫層對所述數(shù)據(jù)庫修改成功或修改失敗的結(jié)果;如果所述操作請求為搜索數(shù)據(jù)請求,則所述操作結(jié)果為所述數(shù)據(jù)庫層對所述數(shù)據(jù)庫進(jìn)行搜索后得到的搜索結(jié)果。根據(jù)本發(fā)明一優(yōu)選實(shí)施例,該系統(tǒng)還包括緩存單元;如果所述操作請求為讀數(shù)據(jù)請求或搜索數(shù)據(jù)請求,則所述前端服務(wù)器,還用于接收到所述網(wǎng)關(guān)數(shù)據(jù)庫中間件發(fā)送的操作結(jié)果后,將所述操作目標(biāo)信息和操作數(shù)據(jù)發(fā)送給所述緩存單元;在將所述操作請求發(fā)送給所述網(wǎng)關(guān)數(shù)據(jù)庫中間件之前,將操作請求中攜帶的操作目標(biāo)信息發(fā)送給緩存單元;如果接收到所述緩存單元發(fā)送的包含操作數(shù)據(jù)的響應(yīng),則將操作數(shù)據(jù)發(fā)送給瀏覽器,結(jié)束操作,否則繼續(xù)執(zhí)行將所述操作請求發(fā)送給所述網(wǎng)關(guān)數(shù)據(jù)庫中間件的操作;所述緩存單元,用于將所述前端服務(wù)器發(fā)送的操作目標(biāo)信息和操作數(shù)據(jù)存入內(nèi)存;接收到所述操作請求中攜帶的操作目標(biāo)信息后,判斷內(nèi)存中是否存在該操作目標(biāo)信息對應(yīng)的操作數(shù)據(jù),如果存在,則將所述對應(yīng)的操作數(shù)據(jù)通過響應(yīng)返回給所述前端服務(wù)器;否則向所述前端服務(wù)器返回空數(shù)據(jù)的響應(yīng);其中,所述讀數(shù)據(jù)請求對應(yīng)的操作數(shù)據(jù)為所述數(shù)據(jù)庫層從數(shù)據(jù)庫讀取的數(shù)據(jù),所述搜索數(shù)據(jù)請求對應(yīng)的操作數(shù)據(jù)為所述數(shù)據(jù)庫層對所述數(shù)據(jù)庫進(jìn)行搜索后得到的搜索結(jié)
根據(jù)本發(fā)明一優(yōu)選實(shí)施例,所述網(wǎng)關(guān)數(shù)據(jù)庫中間件在進(jìn)行權(quán)限認(rèn)證時,如果確定操作請求中所述前端服務(wù)器的IP地址為外網(wǎng)地址,則權(quán)限認(rèn)證失??;否則權(quán)限認(rèn)證通過。根據(jù)本發(fā)明一優(yōu)選實(shí)施例,所述網(wǎng)關(guān)數(shù)據(jù)庫中間件如果接收到的操作請求的并發(fā)數(shù)量超過預(yù)設(shè)的上限值,則不再接收操作請求,直至并發(fā)請求數(shù)量回落到所述上限值以下。
根據(jù)本發(fā)明一優(yōu)選實(shí)施例,所述數(shù)據(jù)庫層包括主數(shù)據(jù)庫層和從數(shù)據(jù)庫層,所述數(shù)據(jù)庫分為讀庫和寫庫;所述網(wǎng)關(guān)數(shù)據(jù)庫中間件將讀數(shù)據(jù)請求和搜索數(shù)據(jù)請求發(fā)送給所述從數(shù)據(jù)庫層,將寫數(shù)據(jù)請求和修改數(shù)據(jù)請求發(fā)送給所述主數(shù)據(jù)庫層;所述主數(shù)據(jù)庫層在所述寫庫中執(zhí)行寫數(shù)據(jù)操作或者修改數(shù)據(jù)操作之后,將操作信息寫入BINLOG中,所述主數(shù)據(jù)庫層的IO進(jìn)程從BINLOG的預(yù)設(shè)位置開始讀取BINLOG中的數(shù)據(jù);所述從數(shù)據(jù)庫層中的進(jìn)程a定時連接所述主數(shù)據(jù)庫層的IO進(jìn)程,從BINLOG中讀取數(shù)據(jù)并寫入從數(shù)據(jù)庫層的RELAYL0G中;所述從數(shù)據(jù)庫層中的進(jìn)程b將RELAYL0G中的數(shù)據(jù)讀入所述讀庫,在接收到讀數(shù)據(jù)請求后,從所述讀庫中讀取相應(yīng)數(shù)據(jù)并返回給所述網(wǎng)關(guān)數(shù)據(jù)庫中間件,或者接收到搜索數(shù)據(jù)請求后,從所述讀庫中搜索相應(yīng)數(shù)據(jù)并返回給所述網(wǎng)關(guān)數(shù)據(jù)庫中間件。根據(jù)本發(fā)明一優(yōu)選實(shí)施例,所述從數(shù)據(jù)庫為多個,所述網(wǎng)關(guān)數(shù)據(jù)庫中間件在多個從數(shù)據(jù)庫層中實(shí)現(xiàn)讀數(shù)據(jù)請求或搜索數(shù)據(jù)請求的負(fù)載均衡。根據(jù)本發(fā)明一優(yōu)選實(shí)施例,所述網(wǎng)關(guān)數(shù)據(jù)庫中間件的主進(jìn)程在運(yùn)行后,產(chǎn)生一個子進(jìn)程并關(guān)閉所述主進(jìn)程,由所述子進(jìn)程作為守護(hù)進(jìn)程;所述守護(hù)進(jìn)程創(chuàng)建套接字socket監(jiān)聽所述操作請求,每監(jiān)聽到一個操作請求,都創(chuàng)建所述守護(hù)進(jìn)程的一個子進(jìn)程,并將操作請求交由該創(chuàng)建的子進(jìn)程處理,當(dāng)該創(chuàng)建的子進(jìn)程完成操作請求的處理后自動退出,所述守護(hù)進(jìn)程刪除退出的子進(jìn)程。由以上技術(shù)方案可以看出,本發(fā)明通過網(wǎng)關(guān)數(shù)據(jù)庫中間件將對數(shù)據(jù)庫的操作從前端服務(wù)器中獨(dú)立出來,作為前端服務(wù)器與數(shù)據(jù)庫之間的操作接口,避免了前端服務(wù)器直接操作數(shù)據(jù)庫,在網(wǎng)關(guān)數(shù)據(jù)庫中間件上實(shí)現(xiàn)權(quán)限控制,有效地保證了數(shù)據(jù)庫的訪問安全。在數(shù)據(jù)庫的項(xiàng)目架構(gòu)發(fā)生變化時,例如編程使用的語言發(fā)生變化,操作接口發(fā)生變化等,無需對各前端服務(wù)器的腳本逐一進(jìn)行修改,只需要在網(wǎng)關(guān)數(shù)據(jù)庫中間件上進(jìn)行相應(yīng)的修改即可, 從而更有利于項(xiàng)目的升級和擴(kuò)展。
圖1為本發(fā)明實(shí)施例提供的系統(tǒng)結(jié)構(gòu)圖;圖2為本發(fā)明實(shí)施例一提供的主要方法流程圖;圖3為本發(fā)明實(shí)施例二提供的查看站內(nèi)信的方法流程圖;圖4為本發(fā)明實(shí)施例三提供的寫博客的方法流程圖。
具體實(shí)施方式為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面結(jié)合附圖和具體實(shí)施例對本發(fā)明進(jìn)行詳細(xì)描述。在本發(fā)明實(shí)施例中在前端服務(wù)器和數(shù)據(jù)庫之間設(shè)置網(wǎng)關(guān)數(shù)據(jù)庫中間件,前端服務(wù)器不再直接操作數(shù)據(jù)庫,而是通過訪問網(wǎng)關(guān)數(shù)據(jù)庫中間件來實(shí)現(xiàn)對數(shù)據(jù)庫的操作,也就是說,網(wǎng)關(guān)數(shù)據(jù)庫中間件為前端服務(wù)器操作數(shù)據(jù)庫提供了接口。系統(tǒng)結(jié)構(gòu)如圖1所示,在網(wǎng)關(guān)數(shù)據(jù)庫中間件上實(shí)現(xiàn)訪問權(quán)限的驗(yàn)證、根據(jù)前端服務(wù)器的操作請求對數(shù)據(jù)庫進(jìn)行操作以及返回操作結(jié)果的功能。另外,為了提高訪問性能,前端服務(wù)器可以將讀取成功的數(shù)據(jù)發(fā)送給緩存單元,由緩存單元將讀取成功的數(shù)據(jù)送入內(nèi)存中進(jìn)行緩存,以方便短期內(nèi)的再次讀取。在內(nèi)存中數(shù)據(jù)設(shè)置有生存期,超出生存期的數(shù)據(jù)自動被刪除。下面基于上述系統(tǒng)結(jié)構(gòu)結(jié)合實(shí)施例一對操作數(shù)據(jù)庫的主要方法進(jìn)行描述。實(shí)施例一、圖2為本發(fā)明實(shí)施例一提供的主要方法流程圖,如圖2所示,該方法主要包括以下步驟步驟201 前端服務(wù)器接收來自瀏覽器的操作請求。本發(fā)明實(shí)施例仍基于b/s模式,用戶通過瀏覽器對用戶中心網(wǎng)站的前端服務(wù)器發(fā)送操作請求,該操作請求包括但不限于讀數(shù)據(jù)操作、寫數(shù)據(jù)操作、修改數(shù)據(jù)操作或者搜索數(shù)據(jù)操作等。例如,查看信箱、查看博客等操作數(shù)據(jù)讀數(shù)據(jù)操作,用戶信息設(shè)置、寫博客等屬于寫數(shù)據(jù)操作,修改用戶密碼、修改博客內(nèi)容等屬于修改數(shù)據(jù)操作,搜索好友、搜索博客等屬于搜索數(shù)據(jù)操作。步驟202 前端服務(wù)器判斷操作請求的類型,如果是讀數(shù)據(jù)請求或搜索數(shù)據(jù)請求, 則執(zhí)行步驟203 ;否則,執(zhí)行步驟206。另外,前端服務(wù)器在接收到操作請求后,可以首先對用戶權(quán)限進(jìn)行驗(yàn)證,例如,對用戶名、密碼等信息進(jìn)行驗(yàn)證,該部分內(nèi)容為現(xiàn)有技術(shù)在本發(fā)明實(shí)施例中不再詳述。步驟203 前端服務(wù)器將操作請求中攜帶的讀目標(biāo)信息發(fā)送給緩存單元。本發(fā)明實(shí)施例中涉及到的緩存單元可以采用Memcache,Memcache是一個高性能的分布式的內(nèi)存對象緩存系統(tǒng),通過在內(nèi)存里維護(hù)一個統(tǒng)一的巨大的hash表,它能夠用來存儲各種格式的數(shù)據(jù),包括圖像、視頻、文件以及數(shù)據(jù)庫檢索的結(jié)果等。簡單的說就是將數(shù)據(jù)調(diào)用到內(nèi)存中,然后從內(nèi)存中讀取,從而大大提高讀取速度。步驟204:緩存單元判斷內(nèi)存中是否存在讀目標(biāo)信息對應(yīng)的數(shù)據(jù),如果存在,將對應(yīng)數(shù)據(jù)通過響應(yīng)返回給前端服務(wù)器;否則,向前端服務(wù)器返回空數(shù)據(jù)的響應(yīng)。步驟205 前端服務(wù)器如果接收到包含對應(yīng)數(shù)據(jù)的響應(yīng),則將對應(yīng)數(shù)據(jù)發(fā)送給瀏覽器,結(jié)束流程;否則繼續(xù)執(zhí)行步驟206。需要說明的是,針對讀操作請求由緩存單元首先判斷是否在內(nèi)存中存在讀目標(biāo)信息對應(yīng)的數(shù)據(jù)是為了提高讀數(shù)據(jù)的效率的方式,但并不是必須的步驟,也可以在執(zhí)行步驟 201之后直接執(zhí)行步驟206。步驟206 前端服務(wù)器將操作請求發(fā)送給網(wǎng)關(guān)數(shù)據(jù)庫中間件。前端服務(wù)器通過套接字(socket)與網(wǎng)關(guān)數(shù)據(jù)中間件進(jìn)行連接,在操作請求中攜帶操作目標(biāo)信息,例如要操作的內(nèi)容ID、位置等。步驟207 網(wǎng)關(guān)數(shù)據(jù)庫中間件利用操作請求對前端服務(wù)器進(jìn)行權(quán)限驗(yàn)證,如果通過,繼續(xù)執(zhí)行步驟208 ;否則向前端服務(wù)器回復(fù)訪問失敗的信息(該種情況圖中未示出)。網(wǎng)關(guān)數(shù)據(jù)庫中間件可以禁止外網(wǎng)前端服務(wù)器的訪問,可以通過IP地址進(jìn)行身份識別,如果操作請求中前端服務(wù)器的IP地址為外網(wǎng)地址,則禁止該前端服務(wù)器訪問,向其回復(fù)訪問失敗的信息;如果操作請求中前端服務(wù)器的IP地址為內(nèi)網(wǎng)地址,則允許該訪問, 繼續(xù)執(zhí)行步驟208。
除此之外,為了保證數(shù)據(jù)傳輸?shù)陌踩?,還可以對網(wǎng)關(guān)數(shù)據(jù)庫中間件和前端服務(wù)器之間發(fā)送的請求和數(shù)據(jù)中進(jìn)行密鑰保護(hù),網(wǎng)關(guān)數(shù)據(jù)庫中間件和前端服務(wù)器對于接收到的請求或數(shù)據(jù)都要進(jìn)行密鑰判斷,如果密鑰不對,則不做處理,后續(xù)過程中均是如此,不再贅述。優(yōu)選地,還可以在網(wǎng)關(guān)數(shù)據(jù)庫中間件上還可以進(jìn)行并發(fā)控制,如果網(wǎng)關(guān)數(shù)據(jù)庫中間件接收到的并發(fā)請求數(shù)量超過預(yù)設(shè)的上限值,則不再對接收到的操作請求進(jìn)行處理,直至并發(fā)請求數(shù)量回落到上限值以下,從而保證了系統(tǒng)的穩(wěn)定性。步驟208 網(wǎng)關(guān)數(shù)據(jù)庫中間件向數(shù)據(jù)庫層發(fā)送操作請求。步驟209 數(shù)據(jù)庫層向網(wǎng)關(guān)數(shù)據(jù)庫中間件返回操作結(jié)果。如果操作請求為讀數(shù)據(jù)請求,則向網(wǎng)關(guān)數(shù)據(jù)庫中間件返回讀取的數(shù)據(jù);如果操作請求為寫數(shù)據(jù)請求,則向網(wǎng)關(guān)數(shù)據(jù)庫中間件返回寫成功或?qū)懯〉慕Y(jié)果;如果操作請求為修改數(shù)據(jù)請求,則向網(wǎng)關(guān)數(shù)據(jù)庫中間件返回修改成功或修改失敗的結(jié)果;如果操作請求為搜索數(shù)據(jù)請求,則向網(wǎng)關(guān)數(shù)據(jù)庫中間件返回搜索結(jié)果。為了提高數(shù)據(jù)庫層的性能,可以在網(wǎng)關(guān)數(shù)據(jù)庫中實(shí)現(xiàn)讀寫分離,在此可以將數(shù)據(jù)庫層分為主數(shù)據(jù)庫層和從數(shù)據(jù)庫層,將數(shù)據(jù)庫分為讀庫和寫庫。在主數(shù)據(jù)庫層開啟BINLOG功能,在寫數(shù)據(jù)操作或者修改數(shù)據(jù)操作之后,將操作信息寫入BINLOG中。另外,在主數(shù)據(jù)庫層開啟一個IO進(jìn)程,該IO進(jìn)程用于從BINLOG的預(yù)設(shè)位置開始讀取BINLOG中的數(shù)據(jù)。在從數(shù)據(jù)庫層開啟兩個進(jìn)程進(jìn)程a和進(jìn)程b,其中進(jìn)程a負(fù)責(zé)定時連接主數(shù)據(jù)庫層的IO進(jìn)程,從BINLOG中讀取數(shù)據(jù)并寫入從數(shù)據(jù)庫層的RELAYL0G中。進(jìn)程b負(fù)責(zé)將 RELAYL0G的數(shù)據(jù)讀入讀庫,在接收到讀數(shù)據(jù)請求后,從讀庫中讀取相應(yīng)數(shù)據(jù)并返回給網(wǎng)關(guān)數(shù)據(jù)庫中間件,或者接收到搜索請求后,從讀庫中搜索相應(yīng)數(shù)據(jù)并返回給網(wǎng)關(guān)數(shù)據(jù)庫中間件。在此需要說明的是,網(wǎng)關(guān)數(shù)據(jù)庫中間件在將操作請求發(fā)送給數(shù)據(jù)庫層時,如果操作請求對應(yīng)讀數(shù)據(jù)操作,則將該操作請求發(fā)送給從數(shù)據(jù)庫層,由從數(shù)據(jù)庫層中的進(jìn)程b從讀庫完成數(shù)據(jù)讀取的操作;如果操作請求對應(yīng)寫數(shù)據(jù)操作、修改數(shù)據(jù)操作或者搜索數(shù)據(jù)操作,則將搜索請求發(fā)送給主數(shù)據(jù)庫層,由主數(shù)據(jù)庫層從寫庫完成相應(yīng)操作,并將操作信息寫入 RELAYL0G 中。由于通常讀數(shù)據(jù)操作的數(shù)量遠(yuǎn)大于其他操作的數(shù)量,因此,可以設(shè)置多個從數(shù)據(jù)庫層,從而實(shí)現(xiàn)一寫多讀,網(wǎng)關(guān)數(shù)據(jù)庫中間件可以在多個從數(shù)據(jù)庫層中實(shí)現(xiàn)負(fù)載均衡。本發(fā)明實(shí)施例中涉及的數(shù)據(jù)庫類型包括但不限于MYSQL、MSSQL或者ORACLE。步驟210 網(wǎng)關(guān)數(shù)據(jù)庫中間件按照與前端服務(wù)器約定的格式,向前端服務(wù)器返回操作結(jié)果。步驟211 前端服務(wù)器將操作結(jié)果返回給瀏覽器。如果操作請求是讀數(shù)據(jù)請求,則在返回的操作結(jié)果為成功讀取的數(shù)據(jù)時,繼續(xù)執(zhí)行步驟212。如果操作請求是寫數(shù)據(jù)請求、修改數(shù)據(jù)請求,則將會向緩存單元發(fā)送請求,由緩存單元刪除內(nèi)存中寫數(shù)據(jù)請求所寫入或修改數(shù)據(jù)請求所修改的數(shù)據(jù)。步驟212 將操作數(shù)據(jù)和對應(yīng)的操作目標(biāo)信息發(fā)送給緩存單元,由緩存單元存入內(nèi)存。
內(nèi)存中的數(shù)據(jù)存在對應(yīng)的生存時間,超過生存時間的數(shù)據(jù)將從內(nèi)存中被刪除。數(shù)據(jù)的生存時間可以根據(jù)系統(tǒng)對數(shù)據(jù)操作的實(shí)時性要求進(jìn)行設(shè)置,如果對數(shù)據(jù)操作的實(shí)時性要求較高,則可以將生存時間設(shè)置的較短,如果對數(shù)據(jù)的實(shí)時性要求較低,則可以將生存時間設(shè)置的較長。為了提高網(wǎng)關(guān)數(shù)據(jù)庫中間件的性能,作為一種優(yōu)選的實(shí)施方式,網(wǎng)關(guān)數(shù)據(jù)庫中間件上可以實(shí)現(xiàn)通用網(wǎng)關(guān)接口(CGI)的多進(jìn)程方式。網(wǎng)關(guān)數(shù)據(jù)庫中間件的主進(jìn)程在運(yùn)行后, 立即產(chǎn)生一個子進(jìn)程,然后關(guān)閉主進(jìn)程,由該子進(jìn)程創(chuàng)建新會話,改變當(dāng)前目錄為根目錄, 重設(shè)文件權(quán)限掩碼,也就是說,由該子進(jìn)程作為守護(hù)進(jìn)程。然后守護(hù)進(jìn)程創(chuàng)建socket監(jiān)聽來自固定端口的操作請求。守護(hù)進(jìn)程每監(jiān)聽到一個操作請求,都創(chuàng)建該守護(hù)進(jìn)程的一個子進(jìn)程,并將操作請求交由該創(chuàng)建的子進(jìn)程處理,當(dāng)該創(chuàng)建的子進(jìn)程完成操作請求的處理后, 自動退出,守護(hù)進(jìn)程刪除該子進(jìn)程。實(shí)施例二、在該實(shí)施例中以查看信箱為例對讀數(shù)據(jù)操作的過程進(jìn)行詳細(xì)描述。圖3為本發(fā)明實(shí)施例二提供的查看站內(nèi)信的方法流程圖,如圖3所示,該方法包括以下步驟步驟301 前端服務(wù)器接收來自瀏覽器的查看站內(nèi)信的讀數(shù)據(jù)請求。當(dāng)用戶通過瀏覽器點(diǎn)擊查看站內(nèi)信的鏈接后,瀏覽器會將查看的站內(nèi)信ID攜帶在讀數(shù)據(jù)請求中發(fā)送給前端服務(wù)器。步驟302 前端服務(wù)器將讀數(shù)據(jù)請求中攜帶的站內(nèi)信ID發(fā)送給緩存單元。步驟303 緩存單元判斷內(nèi)存中是否存在站內(nèi)信ID對應(yīng)的數(shù)據(jù),如果存在,將對應(yīng)數(shù)據(jù)通過響應(yīng)返回給前端服務(wù)器;否則,向前端服務(wù)器返回空數(shù)據(jù)的響應(yīng)。假設(shè)本實(shí)施例中緩存單元確定內(nèi)存中不存在站內(nèi)信ID對應(yīng)的數(shù)據(jù),因此向前端服務(wù)器返回空數(shù)據(jù)的響應(yīng)。步驟304 前端服務(wù)器將讀數(shù)據(jù)請求發(fā)送給網(wǎng)關(guān)數(shù)據(jù)庫中間件。步驟305 網(wǎng)關(guān)數(shù)據(jù)庫中間件利用讀數(shù)據(jù)請求對前端服務(wù)器進(jìn)行權(quán)限驗(yàn)證。假設(shè)前端服務(wù)器的IP地址為內(nèi)網(wǎng)地址,驗(yàn)證通過,繼續(xù)執(zhí)行步驟306。步驟306 網(wǎng)關(guān)數(shù)據(jù)庫中間件向從數(shù)據(jù)庫層發(fā)送讀數(shù)據(jù)請求。步驟307 從數(shù)據(jù)庫層根據(jù)站內(nèi)信ID從讀庫中讀取對應(yīng)的站內(nèi)信內(nèi)容返回給網(wǎng)關(guān)數(shù)據(jù)庫中間件。步驟308 網(wǎng)關(guān)數(shù)據(jù)庫中間件按照與前端服務(wù)器約定的格式,將站內(nèi)信內(nèi)容返回給前端服務(wù)器。步驟309 前端服務(wù)器將站內(nèi)信內(nèi)容返回給瀏覽器。前端服務(wù)器如果確定返回的站內(nèi)信內(nèi)容正確,則返回給瀏覽器。步驟310 將讀取的站內(nèi)信內(nèi)容和站內(nèi)信ID發(fā)送給緩存單元,由緩存單元存入內(nèi)存。上述步驟309和步驟310可以以任意的順序先后執(zhí)行,也可以同時執(zhí)行,圖3中僅為一種實(shí)施例。在用戶中心的應(yīng)用中,可以將諸如用戶基本信息、熱門數(shù)據(jù)等常用信息預(yù)先加載進(jìn)內(nèi)存,在內(nèi)存中開辟一塊固定大小的存儲空間來存儲這些用戶基本信息,從而提高讀取這些常用信息的速度。實(shí)施例三、
在該實(shí)施例中以寫博客為例對寫數(shù)據(jù)操作的過程進(jìn)行詳細(xì)描述。圖4為本發(fā)明實(shí)施例三提供的寫博客的方法流程圖,如圖4所示,該方法包括以下步驟步驟401 前端服務(wù)器接收來自瀏覽器的包含博客內(nèi)容的寫數(shù)據(jù)請求。當(dāng)用戶通過瀏覽器寫入博客內(nèi)容后,瀏覽器會將博客內(nèi)容攜帶在寫數(shù)據(jù)請求發(fā)送給前端服務(wù)器。步驟402 前端服務(wù)器將寫數(shù)據(jù)請求發(fā)送給網(wǎng)關(guān)數(shù)據(jù)庫中間件。步驟403 網(wǎng)關(guān)數(shù)據(jù)庫中間件利用寫數(shù)據(jù)請求對前端服務(wù)器進(jìn)行權(quán)限驗(yàn)證。假設(shè)前端服務(wù)器的IP地址為內(nèi)網(wǎng)地址,驗(yàn)證通過,繼續(xù)執(zhí)行步驟404。步驟404 網(wǎng)關(guān)數(shù)據(jù)庫中間件向主數(shù)據(jù)庫層發(fā)送寫數(shù)據(jù)請求。步驟405 主數(shù)據(jù)庫層將博客內(nèi)容寫入寫庫,并返回操作結(jié)果給網(wǎng)關(guān)數(shù)據(jù)庫中間件。步驟406 網(wǎng)關(guān)數(shù)據(jù)庫中間件按照與前端服務(wù)器約定的格式,將操作結(jié)果返回給前端服務(wù)器。步驟407 前端服務(wù)器判斷操作結(jié)果如果是操作成功,則繼續(xù)執(zhí)行步驟408 ;如果操作失敗,則將操作結(jié)果返回給瀏覽器。圖中示出的是操作成功的情況。步驟408 前端服務(wù)器向緩存單元發(fā)送請求,由緩存單元刪除內(nèi)存中寫數(shù)據(jù)請求所寫入的博客內(nèi)容。由于通常在寫數(shù)據(jù)的時候會在內(nèi)存中緩存寫入的數(shù)據(jù),一旦完成數(shù)據(jù)寫入,則可以將內(nèi)存中緩存的數(shù)據(jù)刪除。步驟409 前端服務(wù)器將網(wǎng)關(guān)數(shù)據(jù)庫中間件返回的操作結(jié)果發(fā)送給瀏覽器。另外,修改數(shù)據(jù)的操作與實(shí)施例三中所描述的流程類似,只是在主數(shù)據(jù)庫接收到修改數(shù)據(jù)請求時,在步驟405中對寫庫執(zhí)行的操作為修改數(shù)據(jù),即更新寫庫中相應(yīng)位置的數(shù)據(jù)。搜索數(shù)據(jù)的操作與實(shí)施例二中所描述的流程類似,只是在搜索請求中包含的是搜索項(xiàng)信息,且在從數(shù)據(jù)庫接收到搜索數(shù)據(jù)請求時,在步驟307中從讀庫中搜索得到搜索項(xiàng)對應(yīng)的數(shù)據(jù)并返回給網(wǎng)關(guān)數(shù)據(jù)庫中間件,在步驟310中緩存單元存入內(nèi)存的是搜索項(xiàng)和搜索項(xiàng)對應(yīng)的數(shù)據(jù),相應(yīng)地,在步驟303中判斷的是內(nèi)存中是否存在搜索項(xiàng)對應(yīng)的數(shù)據(jù)。以上是對本發(fā)明所提供的方法進(jìn)行的詳細(xì)描述,下面結(jié)合實(shí)施例四對本發(fā)明提供的系統(tǒng)進(jìn)行詳細(xì)描述。實(shí)施例四、繼續(xù)參見圖1,本發(fā)明實(shí)施例四提供的對數(shù)據(jù)庫進(jìn)行操作的系統(tǒng)包括前端服務(wù)器、網(wǎng)關(guān)數(shù)據(jù)庫中間件和數(shù)據(jù)庫層。在系統(tǒng)中通常會包含一個以上的前端服務(wù)器,在本發(fā)明實(shí)施例中以一個前端服務(wù)器為例,其他前端服務(wù)器與網(wǎng)關(guān)數(shù)據(jù)庫中間件的連接和交互與實(shí)施例中描述的相同。前端服務(wù)器,用于將來自瀏覽器的操作請求發(fā)送給網(wǎng)關(guān)數(shù)據(jù)庫中間件,接收網(wǎng)關(guān)數(shù)據(jù)庫中間件發(fā)送的操作結(jié)果。另外,前端服務(wù)器在接收到操作請求后,可以首先對用戶權(quán)限進(jìn)行驗(yàn)證,例如,對用戶名、密碼等信息進(jìn)行驗(yàn)證,該部分內(nèi)容為現(xiàn)有技術(shù)在本發(fā)明實(shí)施例中不再詳述。前端服務(wù)器通過socket與網(wǎng)關(guān)數(shù)據(jù)中間件進(jìn)行連接,在操作請求中攜帶操作目標(biāo)信息,例如要操作的內(nèi)容ID、位置等。
網(wǎng)關(guān)數(shù)據(jù)庫中間件,用于接收到操作請求時,在對前端服務(wù)器進(jìn)行權(quán)限認(rèn)證通過后,向數(shù)據(jù)庫層發(fā)送操作請求;接收數(shù)據(jù)庫層返回的操作結(jié)果,按照與前端服務(wù)器約定的格式,向前端服務(wù)器發(fā)送操作結(jié)果。數(shù)據(jù)庫層,用于根據(jù)操作請求中的操作目標(biāo)信息對數(shù)據(jù)庫進(jìn)行操作并向網(wǎng)關(guān)數(shù)據(jù)庫中間件返回操作結(jié)果。其中,如果操作請求為讀數(shù)據(jù)請求,則操作結(jié)果為數(shù)據(jù)庫層從數(shù)據(jù)庫讀取的數(shù)據(jù)。 如果操作請求為寫數(shù)據(jù)請求,則操作結(jié)果為數(shù)據(jù)庫層對數(shù)據(jù)庫寫成功或?qū)懯〉慕Y(jié)果;如果操作請求為修改數(shù)據(jù)請求,則操作結(jié)果為數(shù)據(jù)庫層對數(shù)據(jù)庫修改成功或修改失敗的結(jié)果;如果操作請求為搜索數(shù)據(jù)請求,則操作結(jié)果為數(shù)據(jù)庫層對數(shù)據(jù)庫進(jìn)行搜索后得到的搜
索結(jié)果。另外,為了提高系統(tǒng)對數(shù)據(jù)的讀取性能,該系統(tǒng)還可以包括緩存單元。如果操作請求為讀數(shù)據(jù)請求或搜索數(shù)據(jù)請求,則前端服務(wù)器,還用于接收到網(wǎng)關(guān)數(shù)據(jù)庫中間件發(fā)送的操作結(jié)果后,將操作目標(biāo)信息和操作數(shù)據(jù)發(fā)送給緩存單元;在將操作請求發(fā)送給網(wǎng)關(guān)數(shù)據(jù)庫中間件之前,將操作請求中攜帶的操作目標(biāo)信息發(fā)送給緩存單元; 如果接收到緩存單元發(fā)送的包含操作數(shù)據(jù)的響應(yīng),則將操作數(shù)據(jù)發(fā)送給瀏覽器,結(jié)束操作, 否則繼續(xù)執(zhí)行將操作請求發(fā)送給網(wǎng)關(guān)數(shù)據(jù)庫中間件的操作。緩存單元,用于將前端服務(wù)器發(fā)送的操作目標(biāo)信息和操作數(shù)據(jù)存入內(nèi)存;接收到操作請求中攜帶的操作目標(biāo)信息后,判斷內(nèi)存中是否存在該操作目標(biāo)信息對應(yīng)的操作數(shù)據(jù),如果存在,則將對應(yīng)的操作數(shù)據(jù)通過響應(yīng)返回給前端服務(wù)器;否則向前端服務(wù)器返回空數(shù)據(jù)的響應(yīng)。其中,讀數(shù)據(jù)請求對應(yīng)的操作數(shù)據(jù)為數(shù)據(jù)庫層從數(shù)據(jù)庫讀取的數(shù)據(jù),搜索數(shù)據(jù)請求對應(yīng)的操作數(shù)據(jù)為數(shù)據(jù)庫層對數(shù)據(jù)庫進(jìn)行搜索后得到的搜索結(jié)果。本發(fā)明實(shí)施例中涉及到的緩存單元可以采用Memcache,Memcache是一個高性能的分布式的內(nèi)存對象緩存系統(tǒng),通過在內(nèi)存里維護(hù)一個統(tǒng)一的巨大的hash表,它能夠用來存儲各種格式的數(shù)據(jù),包括圖像、視頻、文件以及數(shù)據(jù)庫檢索的結(jié)果等。簡單的說就是將數(shù)據(jù)調(diào)用到內(nèi)存中,然后從內(nèi)存中讀取,從而大大提高讀取速度。具體地,網(wǎng)關(guān)數(shù)據(jù)庫中間件在進(jìn)行權(quán)限認(rèn)證時,如果確定操作請求中前端服務(wù)器的IP地址為外網(wǎng)地址,則權(quán)限認(rèn)證失??;否則權(quán)限認(rèn)證通過。除此之外,為了保證數(shù)據(jù)傳輸?shù)陌踩?,還可以對網(wǎng)關(guān)數(shù)據(jù)庫中間件和前端服務(wù)器之間發(fā)送的請求和數(shù)據(jù)中進(jìn)行密鑰保護(hù),網(wǎng)關(guān)數(shù)據(jù)庫中間件和前端服務(wù)器對于接收到的請求或數(shù)據(jù)都要進(jìn)行密鑰判斷,如果密鑰不對,則不做處理,后續(xù)過程中均是如此,不再贅述。優(yōu)選地,在網(wǎng)關(guān)數(shù)據(jù)庫中間件上可以進(jìn)行并發(fā)控制,S卩如果接收到的操作請求的并發(fā)數(shù)量超過預(yù)設(shè)的上限值,則不再接收操作請求,直至并發(fā)請求數(shù)量回落到上限值以下。為了提高數(shù)據(jù)庫層的性能,可以在網(wǎng)關(guān)數(shù)據(jù)庫中實(shí)現(xiàn)讀寫分離,此時,數(shù)據(jù)庫層包括主數(shù)據(jù)庫層和從數(shù)據(jù)庫層,數(shù)據(jù)庫分為讀庫和寫庫。網(wǎng)關(guān)數(shù)據(jù)庫中間件將讀數(shù)據(jù)請求和搜索數(shù)據(jù)請求發(fā)送給從數(shù)據(jù)庫層,將寫數(shù)據(jù)請求和修改數(shù)據(jù)請求發(fā)送給主數(shù)據(jù)庫層。主數(shù)據(jù)庫層在寫庫中執(zhí)行寫數(shù)據(jù)操作或者修改數(shù)據(jù)操作之后,將操作信息寫入說明 BINLOG中,主數(shù)據(jù)庫層的IO進(jìn)程從BINLOG的預(yù)設(shè)位置開始讀取BINLOG中的數(shù)據(jù)。從數(shù)據(jù)庫層中的進(jìn)程a定時連接主數(shù)據(jù)庫層的IO進(jìn)程,從BINLOG中讀取數(shù)據(jù)并寫入從數(shù)據(jù)庫層的RELAYL0G中;從數(shù)據(jù)庫層中的進(jìn)程b將RELAYL0G中的數(shù)據(jù)讀入讀庫,在接收到讀數(shù)據(jù)請求后,從讀庫中讀取相應(yīng)數(shù)據(jù)并返回給網(wǎng)關(guān)數(shù)據(jù)庫中間件,或者接收到搜索數(shù)據(jù)請求后,從讀庫中搜索相應(yīng)數(shù)據(jù)并返回給網(wǎng)關(guān)數(shù)據(jù)庫中間件。由于通常讀數(shù)據(jù)操作的數(shù)量遠(yuǎn)大于其他操作的數(shù)量,因此,從數(shù)據(jù)庫為多個,網(wǎng)關(guān)數(shù)據(jù)庫中間件在多個從數(shù)據(jù)庫層中實(shí)現(xiàn)讀數(shù)據(jù)請求或搜索數(shù)據(jù)請求的負(fù)載均衡。為了提高網(wǎng)關(guān)數(shù)據(jù)庫中間件的性能,作為一種優(yōu)選的實(shí)施方式,網(wǎng)關(guān)數(shù)據(jù)庫中間件上可以實(shí)現(xiàn)通用網(wǎng)關(guān)接口的多進(jìn)程方式。網(wǎng)關(guān)數(shù)據(jù)庫中間件的主進(jìn)程在運(yùn)行后,產(chǎn)生一個子進(jìn)程并關(guān)閉主進(jìn)程,由子進(jìn)程作為守護(hù)進(jìn)程;守護(hù)進(jìn)程創(chuàng)建套接字socket監(jiān)聽操作請求,每監(jiān)聽到一個操作請求,都創(chuàng)建守護(hù)進(jìn)程的一個子進(jìn)程,并將操作請求交由該創(chuàng)建的子進(jìn)程處理,當(dāng)該創(chuàng)建的子進(jìn)程完成操作請求的處理后自動退出,守護(hù)進(jìn)程刪除退出的子進(jìn)程。由以上描述可以看出,本發(fā)明提供的方法和系統(tǒng)具有以下優(yōu)點(diǎn)1)本發(fā)明通過網(wǎng)關(guān)數(shù)據(jù)庫中間件將對數(shù)據(jù)庫的操作從前端服務(wù)器中獨(dú)立出來,作為前端服務(wù)器與數(shù)據(jù)庫之間的操作接口,避免了前端服務(wù)器直接操作數(shù)據(jù)庫,在網(wǎng)關(guān)數(shù)據(jù)庫中間件上實(shí)現(xiàn)權(quán)限控制,有效地保證了數(shù)據(jù)庫的訪問安全。2)在數(shù)據(jù)庫的項(xiàng)目架構(gòu)發(fā)生變化時,例如編程使用的語言發(fā)生變化,操作接口發(fā)生變化等,無需對各前端服務(wù)器的腳本逐一進(jìn)行修改,只需要在網(wǎng)關(guān)數(shù)據(jù)庫中間件上進(jìn)行相應(yīng)的修改即可,有利于項(xiàng)目的升級和擴(kuò)展。3)在網(wǎng)關(guān)數(shù)據(jù)庫中間件上進(jìn)行并發(fā)控制,從而保證對數(shù)據(jù)庫的并發(fā)操作在一定數(shù)量之內(nèi),減少瞬間的高并發(fā)量導(dǎo)致系統(tǒng)宕機(jī)。4)在數(shù)據(jù)庫層可以分為操作寫庫的主數(shù)據(jù)庫層和操作讀庫的從數(shù)據(jù)庫層,將對數(shù)據(jù)庫的讀寫分離,并可以采用一寫多讀的集群方式,有效緩解數(shù)據(jù)庫壓力。5)在網(wǎng)關(guān)數(shù)據(jù)庫中間件上實(shí)現(xiàn)CGI多進(jìn)程方式,有效提高網(wǎng)關(guān)數(shù)據(jù)庫中間件的性能,保證了系統(tǒng)的穩(wěn)定性。以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明保護(hù)的范圍之內(nèi)。
權(quán)利要求
1.一種對數(shù)據(jù)庫進(jìn)行操作的方法,其特征在于,應(yīng)用于包含前端服務(wù)器、網(wǎng)關(guān)數(shù)據(jù)庫中間件和數(shù)據(jù)庫層的系統(tǒng);該方法包括51、所述前端服務(wù)器將來自瀏覽器的操作請求發(fā)送給所述網(wǎng)關(guān)數(shù)據(jù)庫中間件;52、所述網(wǎng)關(guān)數(shù)據(jù)庫中間件在對所述前端服務(wù)器進(jìn)行權(quán)限認(rèn)證通過后,向所述數(shù)據(jù)庫層發(fā)送操作請求;53、所述數(shù)據(jù)庫層根據(jù)所述操作請求中的操作目標(biāo)信息對數(shù)據(jù)庫進(jìn)行操作并向所述網(wǎng)關(guān)數(shù)據(jù)庫中間件返回操作結(jié)果;54、所述網(wǎng)關(guān)數(shù)據(jù)庫中間件按照與所述前端服務(wù)器約定的格式,向所述前端服務(wù)器返回操作結(jié)果。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,如果所述操作請求為讀數(shù)據(jù)請求,則所述操作結(jié)果為所述數(shù)據(jù)庫層從數(shù)據(jù)庫讀取的數(shù)據(jù);如果所述操作請求為寫數(shù)據(jù)請求,則所述操作結(jié)果為所述數(shù)據(jù)庫層對所述數(shù)據(jù)庫寫成功或?qū)懯〉慕Y(jié)果;如果所述操作請求為修改數(shù)據(jù)請求,則所述操作結(jié)果為所述數(shù)據(jù)庫層對所述數(shù)據(jù)庫修改成功或修改失敗的結(jié)果;如果所述操作請求為搜索數(shù)據(jù)請求,則所述操作結(jié)果為所述數(shù)據(jù)庫層對所述數(shù)據(jù)庫進(jìn)行搜索后得到的搜索結(jié)果。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,在所述步驟S4之后還包括如果所述操作請求為讀數(shù)據(jù)請求或搜索數(shù)據(jù)請求,則所述前端服務(wù)器將所述操作目標(biāo)信息和操作數(shù)據(jù)發(fā)送給緩存單元,由所述緩存單元存入內(nèi)存;在所述步驟Si之前還包括所述前端服務(wù)器判斷所述操作請求的類型,如果是讀數(shù)據(jù)請求或搜索數(shù)據(jù)請求,則將操作請求中攜帶的操作目標(biāo)信息發(fā)送給緩存單元;所述緩存單元判斷內(nèi)存中是否存在所述操作目標(biāo)信息對應(yīng)的操作數(shù)據(jù),如果存在,則將所述對應(yīng)的操作數(shù)據(jù)通過響應(yīng)返回給所述前端服務(wù)器;否則向所述前端服務(wù)器返回空數(shù)據(jù)的響應(yīng);所述前端服務(wù)器如果接收到包含所述對應(yīng)的操作數(shù)據(jù)的響應(yīng),則將所述對應(yīng)的操作數(shù)據(jù)發(fā)送給瀏覽器,結(jié)束流程;否則繼續(xù)執(zhí)行所述步驟Sl ;其中,所述讀數(shù)據(jù)請求對應(yīng)的操作數(shù)據(jù)為所述數(shù)據(jù)庫層從數(shù)據(jù)庫讀取的數(shù)據(jù),所述搜索數(shù)據(jù)請求對應(yīng)的操作數(shù)據(jù)為所述數(shù)據(jù)庫層對所述數(shù)據(jù)庫進(jìn)行搜索后得到的搜索結(jié)果。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟S2中所述權(quán)限認(rèn)證具體為如果所述網(wǎng)關(guān)數(shù)據(jù)庫中間件確定操作請求中所述前端服務(wù)器的IP地址為外網(wǎng)地址,則權(quán)限認(rèn)證失敗;否則權(quán)限認(rèn)證通過。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,該方法還包括如果所述網(wǎng)關(guān)數(shù)據(jù)庫中間件接收到的操作請求的并發(fā)數(shù)量超過預(yù)設(shè)的上限值,則不再接收操作請求,直至并發(fā)請求數(shù)量回落到所述上限值以下。
6.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述數(shù)據(jù)庫層包括主數(shù)據(jù)庫層和從數(shù)據(jù)庫層,所述數(shù)據(jù)庫分為讀庫和寫庫;所述網(wǎng)關(guān)數(shù)據(jù)庫中間件將讀數(shù)據(jù)請求和搜索數(shù)據(jù)請求發(fā)送給所述從數(shù)據(jù)庫層,將寫數(shù)據(jù)請求和修改數(shù)據(jù)請求發(fā)送給所述主數(shù)據(jù)庫層;所述主數(shù)據(jù)庫層在所述寫庫中執(zhí)行寫數(shù)據(jù)操作或者修改數(shù)據(jù)操作之后,將操作信息寫入BINLOG中,所述主數(shù)據(jù)庫層的IO進(jìn)程從BINLOG的預(yù)設(shè)位置開始讀取BINLOG中的數(shù)據(jù);所述從數(shù)據(jù)庫層中的進(jìn)程a定時連接所述主數(shù)據(jù)庫層的IO進(jìn)程,從BINLOG中讀取數(shù)據(jù)并寫入從數(shù)據(jù)庫層的RELAYL0G中;所述從數(shù)據(jù)庫層中的進(jìn)程b將RELAYL0G中的數(shù)據(jù)讀入所述讀庫,在接收到讀數(shù)據(jù)請求后,從所述讀庫中讀取相應(yīng)數(shù)據(jù)并返回給所述網(wǎng)關(guān)數(shù)據(jù)庫中間件,或者接收到搜索數(shù)據(jù)請求后,從所述讀庫中搜索相應(yīng)數(shù)據(jù)并返回給所述網(wǎng)關(guān)數(shù)據(jù)庫中間件。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述從數(shù)據(jù)庫層為多個,所述網(wǎng)關(guān)數(shù)據(jù)庫中間件在多個從數(shù)據(jù)庫層中實(shí)現(xiàn)讀數(shù)據(jù)請求或搜索數(shù)據(jù)請求的負(fù)載均衡。
8.根據(jù)權(quán)利要求1所述的方法,其特征在于,該方法還包括所述網(wǎng)關(guān)數(shù)據(jù)庫中間件的主進(jìn)程在運(yùn)行后,產(chǎn)生一個子進(jìn)程并關(guān)閉所述主進(jìn)程,由所述子進(jìn)程作為守護(hù)進(jìn)程,所述守護(hù)進(jìn)程創(chuàng)建套接字socket監(jiān)聽所述操作請求;所述守護(hù)進(jìn)程每監(jiān)聽到一個操作請求,都創(chuàng)建所述守護(hù)進(jìn)程的一個子進(jìn)程,并將操作請求交由該創(chuàng)建的子進(jìn)程處理,當(dāng)該創(chuàng)建的子進(jìn)程完成操作請求的處理后自動退出,所述守護(hù)進(jìn)程刪除退出的子進(jìn)程。
9.一種對數(shù)據(jù)庫進(jìn)行操作的系統(tǒng),其特征在于,該系統(tǒng)包括前端服務(wù)器、網(wǎng)關(guān)數(shù)據(jù)庫中間件和數(shù)據(jù)庫層;所述前端服務(wù)器,用于將來自瀏覽器的操作請求發(fā)送給所述網(wǎng)關(guān)數(shù)據(jù)庫中間件,接收所述網(wǎng)關(guān)數(shù)據(jù)庫中間件發(fā)送的操作結(jié)果;所述網(wǎng)關(guān)數(shù)據(jù)庫中間件,用于接收到所述操作請求時,在對所述前端服務(wù)器進(jìn)行權(quán)限認(rèn)證通過后,向所述數(shù)據(jù)庫層發(fā)送所述操作請求;接收所述數(shù)據(jù)庫層返回的操作結(jié)果,按照與所述前端服務(wù)器約定的格式,向所述前端服務(wù)器發(fā)送所述操作結(jié)果;所述數(shù)據(jù)庫層,用于根據(jù)所述操作請求中的操作目標(biāo)信息對數(shù)據(jù)庫進(jìn)行操作并向所述網(wǎng)關(guān)數(shù)據(jù)庫中間件返回操作結(jié)果。
10.根據(jù)權(quán)利要求9所述的系統(tǒng),其特征在于,如果所述操作請求為讀數(shù)據(jù)請求,則所述操作結(jié)果為所述數(shù)據(jù)庫層從數(shù)據(jù)庫讀取的數(shù)據(jù);如果所述操作請求為寫數(shù)據(jù)請求,則所述操作結(jié)果為所述數(shù)據(jù)庫層對所述數(shù)據(jù)庫寫成功或?qū)懯〉慕Y(jié)果;如果所述操作請求為修改數(shù)據(jù)請求,則所述操作結(jié)果為所述數(shù)據(jù)庫層對所述數(shù)據(jù)庫修改成功或修改失敗的結(jié)果;如果所述操作請求為搜索數(shù)據(jù)請求,則所述操作結(jié)果為所述數(shù)據(jù)庫層對所述數(shù)據(jù)庫進(jìn)行搜索后得到的搜索結(jié)果。
11.根據(jù)權(quán)利要求9所述的系統(tǒng),其特征在于,該系統(tǒng)還包括緩存單元;如果所述操作請求為讀數(shù)據(jù)請求或搜索數(shù)據(jù)請求,則所述前端服務(wù)器,還用于接收到所述網(wǎng)關(guān)數(shù)據(jù)庫中間件發(fā)送的操作結(jié)果后,將所述操作目標(biāo)信息和操作數(shù)據(jù)發(fā)送給所述緩存單元;在將所述操作請求發(fā)送給所述網(wǎng)關(guān)數(shù)據(jù)庫中間件之前,將操作請求中攜帶的操作目標(biāo)信息發(fā)送給緩存單元;如果接收到所述緩存單元發(fā)送的包含操作數(shù)據(jù)的響應(yīng),則將操作數(shù)據(jù)發(fā)送給瀏覽器,結(jié)束操作,否則繼續(xù)執(zhí)行將所述操作請求發(fā)送給所述網(wǎng)關(guān)數(shù)據(jù)庫中間件的操作;所述緩存單元,用于將所述前端服務(wù)器發(fā)送的操作目標(biāo)信息和操作數(shù)據(jù)存入內(nèi)存;接收到所述操作請求中攜帶的操作目標(biāo)信息后,判斷內(nèi)存中是否存在該操作目標(biāo)信息對應(yīng)的操作數(shù)據(jù),如果存在,則將所述對應(yīng)的操作數(shù)據(jù)通過響應(yīng)返回給所述前端服務(wù)器;否則向所述前端服務(wù)器返回空數(shù)據(jù)的響應(yīng);其中,所述讀數(shù)據(jù)請求對應(yīng)的操作數(shù)據(jù)為所述數(shù)據(jù)庫層從數(shù)據(jù)庫讀取的數(shù)據(jù),所述搜索數(shù)據(jù)請求對應(yīng)的操作數(shù)據(jù)為所述數(shù)據(jù)庫層對所述數(shù)據(jù)庫進(jìn)行搜索后得到的搜索結(jié)果。
12.根據(jù)權(quán)利要求9所述的系統(tǒng),其特征在于,所述網(wǎng)關(guān)數(shù)據(jù)庫中間件在進(jìn)行權(quán)限認(rèn)證時,如果確定操作請求中所述前端服務(wù)器的IP地址為外網(wǎng)地址,則權(quán)限認(rèn)證失?。环駝t權(quán)限認(rèn)證通過。
13.根據(jù)權(quán)利要求9所述的系統(tǒng),其特征在于,所述網(wǎng)關(guān)數(shù)據(jù)庫中間件如果接收到的操作請求的并發(fā)數(shù)量超過預(yù)設(shè)的上限值,則不再接收操作請求,直至并發(fā)請求數(shù)量回落到所述上限值以下。
14.根據(jù)權(quán)利要求10所述的系統(tǒng),其特征在于,所述數(shù)據(jù)庫層包括主數(shù)據(jù)庫層和從數(shù)據(jù)庫層,所述數(shù)據(jù)庫分為讀庫和寫庫;所述網(wǎng)關(guān)數(shù)據(jù)庫中間件將讀數(shù)據(jù)請求和搜索數(shù)據(jù)請求發(fā)送給所述從數(shù)據(jù)庫層,將寫數(shù)據(jù)請求和修改數(shù)據(jù)請求發(fā)送給所述主數(shù)據(jù)庫層;所述主數(shù)據(jù)庫層在所述寫庫中執(zhí)行寫數(shù)據(jù)操作或者修改數(shù)據(jù)操作之后,將操作信息寫入BINLOG中,所述主數(shù)據(jù)庫層的IO進(jìn)程從BINLOG的預(yù)設(shè)位置開始讀取BINLOG中的數(shù)據(jù);所述從數(shù)據(jù)庫層中的進(jìn)程a定時連接所述主數(shù)據(jù)庫層的IO進(jìn)程,從BINLOG中讀取數(shù)據(jù)并寫入從數(shù)據(jù)庫層的RELAYL0G中;所述從數(shù)據(jù)庫層中的進(jìn)程b將RELAYL0G中的數(shù)據(jù)讀入所述讀庫,在接收到讀數(shù)據(jù)請求后,從所述讀庫中讀取相應(yīng)數(shù)據(jù)并返回給所述網(wǎng)關(guān)數(shù)據(jù)庫中間件,或者接收到搜索數(shù)據(jù)請求后,從所述讀庫中搜索相應(yīng)數(shù)據(jù)并返回給所述網(wǎng)關(guān)數(shù)據(jù)庫中間件。
15.根據(jù)權(quán)利要求14所述的系統(tǒng),其特征在于,所述從數(shù)據(jù)庫為多個,所述網(wǎng)關(guān)數(shù)據(jù)庫中間件在多個從數(shù)據(jù)庫層中實(shí)現(xiàn)讀數(shù)據(jù)請求或搜索數(shù)據(jù)請求的負(fù)載均衡。
16.根據(jù)權(quán)利要求9所述的系統(tǒng),其特征在于,所述網(wǎng)關(guān)數(shù)據(jù)庫中間件的主進(jìn)程在運(yùn)行后,產(chǎn)生一個子進(jìn)程并關(guān)閉所述主進(jìn)程,由所述子進(jìn)程作為守護(hù)進(jìn)程;所述守護(hù)進(jìn)程創(chuàng)建套接字socket監(jiān)聽所述操作請求,每監(jiān)聽到一個操作請求,都創(chuàng)建所述守護(hù)進(jìn)程的一個子進(jìn)程,并將操作請求交由該創(chuàng)建的子進(jìn)程處理,當(dāng)該創(chuàng)建的子進(jìn)程完成操作請求的處理后自動退出,所述守護(hù)進(jìn)程刪除退出的子進(jìn)程。
全文摘要
本發(fā)明提供了一種對數(shù)據(jù)庫進(jìn)行操作的方法和系統(tǒng),其中方法包括前端服務(wù)器將來自瀏覽器的操作請求發(fā)送給網(wǎng)關(guān)數(shù)據(jù)庫中間件;網(wǎng)關(guān)數(shù)據(jù)庫中間件在對前端服務(wù)器進(jìn)行權(quán)限認(rèn)證通過后,向數(shù)據(jù)庫層發(fā)送操作請求;數(shù)據(jù)庫層根據(jù)操作請求中的操作目標(biāo)信息對數(shù)據(jù)庫進(jìn)行操作并向網(wǎng)關(guān)數(shù)據(jù)庫中間件返回操作結(jié)果;網(wǎng)關(guān)數(shù)據(jù)庫中間件按照與前端服務(wù)器約定的格式,向前端服務(wù)器返回操作結(jié)果。本發(fā)明通過網(wǎng)關(guān)數(shù)據(jù)庫中間件將對數(shù)據(jù)庫的操作從前端服務(wù)器中獨(dú)立出來,作為前端服務(wù)器與數(shù)據(jù)庫之間的操作接口,在網(wǎng)關(guān)數(shù)據(jù)庫中間件上實(shí)現(xiàn)權(quán)限控制,有效地保證了數(shù)據(jù)庫的訪問安全,同時有利于項(xiàng)目的升級和擴(kuò)展。
文檔編號G06F17/30GK102426594SQ20111033956
公開日2012年4月25日 申請日期2011年10月31日 優(yōu)先權(quán)日2011年10月31日
發(fā)明者沈文策 申請人:沈文策