本發(fā)明實施例涉及網(wǎng)絡(luò)存儲領(lǐng)域,特別涉及一種分布式數(shù)據(jù)庫系統(tǒng)、數(shù)據(jù)庫訪問方法及裝置。
背景技術(shù):
Sqlite數(shù)據(jù)庫是一種輕量級數(shù)據(jù)庫。Sqlite數(shù)據(jù)庫具有無需安裝即可動態(tài)使用的特點。Sqlite數(shù)據(jù)庫常應(yīng)用于移動操作系統(tǒng),比如安卓(Android)系統(tǒng)和IOS系統(tǒng)。Sqlite數(shù)據(jù)庫在單機性質(zhì)的移動操作系統(tǒng)上具有非常優(yōu)秀的性能。
目前,現(xiàn)有技術(shù)也存在將Sqlite數(shù)據(jù)庫應(yīng)用于分布式數(shù)據(jù)庫的場景。分布式數(shù)據(jù)庫采用了共享文件系統(tǒng),該共享文件系統(tǒng)包括分散設(shè)置的多個數(shù)據(jù)存儲節(jié)點,多個數(shù)據(jù)存儲節(jié)點之間通過網(wǎng)絡(luò)相連,每個數(shù)據(jù)存儲節(jié)點上設(shè)置有一個Sqlite數(shù)據(jù)庫。
在實現(xiàn)本發(fā)明實施例的過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)至少存在以下問題:在實際使用中發(fā)現(xiàn),Sqlite數(shù)據(jù)庫對共享文件系統(tǒng)的支持較差。在并發(fā)訪問共享文件系統(tǒng)的場景中,很容易出現(xiàn)卡死的現(xiàn)象。并發(fā)訪問時指存在多個業(yè)務(wù)節(jié)點同時請求訪問共享文件系統(tǒng)。
技術(shù)實現(xiàn)要素:
為了解決現(xiàn)有技術(shù)的問題,本發(fā)明實施例提供了一種基于共享文件系統(tǒng)的分布式數(shù)據(jù)庫系統(tǒng)、訪問方法及裝置。所述技術(shù)方案如下:
第一方面,提供了一種分布式數(shù)據(jù)庫系統(tǒng)。該分布式數(shù)據(jù)庫系統(tǒng)包括:n個數(shù)據(jù)庫集群節(jié)點、數(shù)據(jù)庫主節(jié)點和共享文件系統(tǒng),n≥3。數(shù)據(jù)庫集群節(jié)點,用于通過線程向數(shù)據(jù)庫主節(jié)點發(fā)送訪問請求;數(shù)據(jù)庫主節(jié)點,用于接收數(shù)據(jù)庫集群節(jié)點發(fā)送的訪問請求;將訪問請求存儲至分發(fā)隊列,并向數(shù)據(jù)庫集群節(jié)點發(fā)送接收響應(yīng);數(shù)據(jù)庫集群節(jié)點,還用于根據(jù)接收響應(yīng)掛起線程;數(shù)據(jù)庫主節(jié)點,還用于從分發(fā)隊列依次獲取訪問請求;根據(jù)訪問請求從共享文件系統(tǒng)中讀數(shù)據(jù) 或?qū)憯?shù)據(jù);向數(shù)據(jù)庫集群節(jié)點發(fā)送訪問請求的返回響應(yīng);數(shù)據(jù)庫集群節(jié)點,用于接收返回響應(yīng);根據(jù)返回響應(yīng)喚醒線程。
本發(fā)明實施例提供的分布式數(shù)據(jù)庫系統(tǒng),當(dāng)多個數(shù)據(jù)庫集群節(jié)點并發(fā)訪問數(shù)據(jù)庫主節(jié)點時,數(shù)據(jù)庫主節(jié)點同時接收多個訪問請求并存儲至分發(fā)隊列,再從分發(fā)隊列中逐個獲取訪問請求并執(zhí)行,使得在使用Sqlite數(shù)據(jù)庫的共享文件系統(tǒng)中,數(shù)據(jù)庫主節(jié)點能接收和處理并發(fā)的多個訪問請求,而不會出現(xiàn)卡死的現(xiàn)象,使Sqlite數(shù)據(jù)庫也能實現(xiàn)共享文件系統(tǒng)的并發(fā)機制,擴大了Sqlite數(shù)據(jù)庫的使用范圍。
在第一方面的第一種可能的實施方式中,在數(shù)據(jù)庫主節(jié)點根據(jù)訪問請求從共享文件系統(tǒng)中寫數(shù)據(jù)的方面:數(shù)據(jù)庫主節(jié)點,用于解析訪問請求;當(dāng)訪問請求的類型為寫請求且寫任務(wù)線程為空閑時,提交與訪問請求對應(yīng)的寫任務(wù)至寫任務(wù)線程,寫任務(wù)線程用于根據(jù)寫任務(wù)向共享文件系統(tǒng)寫入數(shù)據(jù)。在本實施方式中,通過使用數(shù)據(jù)庫主節(jié)點對訪問請求進(jìn)行解析并獲得訪問請求的類型,對于寫請求,提交到寫任務(wù)線程,能將讀任務(wù)和寫任務(wù)分開執(zhí)行,互不影響,保證了數(shù)據(jù)的一致性。
在第一方面的第二種可能的實施方式中,在數(shù)據(jù)庫主節(jié)點根據(jù)訪問請求從共享文件系統(tǒng)中讀數(shù)據(jù)的方面:數(shù)據(jù)庫主節(jié)點,用于解析訪問請求;當(dāng)訪問請求的類型為讀請求時,提交與訪問請求對應(yīng)的讀任務(wù)至讀任務(wù)線程,讀任務(wù)線程用于為讀任務(wù)分配獨立的數(shù)據(jù)庫句柄;根據(jù)數(shù)據(jù)庫句柄和讀任務(wù)從共享文件系統(tǒng)讀數(shù)據(jù)。在本實施方式中,通過使用數(shù)據(jù)庫主節(jié)點對訪問請求進(jìn)行解析獲得訪問請求的類型,對于讀請求,提交到讀任務(wù)線程,能將讀任務(wù)和寫任務(wù)分開執(zhí)行,互不影響,保證了數(shù)據(jù)的一致性。通過為讀任務(wù)分配獨立的數(shù)據(jù)庫句柄,使讀任務(wù)之間互相獨立,達(dá)到了可以并發(fā)讀取數(shù)據(jù)的效果。
結(jié)合第一方面、第一方面的第一種可能的實施方式或者第一方面的第二種可能的實施方式,在第三種可能的實施方式中,該系統(tǒng)還包括:備用數(shù)據(jù)庫主節(jié)點;數(shù)據(jù)庫集群節(jié)點,用于在第一預(yù)定時間內(nèi)未接收到接收響應(yīng)時,或者,在第二預(yù)定時間內(nèi)未接收到返回響應(yīng)時,重新向備用數(shù)據(jù)庫主節(jié)點發(fā)送訪問請求。在本實施方式中,通過使用備用數(shù)據(jù)庫主節(jié)點,避免了因數(shù)據(jù)庫主節(jié)點故障引起的整個分布式數(shù)據(jù)庫系統(tǒng)的故障。
第二方面,提供了一種數(shù)據(jù)庫訪問方法,該方法包括:接收數(shù)據(jù)庫集群節(jié) 點發(fā)送的訪問請求;將訪問請求存儲至分發(fā)隊列,并向數(shù)據(jù)庫集群節(jié)點發(fā)送接收響應(yīng),接收響應(yīng)用于觸發(fā)數(shù)據(jù)庫集群節(jié)點掛起與訪問請求對應(yīng)的線程;從分發(fā)隊列依次獲取訪問請求;根據(jù)訪問請求從共享文件系統(tǒng)中讀數(shù)據(jù)或?qū)憯?shù)據(jù);向數(shù)據(jù)庫集群節(jié)點發(fā)送訪問請求的返回響應(yīng);返回響應(yīng)用于觸發(fā)數(shù)據(jù)庫集群節(jié)點喚醒線程。
在第二方面的第一種可能的實施方式中,根據(jù)訪問請求從共享文件系統(tǒng)中寫數(shù)據(jù),包括:解析訪問請求;當(dāng)訪問請求的類型為寫請求且寫任務(wù)線程為空閑時,提交與訪問請求對應(yīng)的寫任務(wù)至寫任務(wù)線程,寫任務(wù)線程用于根據(jù)寫任務(wù)向共享文件系統(tǒng)寫入數(shù)據(jù)。
在第二方面的第二種可能的實施方式中,根據(jù)訪問請求從共享文件系統(tǒng)中讀數(shù)據(jù),包括:解析訪問請求;當(dāng)訪問請求的類型為讀請求時,提交與訪問請求對應(yīng)的讀任務(wù)至讀任務(wù)線程,讀任務(wù)線程用于為讀任務(wù)分配獨立的數(shù)據(jù)庫句柄;根據(jù)數(shù)據(jù)庫句柄和讀任務(wù)從共享文件系統(tǒng)讀數(shù)據(jù)。
第三方面,提供了一種數(shù)據(jù)庫訪問方法,該方法包括:通過線程向數(shù)據(jù)庫主節(jié)點發(fā)送訪問請求;接收數(shù)據(jù)庫主節(jié)點發(fā)送的接收響應(yīng);根據(jù)接收響應(yīng)掛起線程;接收數(shù)據(jù)庫主節(jié)點發(fā)送的返回響應(yīng);根據(jù)返回響應(yīng)喚醒線程。
在第三方面的第一種可能的實施方式中,該方法還包括:在第一預(yù)定時間內(nèi)未接收到接收響應(yīng)時,或者,在第二預(yù)定時間內(nèi)未接收到返回響應(yīng)時,重新向備用數(shù)據(jù)庫主節(jié)點發(fā)送訪問請求。
第四方面,提供了一種數(shù)據(jù)庫主節(jié)點,所述數(shù)據(jù)庫集群節(jié)點包括:處理器、與處理器相連的存儲器和網(wǎng)絡(luò)接口,所述處理器被配置為執(zhí)行指令,所述處理器通過執(zhí)行指令來實現(xiàn)上述第二方面的數(shù)據(jù)庫訪問方法。
第五方面,提供了一種數(shù)據(jù)庫集群節(jié)點,所述數(shù)據(jù)庫集群節(jié)點包括:處理器、與處理器相連的存儲器和網(wǎng)絡(luò)接口,所述處理器被配置為執(zhí)行指令,所述處理器通過執(zhí)行指令來實現(xiàn)上述第三方面的數(shù)據(jù)庫訪問方法。
第六方面,提供了一種數(shù)據(jù)庫訪問裝置,數(shù)據(jù)庫訪問裝置包括至少一個單元,該至少一個單元用于實現(xiàn)上述第四方面的數(shù)據(jù)庫訪問方法。
第七方面,提供了一種數(shù)據(jù)庫訪問裝置,數(shù)據(jù)庫訪問裝置包括至少一個單元,該至少一個單元用于實現(xiàn)上述第五方面的數(shù)據(jù)庫訪問方法。
第八方面,提供了一種計算機可讀介質(zhì),該計算機可讀介質(zhì)存儲用于實現(xiàn) 第二方面所提供的數(shù)據(jù)庫訪問方法的指令,或者,該計算機可讀介質(zhì)存儲用于實現(xiàn)第三方面所提供的數(shù)據(jù)庫訪問方法的指令。
附圖說明
為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明一示例性實施例提供的分布式數(shù)據(jù)庫系統(tǒng)的結(jié)構(gòu)示意圖;
圖2是本發(fā)明一示例性實施例提供的數(shù)據(jù)庫集群節(jié)點的結(jié)構(gòu)示意圖;
圖3是本發(fā)明一示例性實施例提供的數(shù)據(jù)庫主節(jié)點的結(jié)構(gòu)示意圖;
圖4是本發(fā)明一示例性實施例提供的數(shù)據(jù)庫訪問方法的流程圖;
圖5是本發(fā)明另一示例性實施例提供的數(shù)據(jù)庫訪問方法的流程圖;
圖6是本發(fā)明另一示例性實施例涉及的分發(fā)隊列的示意圖;
圖7是本發(fā)明另一示例性實施例提供的數(shù)據(jù)庫訪問方法的流程圖;
圖8是本發(fā)明另一示例性實施例提供的數(shù)據(jù)庫訪問方法的流程圖;
圖9是本發(fā)明另一示例性實施例提供的數(shù)據(jù)庫訪問方法的流程圖;
圖10是本發(fā)明另一示例性實施例提供的數(shù)據(jù)庫訪問方法的流程圖;
圖11是本發(fā)明另一示例性實施例提供的數(shù)據(jù)庫訪問方法的流程圖;
圖12是本發(fā)明一示例性實施例提供的數(shù)據(jù)庫訪問裝置的框圖;
圖13是本發(fā)明另一示例性實施例提供的數(shù)據(jù)庫訪問裝置的框圖。
具體實施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合附圖對本發(fā)明實施例進(jìn)行闡述。
在本文提及的“模塊”是指存儲在存儲器中的能夠?qū)崿F(xiàn)某些功能的程序或指令;在本文中提及的“單元”是指按照邏輯劃分的功能性結(jié)構(gòu),該“單元”可以由純硬件實現(xiàn),或者,軟硬件的結(jié)合實現(xiàn)。
請參考圖1,其示出了本發(fā)明一個示例性實施例提供的分布式數(shù)據(jù)庫系統(tǒng)的 結(jié)構(gòu)示意圖。該分布式數(shù)據(jù)庫系統(tǒng)包括:數(shù)據(jù)庫業(yè)務(wù)節(jié)點110、數(shù)據(jù)庫集群節(jié)點120、數(shù)據(jù)庫主節(jié)點130和共享文件系統(tǒng)140。
在一個數(shù)據(jù)庫集群中,存在多個數(shù)據(jù)庫節(jié)點,選擇其中一個數(shù)據(jù)庫節(jié)點作為分布式數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)庫主節(jié)點130,則其余的每一個數(shù)據(jù)庫節(jié)點均作為數(shù)據(jù)庫集群節(jié)點120,即數(shù)據(jù)庫集群節(jié)點120和數(shù)據(jù)庫主節(jié)點130都是數(shù)據(jù)庫節(jié)點。
可選的,數(shù)據(jù)庫業(yè)務(wù)節(jié)點110可以是提供數(shù)據(jù)庫業(yè)務(wù)的任意一個數(shù)據(jù)庫業(yè)務(wù)節(jié)點,每一個數(shù)據(jù)庫節(jié)點都可以和一個數(shù)據(jù)庫業(yè)務(wù)節(jié)點相連。
在一個分布式數(shù)據(jù)庫系統(tǒng)中,可選地,數(shù)據(jù)庫集群節(jié)點120存在至少兩個,每一個數(shù)據(jù)庫集群節(jié)點120都與數(shù)據(jù)庫主節(jié)點130通過有線網(wǎng)絡(luò)或無線網(wǎng)絡(luò)方式相連。
可選的,該分布式數(shù)據(jù)庫系統(tǒng)還包括:備用數(shù)據(jù)庫主節(jié)點150,當(dāng)數(shù)據(jù)庫主節(jié)點130發(fā)生故障時,由備用數(shù)據(jù)庫主節(jié)點150代替數(shù)據(jù)庫主節(jié)點130進(jìn)行運行??蛇x的,備用數(shù)據(jù)庫主節(jié)點150也與一個數(shù)據(jù)庫業(yè)務(wù)節(jié)點110相連。
共享文件系統(tǒng)140包括:n個數(shù)據(jù)節(jié)點142,n≥3。
每一個數(shù)據(jù)節(jié)點142上設(shè)置有一個數(shù)據(jù)庫,多個數(shù)據(jù)節(jié)點之間通過網(wǎng)絡(luò)相互連接,可選的,該數(shù)據(jù)庫為Sqlite數(shù)據(jù)庫。
可選的,共享文件系統(tǒng)140是網(wǎng)絡(luò)附屬存儲(Network Attached Storage,NAS),數(shù)據(jù)庫主節(jié)點130通過以太網(wǎng)與共享文件系統(tǒng)140相連。
可選的,共享文件系統(tǒng)140可被替代實現(xiàn)為針對共享塊存儲的存儲區(qū)域網(wǎng)絡(luò)(Storage Area Network,SAN),則數(shù)據(jù)庫主節(jié)點130與共享文件系統(tǒng)140之間通過光纖通道(Fibre Channel,F(xiàn)C)相連,共享文件系統(tǒng)140還可以被替代實現(xiàn)為其他共享存儲系統(tǒng),本公開實施例對此不作限定。
請參考圖2,其示出了本發(fā)明一個示例性實施例提供的數(shù)據(jù)庫集群節(jié)點120的結(jié)構(gòu)示意圖。該數(shù)據(jù)庫集群節(jié)點120包括:處理器21、網(wǎng)絡(luò)接口22、高速緩存器23、存儲器24和總線25。
處理器21包括一個或者一個以上處理核心,處理器21通過運行軟件程序以及模塊,從而執(zhí)行各種功能應(yīng)用以及數(shù)據(jù)處理。
網(wǎng)絡(luò)接口22可以為多個,其中一部分網(wǎng)絡(luò)接口22用于數(shù)據(jù)庫集群節(jié)點120與數(shù)據(jù)庫業(yè)務(wù)節(jié)點110進(jìn)行通信,另一部分網(wǎng)絡(luò)接口22用于數(shù)據(jù)庫集群節(jié)點120 與數(shù)據(jù)庫主節(jié)點130或備用數(shù)據(jù)庫主節(jié)點150進(jìn)行通信。
存儲器24與高速緩存器23分別通過總線25與處理器21相連。
存儲器可用于存儲軟件程序以及模塊。
存儲器可以存儲至少一個功能所需的應(yīng)用程序模塊26,應(yīng)用程序模塊26可以是發(fā)送模塊261、接收模塊262、執(zhí)行模塊263等。
發(fā)送模塊261用于通過網(wǎng)絡(luò)接口22通過線程向數(shù)據(jù)庫主節(jié)點發(fā)送訪問請求;以及用于根據(jù)返回響應(yīng)喚醒該線程;以及在未接收到接收響應(yīng)時,重新通過網(wǎng)絡(luò)接口22向備用數(shù)據(jù)庫主節(jié)點發(fā)送訪問請求。
接收模塊262用于通過網(wǎng)絡(luò)接口22接收數(shù)據(jù)庫主節(jié)點發(fā)送的接收響應(yīng),以及用于通過網(wǎng)絡(luò)接口22接收數(shù)據(jù)庫主節(jié)點發(fā)送的返回響應(yīng)。
執(zhí)行模塊263用于根據(jù)接收響應(yīng)掛起該線程。
存儲器24可以由任何類型的易失性或非易失性存儲設(shè)備或者它們的組合實現(xiàn),如靜態(tài)隨機存取存儲器(SRAM),電可擦除可編程只讀存儲器(EEPROM),可擦除可編程只讀存儲器(EPROM),可編程只讀存儲器(PROM),只讀存儲器(ROM),磁存儲器,快閃存儲器,磁盤或光盤。
本領(lǐng)域技術(shù)人員可以理解,圖2中所示出的數(shù)據(jù)庫集群節(jié)點120的結(jié)構(gòu)并不構(gòu)成對數(shù)據(jù)庫集群節(jié)點120的限定,可以包括比圖示更多或更少的部件,或者組合某些部件,或者不同的部件布置。
請參考圖3,其示出了本發(fā)明一個示例性實施例提供的數(shù)據(jù)庫主節(jié)點130的結(jié)構(gòu)示意圖。該數(shù)據(jù)庫主節(jié)點130包括:處理器31、網(wǎng)絡(luò)接口32、高速緩存器33、存儲器34和總線35。
處理器31包括一個或者一個以上處理核心,處理器31通過運行軟件程序以及模塊,從而執(zhí)行各種功能應(yīng)用以及數(shù)據(jù)處理。
網(wǎng)絡(luò)接口32可以為多個,其中一部分網(wǎng)絡(luò)接口32用于數(shù)據(jù)庫主節(jié)點130與數(shù)據(jù)庫集群節(jié)點120進(jìn)行通信,另一部分網(wǎng)絡(luò)接口32用于數(shù)據(jù)庫主節(jié)點130與共享文件系統(tǒng)140進(jìn)行通信。
存儲器34與高速緩存器33分別通過總線35與處理器31相連。
存儲器可以存儲至少一個功能所需的應(yīng)用程序模塊36,應(yīng)用程序模塊36可以是接收模塊361、執(zhí)行模塊362、發(fā)送模塊363等。
接收模塊361用于通過網(wǎng)絡(luò)接口32接收數(shù)據(jù)庫集群節(jié)點發(fā)送的訪問請求。
執(zhí)行模塊362用于將訪問請求存儲至分發(fā)隊列,并通過網(wǎng)絡(luò)接口32向數(shù)據(jù)庫集群節(jié)點發(fā)送接收響應(yīng),接收響應(yīng)用于觸發(fā)數(shù)據(jù)庫集群節(jié)點掛起與訪問請求對應(yīng)的線程;以及從分發(fā)隊列依次獲取訪問請求;以及根據(jù)訪問請求,通過網(wǎng)絡(luò)接口32從共享文件系統(tǒng)中讀數(shù)據(jù)或?qū)憯?shù)據(jù)。
發(fā)送模塊363用于通過網(wǎng)絡(luò)接口32向數(shù)據(jù)庫集群節(jié)點發(fā)送訪問請求的返回響應(yīng);返回響應(yīng)用于觸發(fā)數(shù)據(jù)庫集群節(jié)點喚醒線程。
存儲器34可以由任何類型的易失性或非易失性存儲設(shè)備或者它們的組合實現(xiàn),如靜態(tài)隨機存取存儲器(SRAM),電可擦除可編程只讀存儲器(EEPROM),可擦除可編程只讀存儲器(EPROM),可編程只讀存儲器(PROM),只讀存儲器(ROM),磁存儲器,快閃存儲器,磁盤或光盤。
本領(lǐng)域技術(shù)人員可以理解,圖3中所示出的數(shù)據(jù)庫主節(jié)點130的結(jié)構(gòu)并不構(gòu)成對數(shù)據(jù)庫主節(jié)點130的限定,可以包括比圖示更多或更少的部件,或者組合某些部件,或者不同的部件布置。
請參考圖4,其示出了本發(fā)明一個示例性實施例提供的數(shù)據(jù)庫訪問方法的流程圖。本實施例以該方法用于如圖1所示的分布式數(shù)據(jù)庫系統(tǒng)中來舉例說明,由如圖2所示的數(shù)據(jù)庫集群節(jié)點120的處理器21或如圖3所示的數(shù)據(jù)庫主節(jié)點130的處理器31執(zhí)行下述步驟,該方法包括以下幾個步驟:
步驟401,數(shù)據(jù)庫集群節(jié)點通過線程向數(shù)據(jù)庫主節(jié)點發(fā)送訪問請求;
可選的,多個數(shù)據(jù)庫集群節(jié)點分別通過不同線程向數(shù)據(jù)庫主節(jié)點發(fā)送訪問請求,即存在并發(fā)訪問的場景。
步驟402,數(shù)據(jù)庫主節(jié)點接收數(shù)據(jù)庫集群節(jié)點發(fā)送的訪問請求;
步驟403,數(shù)據(jù)庫主節(jié)點將訪問請求存儲至分發(fā)隊列,并向數(shù)據(jù)庫集群節(jié)點發(fā)送接收響應(yīng),接收響應(yīng)用于觸發(fā)數(shù)據(jù)庫集群節(jié)點掛起與訪問請求對應(yīng)的線程;
步驟404,數(shù)據(jù)庫集群節(jié)點接收數(shù)據(jù)庫主節(jié)點發(fā)送的接收響應(yīng);
步驟405,數(shù)據(jù)庫集群節(jié)點根據(jù)接收響應(yīng)掛起該線程;步驟406,數(shù)據(jù)庫主節(jié)點從分發(fā)隊列依次獲取訪問請求;
步驟407,數(shù)據(jù)庫主節(jié)點根據(jù)訪問請求從共享文件系統(tǒng)中讀數(shù)據(jù)或?qū)憯?shù)據(jù);
步驟408,數(shù)據(jù)庫主節(jié)點向數(shù)據(jù)庫集群節(jié)點發(fā)送訪問請求的返回響應(yīng),返回 響應(yīng)用于觸發(fā)數(shù)據(jù)庫集群節(jié)點喚醒該線程;
步驟409,數(shù)據(jù)庫集群節(jié)點接收數(shù)據(jù)庫主節(jié)點發(fā)送的返回響應(yīng);
步驟410,數(shù)據(jù)庫集群節(jié)點根據(jù)返回響應(yīng)喚醒該線程。
需要說明的是,上述步驟401、404、405、409和410可以單獨形成數(shù)據(jù)庫集群節(jié)點一側(cè)的數(shù)據(jù)庫訪問方法,上述步驟402、403、406、407和408可以單獨形成數(shù)據(jù)庫主節(jié)點一側(cè)的數(shù)據(jù)庫訪問方法。
綜上所述,本公開實施例提供的數(shù)據(jù)庫訪問方法,通過當(dāng)多個數(shù)據(jù)庫集群節(jié)點并發(fā)訪問數(shù)據(jù)庫主節(jié)點時,數(shù)據(jù)庫主節(jié)點同時接收多個訪問請求并存儲至分發(fā)隊列,再從分發(fā)隊列中逐個獲取訪問請求并執(zhí)行,使得在使用Sqlite數(shù)據(jù)庫的共享文件系統(tǒng)中,數(shù)據(jù)庫主節(jié)點能接收和處理并發(fā)的多個訪問請求,而不會出現(xiàn)卡死的現(xiàn)象,使Sqlite數(shù)據(jù)庫也能實現(xiàn)共享文件系統(tǒng)的并發(fā)機制,擴大了Sqlite數(shù)據(jù)庫的使用范圍。
請參考圖5,其示出了本發(fā)明一個示例性實施例提供的數(shù)據(jù)庫訪問方法的流程圖。本實施例以該方法運用于如圖1所示的分布式數(shù)據(jù)庫系統(tǒng)中來舉例說明,該方法包括以下幾個步驟:
步驟501,數(shù)據(jù)庫集群節(jié)點接收數(shù)據(jù)庫業(yè)務(wù)節(jié)點發(fā)送的訪問請求。
數(shù)據(jù)庫業(yè)務(wù)節(jié)點是提供數(shù)據(jù)庫業(yè)務(wù)的節(jié)點,數(shù)據(jù)庫業(yè)務(wù)節(jié)點根據(jù)提供的業(yè)務(wù)類型向與其連接的數(shù)據(jù)庫集群節(jié)點發(fā)送訪問請求,訪問請求的類型包括:讀請求和寫請求。
本步驟可以由數(shù)據(jù)庫集群節(jié)點中的處理器調(diào)用接收模塊來實現(xiàn)。
步驟502,數(shù)據(jù)庫集群節(jié)點解析訪問請求。
數(shù)據(jù)庫集群節(jié)點接收數(shù)據(jù)庫業(yè)務(wù)節(jié)點發(fā)送的訪問請求,數(shù)據(jù)庫集群節(jié)點根據(jù)數(shù)據(jù)庫消息發(fā)送協(xié)議對訪問請求進(jìn)行解析,從而得到數(shù)據(jù)庫的類型和訪問請求中的操作字段,數(shù)據(jù)庫集群節(jié)點確定訪問請求的類型為讀請求或?qū)懻埱?,?dāng)訪問請求的類型為讀請求時,表示數(shù)據(jù)庫業(yè)務(wù)節(jié)點請求從數(shù)據(jù)庫讀取數(shù)據(jù);當(dāng)訪問請求的類型為寫請求時,表示數(shù)據(jù)庫業(yè)務(wù)節(jié)點請求將數(shù)據(jù)寫入數(shù)據(jù)庫。
可選的,數(shù)據(jù)庫集群節(jié)點解析訪問請求后,還得到:請求訪問的數(shù)據(jù)所在的數(shù)據(jù)庫、數(shù)據(jù)庫的類型、請求訪問的數(shù)據(jù)所在的表、請求訪問的數(shù)據(jù)所在的行和列等消息,本實施例對訪問請求中的內(nèi)容不做限定。
當(dāng)訪問請求是請求從數(shù)據(jù)庫中讀取數(shù)據(jù)A時,數(shù)據(jù)庫集群節(jié)點查找緩存的數(shù)據(jù)庫數(shù)據(jù),數(shù)據(jù)庫數(shù)據(jù)可以存儲在數(shù)據(jù)庫集群節(jié)點自身的高速緩存器或存儲器中,若數(shù)據(jù)庫集群節(jié)點緩存的數(shù)據(jù)庫數(shù)據(jù)中包括數(shù)據(jù)A,則數(shù)據(jù)庫集群節(jié)點直接執(zhí)行步驟515;若數(shù)據(jù)庫集群節(jié)點緩存的數(shù)據(jù)庫數(shù)據(jù)中不包括數(shù)據(jù)A,則數(shù)據(jù)庫集群節(jié)點執(zhí)行步驟503。
當(dāng)訪問請求是請求將數(shù)據(jù)B寫入到數(shù)據(jù)庫中時,則數(shù)據(jù)庫集群節(jié)點執(zhí)行步驟503。
本步驟可以由數(shù)據(jù)庫集群節(jié)點中的處理器調(diào)用執(zhí)行模塊來實現(xiàn)。
步驟503,數(shù)據(jù)庫集群節(jié)點通過線程向數(shù)據(jù)庫主節(jié)點發(fā)送訪問請求。
可選的,多個數(shù)據(jù)庫集群節(jié)點同時向數(shù)據(jù)庫主節(jié)點發(fā)送訪問請求,也即,多個數(shù)據(jù)庫業(yè)務(wù)節(jié)點通過數(shù)據(jù)庫集群節(jié)點并發(fā)訪問數(shù)據(jù)庫主節(jié)點。
本步驟可以由數(shù)據(jù)庫集群節(jié)點中的處理器調(diào)用發(fā)送模塊來實現(xiàn)。
步驟504,數(shù)據(jù)庫主節(jié)點接收數(shù)據(jù)庫集群節(jié)點發(fā)送的訪問請求。
可選的,數(shù)據(jù)庫主節(jié)點同時接收多個訪問請求。
本步驟可以由數(shù)據(jù)庫主節(jié)點中的處理器調(diào)用接收模塊來實現(xiàn)。
步驟505,數(shù)據(jù)庫主節(jié)點將訪問請求存儲至分發(fā)隊列。
數(shù)據(jù)庫主節(jié)點對于接收到的訪問請求并不直接進(jìn)行解析處理,而是先依次存儲至分發(fā)隊列??蛇x的,數(shù)據(jù)庫主節(jié)點根據(jù)訪問請求的接收時刻的先后順序,將訪問請求存儲至分發(fā)隊列,即將先接收到的訪問請求先存儲至分發(fā)隊列,后接收到的訪問請求后存儲至分發(fā)隊列。數(shù)據(jù)庫主節(jié)點還可以根據(jù)數(shù)據(jù)庫集群節(jié)點發(fā)送訪問請求的時刻的先后順序,或其他順序?qū)⒃L問請求存儲至分發(fā)隊列,本實施例對此不作限定。
可選的,當(dāng)存在多個并發(fā)的訪問請求時,數(shù)據(jù)庫主節(jié)點同時接收到多個訪問請求,則數(shù)據(jù)庫主節(jié)點對于同時接收到的多個訪問請求進(jìn)行存儲的先后順序可以是隨機的,也可以提前設(shè)定每一個訪問請求的優(yōu)先級,根據(jù)優(yōu)先級確定存儲的先后順序,本公開實施例對此不作限定。
分發(fā)隊列存儲在數(shù)據(jù)庫主節(jié)點的高速緩存器或存儲器中。
本步驟可以由數(shù)據(jù)庫主節(jié)點中的處理器調(diào)用執(zhí)行模塊來實現(xiàn)。
步驟506,數(shù)據(jù)庫主節(jié)點向數(shù)據(jù)庫集群節(jié)點發(fā)送接收響應(yīng),接收響應(yīng)用于觸發(fā)數(shù)據(jù)庫集群節(jié)點掛起與訪問請求對應(yīng)的線程。
當(dāng)數(shù)據(jù)庫主節(jié)點成功將訪問請求存儲至分發(fā)隊列后,數(shù)據(jù)庫主節(jié)點通過該訪問請求對應(yīng)的線程向數(shù)據(jù)庫集群節(jié)點發(fā)送接收響應(yīng)。
本步驟可以由數(shù)據(jù)庫主節(jié)點中的處理器調(diào)用發(fā)送模塊來實現(xiàn)。
步驟507,數(shù)據(jù)庫集群節(jié)點接收數(shù)據(jù)庫主節(jié)點發(fā)送的接收響應(yīng)。
本步驟可以由數(shù)據(jù)庫集群節(jié)點中的處理器調(diào)用接收模塊來實現(xiàn)。
步驟508,數(shù)據(jù)庫集群節(jié)點根據(jù)接收響應(yīng)掛起該線程。
數(shù)據(jù)庫集群節(jié)點接收到接收響應(yīng),并將該接收響應(yīng)對應(yīng)的訪問請求所在的線程進(jìn)行掛起。
可選的,該線程為數(shù)據(jù)庫集群節(jié)點的執(zhí)行線程。
由于數(shù)據(jù)庫主節(jié)點將訪問請求先依次存儲至分發(fā)隊列再進(jìn)行處理,即數(shù)據(jù)庫主節(jié)點異步處理訪問請求,也即數(shù)據(jù)庫集群節(jié)點通過線程發(fā)送訪問請求的過程,與數(shù)據(jù)庫主節(jié)點處理訪問請求并訪問共享文件系統(tǒng)的過程并不是同步進(jìn)行的。為了使數(shù)據(jù)庫集群節(jié)點的線程在發(fā)送訪問請求后與數(shù)據(jù)庫主節(jié)點保持同步,數(shù)據(jù)庫集群節(jié)點掛起該線程。
本步驟可以由數(shù)據(jù)庫集群節(jié)點中的處理器調(diào)用執(zhí)行模塊來實現(xiàn)。
步驟509,數(shù)據(jù)庫主節(jié)點從分發(fā)隊列依次獲取訪問請求。
數(shù)據(jù)庫主節(jié)點從分發(fā)隊列中依次獲取訪問請求,且從分發(fā)隊列獲取訪問請求的順序與訪問請求存儲至分發(fā)隊列的順序相同,如圖6所示的分發(fā)隊列的示意圖:
訪問請求1、訪問請求2……訪問請求n依次存儲在分發(fā)隊列中,當(dāng)數(shù)據(jù)庫主節(jié)點從分發(fā)隊列獲取訪問請求時,按照訪問請求1、訪問請求2……訪問請求n的順序從分發(fā)隊列中獲取。
本步驟可以由數(shù)據(jù)庫主節(jié)點中的處理器調(diào)用執(zhí)行模塊來實現(xiàn)。
步驟510,數(shù)據(jù)庫主節(jié)點解析訪問請求。
數(shù)據(jù)庫主節(jié)點對訪問請求進(jìn)行解析的方法與步驟502中數(shù)據(jù)庫集群節(jié)點對訪問請求進(jìn)行解析的方法相同,數(shù)據(jù)庫主節(jié)點確定訪問請求的類型為讀請求或?qū)懻埱蟆?/p>
可選的,數(shù)據(jù)庫集群節(jié)點解析訪問請求后,還可以得到:請求訪問的數(shù)據(jù)所在的數(shù)據(jù)庫、數(shù)據(jù)庫的類型、請求訪問的數(shù)據(jù)所在的表、請求訪問的數(shù)據(jù)所在的行和列,本實施例對訪問請求中的內(nèi)容不做限定。
本步驟可以由數(shù)據(jù)庫主節(jié)點中的處理器調(diào)用執(zhí)行模塊來實現(xiàn)。
步驟511,數(shù)據(jù)庫主節(jié)點根據(jù)訪問請求從共享文件系統(tǒng)中讀數(shù)據(jù)或?qū)憯?shù)據(jù);
根據(jù)訪問請求的類型不同,該步驟在讀數(shù)據(jù)或?qū)憯?shù)據(jù)時的具體步驟也不同;
本步驟可以由數(shù)據(jù)庫主節(jié)點中的處理器調(diào)用執(zhí)行模塊來實現(xiàn)。
當(dāng)訪問請求的類型為讀請求時,步驟511為數(shù)據(jù)庫主節(jié)點根據(jù)訪問請求從共享文件系統(tǒng)中讀數(shù)據(jù),具體包括以下幾個步驟,如圖7所示:
步驟701,數(shù)據(jù)庫主節(jié)點提交與訪問請求對應(yīng)的讀任務(wù)至讀任務(wù)線程。
數(shù)據(jù)庫主節(jié)點將一個讀任務(wù)提交至一個讀任務(wù)線程,可選的,存在多個讀任務(wù)線程,每一個讀任務(wù)線程執(zhí)行一個讀任務(wù)。
可選的,最多存在N個讀任務(wù)線程,當(dāng)N個讀任務(wù)線程都在執(zhí)行讀任務(wù)時,數(shù)據(jù)庫主節(jié)點停止將讀請求提交到讀任務(wù)線程;當(dāng)N個讀任務(wù)線程中存在至少一個讀任務(wù)線程空閑時,數(shù)據(jù)庫主節(jié)點繼續(xù)將讀請求提交到空閑的讀任務(wù)線程。本實施例對N的取值不作限定。
本步驟可以由數(shù)據(jù)庫主節(jié)點中的處理器調(diào)用執(zhí)行模塊來實現(xiàn)。
步驟702,數(shù)據(jù)庫主節(jié)點中的讀任務(wù)線程為讀任務(wù)分配獨立的數(shù)據(jù)庫句柄。
每一個讀任務(wù)線程都為與其對應(yīng)的讀任務(wù)分配一個數(shù)據(jù)庫句柄,每一個讀任務(wù)的數(shù)據(jù)庫句柄都是獨立的。
本步驟可以由數(shù)據(jù)庫主節(jié)點中的處理器調(diào)用執(zhí)行模塊來實現(xiàn)。
步驟703,數(shù)據(jù)庫主節(jié)點根據(jù)數(shù)據(jù)庫句柄和讀任務(wù),通過該讀任務(wù)線程從共享文件系統(tǒng)讀數(shù)據(jù)。
對于每一個讀任務(wù),數(shù)據(jù)庫主節(jié)點通過其所在的讀任務(wù)線程讀取其對應(yīng)的數(shù)據(jù)庫句柄,直接讀取到讀任務(wù)請求的數(shù)據(jù)庫數(shù)據(jù)。
本步驟可以由數(shù)據(jù)庫主節(jié)點中的處理器調(diào)用執(zhí)行模塊來實現(xiàn)。
如圖7所示,當(dāng)存在多個讀任務(wù)時,同時存在多個讀任務(wù)線程,則對于每一個讀任務(wù),數(shù)據(jù)庫主節(jié)點都執(zhí)行步驟701~703。
當(dāng)訪問請求的類型為寫請求時,步驟511為數(shù)據(jù)庫主節(jié)點根據(jù)訪問請求向共享文件系統(tǒng)中寫數(shù)據(jù),具體包括以下幾個步驟,如圖8所示:
步驟801,當(dāng)寫任務(wù)線程為空閑時,數(shù)據(jù)庫主節(jié)點提交與訪問請求對應(yīng)的寫任務(wù)至寫任務(wù)線程,寫任務(wù)線程用于根據(jù)寫任務(wù)向共享文件系統(tǒng)寫入數(shù)據(jù)。
數(shù)據(jù)庫主節(jié)點中只存在一個寫任務(wù)線程,數(shù)據(jù)庫主節(jié)點先判斷該寫任務(wù)線 程中是否有寫任務(wù)在執(zhí)行,若寫任務(wù)線程空閑,則數(shù)據(jù)庫主節(jié)點將訪問請求對應(yīng)的寫任務(wù)提交至寫任務(wù)線程。
可選的,若寫任務(wù)線程中有寫任務(wù)在執(zhí)行,則數(shù)據(jù)庫主節(jié)點停止將寫請求提交到寫任務(wù)線程。
本步驟可以由數(shù)據(jù)庫主節(jié)點中的處理器調(diào)用執(zhí)行模塊來實現(xiàn)。
步驟802,數(shù)據(jù)庫主節(jié)點中的寫任務(wù)線程根據(jù)寫任務(wù)向共享文件系統(tǒng)寫入數(shù)據(jù)。
本步驟可以由數(shù)據(jù)庫主節(jié)點中的處理器調(diào)用執(zhí)行模塊來實現(xiàn)。
當(dāng)數(shù)據(jù)庫主節(jié)點根據(jù)步驟703或步驟802從共享文件系統(tǒng)讀取數(shù)據(jù)或?qū)?shù)據(jù)寫入共享文件系統(tǒng)成功時,執(zhí)行步驟512。
步驟512,數(shù)據(jù)庫主節(jié)點向數(shù)據(jù)庫集群節(jié)點發(fā)送訪問請求的返回響應(yīng),返回響應(yīng)用于觸發(fā)數(shù)據(jù)庫集群節(jié)點喚醒該線程。
可選的,數(shù)據(jù)庫主節(jié)點確定對訪問請求執(zhí)行成功,則生成返回響應(yīng);或者,數(shù)據(jù)庫主節(jié)點接收共享文件系統(tǒng)發(fā)送的返回響應(yīng),本實施例對此不作限定。
可選的,在訪問請求的類型是讀請求時,返回響應(yīng)包括:請求讀取的數(shù)據(jù)。在訪問請求的類型是寫請求時,返回響應(yīng)包括:寫入成功響應(yīng),其中,寫入成功響應(yīng)用于提示數(shù)據(jù)已經(jīng)成功寫入數(shù)據(jù)庫中。本實施例對返回響應(yīng)的內(nèi)容不作限定。
數(shù)據(jù)庫主節(jié)點將返回響應(yīng)發(fā)送至對應(yīng)的數(shù)據(jù)庫集群節(jié)點。
本步驟可以由數(shù)據(jù)庫主節(jié)點中的處理器調(diào)用發(fā)送模塊來實現(xiàn)。
步驟513,數(shù)據(jù)庫集群節(jié)點接收數(shù)據(jù)庫主節(jié)點發(fā)送的返回響應(yīng)。
本步驟可以由數(shù)據(jù)庫集群節(jié)點中的處理器調(diào)用接收模塊來實現(xiàn)。
步驟514,數(shù)據(jù)庫集群節(jié)點根據(jù)返回響應(yīng)喚醒該線程。
數(shù)據(jù)庫集群節(jié)點接收訪問請求對應(yīng)的返回響應(yīng),根據(jù)返回響應(yīng)喚醒該線程,并通過該線程將返回響應(yīng)發(fā)送給數(shù)據(jù)庫業(yè)務(wù)節(jié)點。
本步驟可以由數(shù)據(jù)庫集群節(jié)點中的處理器調(diào)用執(zhí)行模塊來實現(xiàn)。
步驟515,數(shù)據(jù)庫集群節(jié)點將返回響應(yīng)發(fā)送給數(shù)據(jù)庫業(yè)務(wù)節(jié)點。
若數(shù)據(jù)庫集群節(jié)點緩存的數(shù)據(jù)庫數(shù)據(jù)中包括數(shù)據(jù)庫業(yè)務(wù)節(jié)點訪問請求中請求讀取的數(shù)據(jù),則返回響應(yīng)是數(shù)據(jù)庫集群節(jié)點根據(jù)請求生成的。
若數(shù)據(jù)庫集群節(jié)點緩存的數(shù)據(jù)庫數(shù)據(jù)中不包括數(shù)據(jù)庫業(yè)務(wù)節(jié)點訪問請求中 請求讀取的數(shù)據(jù),返回響應(yīng)是數(shù)據(jù)庫集群節(jié)點執(zhí)行上述數(shù)據(jù)庫訪問方法后獲取到的。
本步驟可以由數(shù)據(jù)庫集群節(jié)點中的處理器調(diào)用發(fā)送模塊來實現(xiàn)。
綜上所述,本公開實施例提供的數(shù)據(jù)庫訪問方法,當(dāng)多個數(shù)據(jù)庫集群節(jié)點并發(fā)訪問數(shù)據(jù)庫主節(jié)點時,數(shù)據(jù)庫主節(jié)點同時接收多個訪問請求并存儲至分發(fā)隊列,再從分發(fā)隊列中逐個獲取訪問請求并執(zhí)行,使得在使用Sqlite數(shù)據(jù)庫的共享文件系統(tǒng)中,數(shù)據(jù)庫主節(jié)點能接收和處理并發(fā)的多個訪問請求,而不會出現(xiàn)卡死的現(xiàn)象,使Sqlite數(shù)據(jù)庫也能實現(xiàn)共享文件系統(tǒng)的并發(fā)機制,擴大了Sqlite數(shù)據(jù)庫的使用范圍。
綜上所述,本公開實施例提供的數(shù)據(jù)庫訪問方法,通過對訪問請求進(jìn)行解析獲得訪問請求的類型,對讀請求,為每一個讀請求分配一個獨立的數(shù)據(jù)庫句柄進(jìn)行訪問,讀請求單獨使用一個數(shù)據(jù)庫句柄進(jìn)行訪問,使讀任務(wù)之間相互獨立,能夠并發(fā)訪問,使Sqlite數(shù)據(jù)庫能夠支持并發(fā)的讀訪問;對于寫請求,數(shù)據(jù)庫主節(jié)點在同一時間只執(zhí)行一個寫請求,保證了不會存在多個寫請求對同一數(shù)據(jù)區(qū)域進(jìn)行修改的情況,保證了數(shù)據(jù)的一致性。
可選的,在基于圖5的其他可選實施例中,當(dāng)數(shù)據(jù)庫主節(jié)點出現(xiàn)故障,或當(dāng)數(shù)據(jù)庫主節(jié)點與數(shù)據(jù)庫集群節(jié)點的連接斷開,或在其他情況下,數(shù)據(jù)庫集群節(jié)點不能接收到接收響應(yīng),則該實施例包括步驟507a,如圖9所示:
步驟507a,數(shù)據(jù)庫集群節(jié)點在第一預(yù)定時間內(nèi)未接收到接收響應(yīng)時,重新向備用數(shù)據(jù)庫主節(jié)點發(fā)送訪問請求。
數(shù)據(jù)庫集群節(jié)點在第一預(yù)定時間內(nèi)沒有通過線程接收到數(shù)據(jù)庫主節(jié)點發(fā)送的接收響應(yīng),則重新向備用數(shù)據(jù)庫主節(jié)點發(fā)送訪問請求,即重新執(zhí)行上述圖5所示實施例中的步驟503,本實施例對第一預(yù)定時間不作限定。
本步驟可以由數(shù)據(jù)庫集群節(jié)點中的處理器調(diào)用發(fā)送模塊來實現(xiàn)。
綜上所述,本公開實施例提供的數(shù)據(jù)庫訪問方法,當(dāng)數(shù)據(jù)庫主節(jié)點出現(xiàn)故障時,數(shù)據(jù)庫集群節(jié)點可以快速切換為向備用數(shù)據(jù)庫主節(jié)點發(fā)送訪問請求,減少數(shù)據(jù)庫主節(jié)點切換所使用的時間,減小了數(shù)據(jù)庫操作對數(shù)據(jù)庫上層業(yè)務(wù)的影響。
可選的,在基于圖5的其他可選實施例中,當(dāng)數(shù)據(jù)庫主節(jié)點從共享文件系統(tǒng)中讀數(shù)據(jù)或?qū)蚕砦募到y(tǒng)寫入數(shù)據(jù)失敗時,數(shù)據(jù)庫主節(jié)點不向數(shù)據(jù)庫集群節(jié)點發(fā)送返回響應(yīng),則該實施例包括以下步驟512a,如圖10所示:
步驟512a,數(shù)據(jù)庫集群節(jié)點在第二預(yù)定時間內(nèi)未接收到返回響應(yīng)時,重新向備用數(shù)據(jù)庫主節(jié)點發(fā)送訪問請求。
數(shù)據(jù)庫集群節(jié)點在第二預(yù)定時間內(nèi)沒有通過線程接收到數(shù)據(jù)庫主節(jié)點發(fā)送的返回響應(yīng),則重新向備用數(shù)據(jù)庫主節(jié)點發(fā)送訪問請求,即重新執(zhí)行上述圖5所示實施例中的步驟503,本實施例對第二預(yù)定時間不作限定。
本步驟可以由數(shù)據(jù)庫集群節(jié)點中的處理器調(diào)用發(fā)送模塊來實現(xiàn)。
綜上所述,本公開實施例提供的數(shù)據(jù)庫訪問方法,當(dāng)數(shù)據(jù)庫主節(jié)點出現(xiàn)故障時,數(shù)據(jù)庫集群節(jié)點可以快速切換為向備用數(shù)據(jù)庫主節(jié)點發(fā)送訪問請求,減少數(shù)據(jù)庫主節(jié)點切換所使用的時間,減小了數(shù)據(jù)庫操作對數(shù)據(jù)庫上層業(yè)務(wù)的影響。
可選的,在基于圖5的其他可選的實施例中,當(dāng)數(shù)據(jù)庫主節(jié)點從共享文件系統(tǒng)中讀數(shù)據(jù)或?qū)蚕砦募到y(tǒng)寫入數(shù)據(jù)失敗時,數(shù)據(jù)庫主節(jié)點向數(shù)據(jù)庫發(fā)送訪問失敗響應(yīng),則該實施例包括以下步驟,如圖11所示:
步驟512b,數(shù)據(jù)庫主節(jié)點向數(shù)據(jù)庫集群節(jié)點發(fā)送訪問失敗響應(yīng)。
可選的,數(shù)據(jù)庫主節(jié)點確定對訪問請求執(zhí)行失敗,則生成訪問失敗響應(yīng);或者,數(shù)據(jù)庫主節(jié)點接收共享文件系統(tǒng)發(fā)送的訪問失敗響應(yīng),本實施例對此不作限定。
本步驟可以由數(shù)據(jù)庫主節(jié)點中的處理器調(diào)用發(fā)送模塊來實現(xiàn)。
步驟513b,數(shù)據(jù)庫集群節(jié)點接收數(shù)據(jù)庫主節(jié)點發(fā)送的訪問失敗響應(yīng)。
本步驟可以由數(shù)據(jù)庫集群節(jié)點中的處理器調(diào)用接收模塊來實現(xiàn)。
步驟514b,數(shù)據(jù)庫集群節(jié)點重新向備用數(shù)據(jù)庫主節(jié)點發(fā)送訪問請求。
訪問失敗響應(yīng)用于向數(shù)據(jù)庫集群節(jié)點提示數(shù)據(jù)庫主節(jié)點訪問共享文件系統(tǒng)失敗,則數(shù)據(jù)庫集群節(jié)點重新向備用數(shù)據(jù)庫主節(jié)點發(fā)送訪問請求,即重新執(zhí)行上述圖5所示實施例中的步驟503。
本步驟可以由數(shù)據(jù)庫集群節(jié)點中的處理器調(diào)用發(fā)送模塊來實現(xiàn)。
綜上所述,本公開實施例提供的數(shù)據(jù)庫訪問方法,當(dāng)數(shù)據(jù)庫主節(jié)點出現(xiàn)故 障時,數(shù)據(jù)庫集群節(jié)點可以快速切換為向備用數(shù)據(jù)庫主節(jié)點發(fā)送訪問請求,減少數(shù)據(jù)庫主節(jié)點切換所使用的時間,減小了數(shù)據(jù)庫操作對數(shù)據(jù)庫上層業(yè)務(wù)的影響。
請參考圖12,其示出了本發(fā)明一個實施例提供的數(shù)據(jù)庫訪問裝置的框圖。該數(shù)據(jù)庫訪問裝置可以通過軟件、硬件或者兩者的結(jié)合實現(xiàn)成為數(shù)據(jù)庫集群節(jié)點的全部或者一部分。該數(shù)據(jù)庫訪問裝置可以包括:發(fā)送單元1210、接收單元1220和執(zhí)行單元1230。
發(fā)送單元1210,用于實現(xiàn)上述步驟401功能。
接收單元1220,用于實現(xiàn)上述步驟404、步驟409中至少一個步驟的功能。
執(zhí)行單元1230,用于實現(xiàn)上述步驟405、步驟410中至少一個步驟的功能。
相關(guān)細(xì)節(jié)可結(jié)合參考上述方法實施例。
請參考圖13,其示出了本發(fā)明一個實施例提供的數(shù)據(jù)庫訪問裝置的框圖。該數(shù)據(jù)庫訪問裝置可以通過軟件、硬件或者兩者的結(jié)合實現(xiàn)成為數(shù)據(jù)庫主節(jié)點的全部或者一部分。該數(shù)據(jù)庫訪問裝置可以包括:接收單元1310、執(zhí)行單元1320和發(fā)送單元1330。
接收單元1310,用于實現(xiàn)上述步驟402的功能。
執(zhí)行單元1320,用于實現(xiàn)上述步驟403、步驟406、步驟407中至少一個步驟的功能。
發(fā)送單元1330,用于實現(xiàn)上述步驟408的功能。
相關(guān)細(xì)節(jié)可結(jié)合參考上述方法實施例。
在另一個可選的實施例中,上述發(fā)送單元1210,用于實現(xiàn)步驟503、步驟507a、步驟512a、步驟514b、步驟515中的至少一個步驟的功能。
上述接收單元1220,用于實現(xiàn)步驟501、步驟507、步驟513b、步驟513中至少一個步驟的功能。
上述執(zhí)行單元1230,用于實現(xiàn)步驟502、步驟508、步驟514中至少一個步驟的功能。
在另一個可選的實施例中,上述接收單元1310,用于實現(xiàn)步驟504的功能。
上述執(zhí)行單元1320,用于實現(xiàn)步驟505、步驟509、步驟510、步驟511、步驟701、步驟702、步驟703、步驟801、步驟802中至少一個步驟的功能。
發(fā)送單元1330,用于實現(xiàn)上述步驟506、步驟512b、步驟512中至少一個步驟的功能。
需要說明的是,上述的發(fā)送單元1210可以通過數(shù)據(jù)庫集群節(jié)點的處理器執(zhí)行存儲器中的發(fā)送模塊來實現(xiàn);上述的接收單元1220可以通過數(shù)據(jù)庫集群節(jié)點的處理器執(zhí)行存儲器中的接收模塊來實現(xiàn);上述執(zhí)行單元1230可以通過數(shù)據(jù)庫集群節(jié)點的處理器執(zhí)行存儲器中的執(zhí)行模塊來實現(xiàn);上述接收單元1310可以通過數(shù)據(jù)庫主節(jié)點的處理器執(zhí)行存儲器中的接收模塊來實現(xiàn);上述執(zhí)行單元1320可以通過數(shù)據(jù)庫主節(jié)點的處理器執(zhí)行存儲器中的執(zhí)行模塊來實現(xiàn);上述發(fā)送單元1330可以通過數(shù)據(jù)庫主節(jié)點的處理器執(zhí)行存儲器中的發(fā)送模塊來實現(xiàn)。
上述本發(fā)明實施例序號僅僅為了描述,不代表實施例的優(yōu)劣。
本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述實施例的全部或部分步驟可以通過硬件來完成,也可以通過程序來指令相關(guān)的硬件完成,所述的程序可以存儲于一種計算機可讀存儲介質(zhì)中,上述提到的存儲介質(zhì)可以是只讀存儲器,磁盤或光盤等。
以上所述僅為本發(fā)明的較佳實施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。