一種內存數(shù)據(jù)庫通信方法及系統(tǒng)的制作方法
【技術領域】
[0001] 本發(fā)明涉及一種內存數(shù)據(jù)庫通信方法及系統(tǒng),屬于網絡通信領域,也涉及內存數(shù) 據(jù)庫訪問技術。
【背景技術】
[0002] 內存數(shù)據(jù)庫憑借其超高的內存訪問速度,在電信計費、實時在線交易等系統(tǒng)中有 著廣泛的應用,但這種高速度僅限于同主機的訪問。
[0003] 當應用系統(tǒng)和內存數(shù)據(jù)庫不在同一主機上時,他們之間一般是采用socket方式, 使用TCP協(xié)議,通過以太網來完成數(shù)據(jù)訪問。由于TCP協(xié)議的復雜性和以太網的高時延特 性,針對一次SQL查詢,消耗在網絡上的通信時間遠遠大于內存訪問時間,使得內存數(shù)據(jù)庫 的高速內存訪問的優(yōu)勢完全無法發(fā)揮出來。
[0004] 在越來越多的云計算系統(tǒng)環(huán)境中,數(shù)據(jù)庫和應用系統(tǒng)分別部署在不同的服務器主 機上,跨主機訪問內存數(shù)據(jù)庫將成為常態(tài)。所以必須找到一種辦法,來降低這種跨主機網絡 訪問的時間消耗。
[0005] Infiniband網絡具備高帶寬低時延的特性,能夠提供比以太網更高的性能。 Infiniband網絡支持遠程內存直接訪問(RDMA),通過零拷貝機制大幅降低通信時延;同 時,Infiniband也提供基于TCP/IP技術的通信模式IPoIB (IP over IB),可以兼容傳統(tǒng)的 基于socket編程接口的數(shù)據(jù)庫系統(tǒng),但是,IPoIB由于增加了不必要的協(xié)議開銷,性能比以 太網提尚有限。
【發(fā)明內容】
[0006] 本發(fā)明所要解決的技術問題是提供一種可以充分發(fā)揮Infiniband網絡低時延的 優(yōu)勢,大幅提高內存數(shù)據(jù)庫SQL執(zhí)行的效率基于Infiniband網絡的內存數(shù)據(jù)庫通信方法及 系統(tǒng)。
[0007] 本發(fā)明解決上述技術問題的技術方案如下:一種內存數(shù)據(jù)庫通信方法,具體包括 以下步驟:
[0008] 步驟1 :客戶端發(fā)送登錄請求到內存數(shù)據(jù)庫服務端,與內存數(shù)據(jù)庫服務端建立 socket 連接;
[0009] 步驟2 :內存數(shù)據(jù)庫服務端收到登錄請求和客戶端發(fā)送的客戶端lid,并進行鑒 權,判斷是否通過鑒定,如果是,執(zhí)行步驟3 ;否則,關閉socket連接,結束;
[0010] 步驟3 :將本地Iid發(fā)送到客戶端,客戶端與內存數(shù)據(jù)庫服務端根據(jù)客戶端Iid和 本地Iid建立RDMA連接;
[0011] 步驟4:檢測是否接收到客戶端的SQL請求,如果是,執(zhí)行步驟5;否則,關閉 socket連接,終止數(shù)據(jù)庫服務,結束;
[0012] 步驟5 :處理SQL請求,將處理結果反饋到客戶端;
[0013] 步驟6:判斷客戶端是否發(fā)出下一個SQL請求,如果是,執(zhí)行步驟4;否則,關閉 socket連接,結束。
[0014] 本發(fā)明的有益效果是:本發(fā)明可以使客戶端程序在訪問內存數(shù)據(jù)庫時,充分發(fā)揮 Infiniband的低時延特性,對于一次SQL查詢,所耗費的時間降低到千兆以太網的20 %左 右,使得內存數(shù)據(jù)庫的快速訪問優(yōu)勢在跨主機部署時也能得到體現(xiàn);同時,內存數(shù)據(jù)庫服務 端進程在沒有SQL請求時,也不會占用大量CPU ;在客戶端正在執(zhí)行SQL的過程中,如果突 然發(fā)生異常退出,內存數(shù)據(jù)庫也能立即感知到,并終止未完成的數(shù)據(jù)庫事務。
[0015] 在上述技術方案的基礎上,本發(fā)明還可以做如下改進。
[0016] 進一步,所述步驟4具體包括以下步驟:
[0017] 步驟4. 1 :通過poll檢測預設時間內是否接收到客戶端的SQL請求,如果是,執(zhí)行 步驟5;否則,執(zhí)行步驟4. 2;
[0018] 步驟4. 2 :判斷socket連接是否正常,如果是,執(zhí)行步驟4. 1 ;否則,執(zhí)行步驟4. 3 ;
[0019] 步驟4. 3 :關閉socket連接,終止數(shù)據(jù)庫服務,結束。
[0020] 進一步,所述步驟1中客戶端與內存數(shù)據(jù)庫服務端通過以太網建立socket連接。
[0021] 進一步,所述步驟3中客戶端與內存數(shù)據(jù)庫服務端根據(jù)客戶端Iid和本地Iid建 立基于Infiniband的RDMA機制的RDMA連接。
[0022] 進一步,所述客戶端在發(fā)送SQL請求和接收執(zhí)行結果的過程中與內存數(shù)據(jù)庫服務 端保持長連接,可多次發(fā)送SQL請求和接收處理結果。
[0023] 進一步,所述內存數(shù)據(jù)庫服務端在接收到客戶端發(fā)送的登錄請求前需要啟動 socket 監(jiān)聽。
[0024] 本發(fā)明解決上述技術問題的技術方案如下:一種內存數(shù)據(jù)庫通信系統(tǒng),包括 socket連接模塊、鑒權模塊、RDM連接模塊、檢測模塊和請求判斷模塊;
[0025] 所述socket連接模塊用于控制客戶端發(fā)送登錄請求到內存數(shù)據(jù)庫服務端,與內 存數(shù)據(jù)庫服務端建立socket連接;
[0026] 所述鑒權模塊用于控制內存數(shù)據(jù)庫服務端收到登錄請求和客戶端發(fā)送的客戶端 lid,并進行鑒權,判斷是否通過鑒定,如果是,觸發(fā)RDMA連接模塊;否則,關閉socket連 接;
[0027] 所述RDM連接模塊用于將本地Iid發(fā)送到客戶端,客戶端與內存數(shù)據(jù)庫服務端根 據(jù)客戶端Iid和本地Iid建立RDMA連接;
[0028] 所述檢測模塊用于檢測是否接收到客戶端的SQL請求,如果是,處理SQL請求,將 處理結果反饋到客戶端;否則,關閉socket連接,終止數(shù)據(jù)庫服務;
[0029] 所述請求判斷模塊用于判斷客戶端是否發(fā)出下一個SQL請求,如果是,觸發(fā)檢測 模塊;否則,關閉socket連接。
[0030] 本發(fā)明的有益效果是:本發(fā)明可以使客戶端程序在訪問內存數(shù)據(jù)庫時,充分發(fā)揮 Infiniband的低時延特性,對于一次SQL查詢,所耗費的時間降低到千兆以太網的20 %左 右,使得內存數(shù)據(jù)庫的快速訪問優(yōu)勢在跨主機部署時也能得到體現(xiàn);同時,內存數(shù)據(jù)庫服務 端進程在沒有SQL請求時,也不會占用大量CPU ;在客戶端正在執(zhí)行SQL的過程中,如果突 然發(fā)生異常退出,內存數(shù)據(jù)庫也能立即感知到,并終止未完成的數(shù)據(jù)庫事務。
[0031 ] 在上述技術方案的基礎上,本發(fā)明還可以做如下改進。
[0032] 進一步,所述檢測模塊包括時間檢測模塊和連接判斷模塊;
[0033] 所述時間檢測模塊用于通過poll檢測預設時間內是否接收到客戶端的SQL請求, 如果是,處理SQL請求,將處理結果反饋到客戶端;否則,觸發(fā)連接判斷模塊;
[0034] 所述連接判斷模塊用于判斷socket連接是否正常,如果是,觸發(fā)時間檢測模塊; 否則,關閉socket連接,終止數(shù)據(jù)庫服務。
[0035] 進一步,所述socket連接模塊中客戶端與內存數(shù)據(jù)庫服務端通過以太網建立 socket 連接。
[0036] 進一步,所述RDM連接模塊中客戶端與內存數(shù)據(jù)庫服務端根據(jù)客戶端Iid和本地 Iid建立基于Infiniband的RDMA機制的RDMA連接。
[0037] 進一步,所述客戶端在發(fā)送SQL請求和接收執(zhí)行結果的過程中與內存數(shù)據(jù)庫服務 端保持長連接,可多次發(fā)送SQL請求和接收處理結果。
[0038] 進一步,所述內存數(shù)據(jù)庫服務端在接收到客戶端發(fā)送的登錄請求前需要啟動 socket 監(jiān)聽。
[0039] 本發(fā)明采用socket與Infiniband網絡的RDM相結合的通信模式,將RDM嵌入 到內存數(shù)據(jù)庫系統(tǒng)中,通過socket實現(xiàn)應用程序(客戶端)和內存數(shù)據(jù)庫(服務端)的連 接建立及連接狀態(tài)的監(jiān)控;通過RDM機制實現(xiàn)客戶端發(fā)送SQL請求并接收執(zhí)行結果。
[0040] 由于對內存數(shù)據(jù)庫的訪問一般采用長連接方式(連接建立后不斷開,多次執(zhí)行 SQL請求),對于連接的建立,無效率要求,可以采用socket方式來保證連接可靠性,編程簡 單;對于SQL執(zhí)行,采用RDM方式,可以充分發(fā)揮Inf iniband網絡低時延的優(yōu)勢,大幅提高 內存數(shù)據(jù)庫SQL執(zhí)行的效率。
【附圖說明】
[0041] 圖1為本發(fā)明實施例所述的一種內存數(shù)據(jù)庫通信方法流程圖;
[0042] 圖2為本發(fā)明實施例所述的一種內存數(shù)據(jù)庫通信系統(tǒng)結構框圖。
[0043] 附圖中,各標號所代表的部件列表如下:
[0044] 1、socket連接模塊,2、鑒權模塊,3、RDM連接模塊,4、檢測模塊,5、請求判斷模 塊,41、時間檢測模塊,42、連接判斷模塊。
【具體實施方式】
[0045] 以下結合附圖對本發(fā)明的原理和特征進行描述,所舉實例只用于解釋本發(fā)明,并 非用于限定本發(fā)明的范圍。
[0046] 如圖1所示,為本發(fā)明實施例所述的一種內存數(shù)據(jù)庫通信方法,具體包括以下步 驟:
[0047] 步驟1 :客戶端發(fā)送登錄請求到內存數(shù)據(jù)庫服務端,與內存數(shù)據(jù)庫服務端建立 socket 連接;
[0048] 步驟2 :內存數(shù)據(jù)庫服務端收到登錄請求和客戶端發(fā)送的客戶端lid,并進行鑒 權,判斷是否通過鑒定,如果是,執(zhí)行步驟3 ;否則,關閉socket連接,結束;
[0049] 步驟3 :將本地Iid發(fā)送到客戶端,客戶端與內存數(shù)據(jù)庫服務端根據(jù)客戶端Iid和 本地Iid建立RDMA連接;
[0050] 步驟4 :通過poll檢測預設時間內是否接收到客戶端的SQL請求,如果是,執(zhí)行步 驟6;否則,執(zhí)行步驟5;
[0051] 步驟5 :判斷socket連接是否正常,如果是,執(zhí)行步驟4 ;否則,關閉socket連接, 終止數(shù)據(jù)庫服務,結束;
[0052] 步驟6 :處理SQL請求,將處理結果反饋到客戶端;
[0053] 步驟7:判斷客戶端是否發(fā)出下一個SQL請求,如果是,執(zhí)行步驟4;否則,關閉 socket連接,結束。
[0054] 所述步驟1中客戶端與內存數(shù)據(jù)庫服務端通過以太網建立socket連接。
[0055] 所述步驟3中客戶端與內存數(shù)據(jù)庫服務端根據(jù)客戶端Iid和本地Iid建立基于 Infiniband 的 RDMA 機制的 RDMA 連接。
[0056] 所述客戶端在發(fā)送SQL請求和接收執(zhí)行結果的過程中與內存數(shù)據(jù)庫服務端保持 長連接,可多次發(fā)送SQL請求和接收處理結果。
[0057] 所述內存數(shù)據(jù)庫服務端在接收到客戶端發(fā)送的登錄請求前需要啟動socket監(jiān) 聽。
[0058] 如圖2所示,為本發(fā)