數據庫連接的控制方法和裝置的制造方法
【專利摘要】本申請公開了一種數據庫連接的控制方法和裝置。所述方法的一【具體實施方式】包括:接收終端發送的對數據庫的訪問請求;判斷數據庫連接池中是否存在用于所述數據庫的空閑的數據庫連接;響應于所述數據庫連接池中存在用于所述數據庫的空閑的數據庫連接,選擇空閑的數據庫連接進行復用,以便利用復用的數據庫連接來連接所述終端和所述數據庫;響應于所述數據庫連接池中不存在用于所述數據庫的空閑的數據庫連接,建立新的數據庫連接,以便利用所述新的數據庫連接來連接所述終端和所述數據庫。該實施方式高效地利用了較少的數據庫連接來支撐數據庫訪問請求。
【專利說明】
數據庫連接的控制方法和裝置
技術領域
[0001]本申請涉及計算機技術領域,尤其涉及數據庫應用開發領域,具體涉及一種數據庫連接的控制方法和裝置。
【背景技術】
[0002]隨著互聯網數據的爆炸性增長,數據庫作為互聯網數據的存儲介質,承擔了越來越多的數據以及終端對數據的訪問。數據庫連接是終端和數據庫的交互通道,現有的數據庫連接的控制方法中,通常將數據庫連接和服務器的工作線程綁定,使得數據庫花費大量的成本來維護綁定的數據庫連接,從而導致數據庫的吞吐量下降。
[0003]因此,如何利用較少的數據庫連接高效穩定地支撐大量的數據庫訪問請求成為待解決的技術問題。
【發明內容】
[0004]本申請的目的在于提出一種數據庫連接的控制方法和裝置,來解決以上【背景技術】部分提到的技術問題。
[0005]第一方面,本申請提供了一種數據庫連接的控制方法,所述方法包括:接收終端發送的對數據庫的訪問請求;判斷數據庫連接池中是否存在用于所述數據庫的空閑的數據庫連接;響應于所述數據庫連接池中存在用于所述數據庫的空閑的數據庫連接,選擇空閑的數據庫連接進行復用,以便利用復用的數據庫連接來連接所述終端和所述數據庫;響應于所述數據庫連接池中不存在用于所述數據庫的空閑的數據庫連接,建立新的數據庫連接,以便利用所述新的數據庫連接來連接所述終端和所述數據庫。
[0006]在一些實施例中,所述響應于所述數據庫連接池中存在用于所述數據庫的空閑的數據庫連接,選擇空閑的數據庫連接進行復用,以便利用復用的數據庫連接來連接所述終端和所述數據庫,包括:將所述終端和所述復用的數據庫連接之間的連接屬性與所述復用的數據庫連接和所述數據庫之間的連接屬性進行比較,確定二者的差異部分;向所述數據庫發送包括所述差異部分的屬性修改請求,以供所述數據庫修改所述復用的數據庫連接和所述數據庫之間的連接屬性。
[0007]在一些實施例中,所述響應于所述數據庫連接池中不存在用于所述數據庫的空閑的數據庫連接,建立新的數據庫連接,以便利用新的數據庫連接來連接所述終端和所述數據庫,包括:向所述數據庫發送建立連接請求;將正在建立連接過程中的數據庫連接加入預設的數組中;在接收到所述數據庫返回的應答消息時,從所述預設的數組中查找所述應答消息對應的數據庫連接;利用所述應答消息對應的數據庫連接來連接所述終端和所述數據庫。
[0008]在一些實施例中,所述方法還包括:根據預設的數據庫連接控制規則,控制用于所述數據庫的數據庫連接的數量。
[0009]在一些實施例中,所述根據預設的數據庫連接控制規則,控制用于所述數據庫的數據庫連接的數量,包括:當接收的訪問請求的數量小于或等于第一預設值時,復用空閑的數據庫連接以及釋放超時的數據庫連接;當接收的訪問請求的數量大于所述第一預設值且小于或等于第二預設值且用于所述數據庫的非空閑的數據庫連接的數量大于預設的數據庫連接池的最大連接數量時,復用空閑的數據庫連接以及釋放空閑的數據庫連接;當接收的訪問請求的數量大于所述第二預設值時,建立新的數據庫連接、復用空閑的數據庫連接以及釋放空閑的數據庫連接。
[0010]在一些實施例中,所述響應于所述數據庫連接池中不存在用于所述數據庫的空閑的數據庫連接,建立新的數據庫連接,以便利用新的數據庫連接來連接所述終端和所述數據庫,包括:響應于所述數據庫連接池中不存在用于所述數據庫的空閑的數據庫連接,在所述數據庫的各從數據庫中選取一個作為目標數據庫;建立新的到所述目標數據庫的數據庫連接。
[0011]在一些實施例中,所述在所述數據庫的各從數據庫中選取一個作為目標數據庫,包括:對于每個從數據庫,確定該從數據庫的非空閑的數據庫連接的數量與該從數據庫的權重的比值;將所述比值的最小值對應的從數據庫作為目標數據庫。
[0012]在一些實施例中,所述在所述數據庫的各從數據庫中選取一個作為目標數據庫,包括:利用隨機算法,在所述數據庫的各從數據庫中選取一個作為目標數據庫。
[0013]在一些實施例中,所述方法還包括:檢測各從數據庫是否發生故障;屏蔽發生故障的從數據庫;間隔預設時間探查所述發生故障的從數據庫;解除屏蔽故障解除的從數據庫。
[0014]第二方面,本申請提供一種數據庫連接的控制裝置,所述裝置包括:接收單元,用于接收終端發送的對數據庫的訪問請求;判斷單元,用于判斷數據庫連接池中是否存在用于所述數據庫的空閑的數據庫連接;復用單元,用于響應于所述數據庫連接池中存在用于所述數據庫的空閑的數據庫連接,選擇空閑的數據庫連接進行復用,以便利用復用的數據庫連接來連接所述終端和所述數據庫;建連單元,用于響應于所述數據庫連接池中不存在用于所述數據庫的空閑的數據庫連接,建立新的數據庫連接,以便利用所述新的數據庫連接來連接所述終端和所述數據庫。
[0015]在一些實施例中,所述復用單元包括:屬性比較模塊,用于將所述終端和所述復用的數據庫連接之間的連接屬性與所述復用的數據庫連接和所述數據庫之間的連接屬性進行比較,確定二者的差異部分;屬性修改模塊,用于向所述數據庫發送包括所述差異部分的屬性修改請求,以供所述數據庫修改所述復用的數據庫連接和所述數據庫之間的連接屬性。
[0016]在一些實施例中,所述建連單元包括:發送模塊,用于向所述數據庫發送建立連接請求;加入模塊,用于將正在建立連接過程中的數據庫連接加入預設的數組中;查找模塊,用于在接收到所述數據庫返回的應答消息時,從所述預設的數組中查找所述應答消息對應的數據庫連接;連接模塊,用于利用所述應答消息對應的數據庫連接來連接所述終端和所述數據庫。
[0017]在一些實施例中,所述裝置還包括:控制單元,用于根據預設的數據庫連接控制規則,控制用于所述數據庫的數據庫連接的數量。
[0018]在一些實施例中,所述控制單元包括:第一控制模塊,用于當接收的訪問請求的數量小于或等于第一預設值時,復用空閑的數據庫連接以及釋放超時的數據庫連接;第二控制模塊,用于當接收的訪問請求的數量大于所述第一預設值且小于或等于第二預設值且用于所述數據庫的非空閑的數據庫連接的數量大于預設的數據庫連接池的最大連接數量時,復用空閑的數據庫連接以及釋放空閑的數據庫連接;第三控制模塊,用于當接收的訪問請求的數量大于所述第二預設值時,建立新的數據庫連接、復用空閑的數據庫連接以及釋放空閑的數據庫連接。
[0019]在一些實施例中,所述建連單元包括:選取模塊,用于響應于所述數據庫連接池中不存在用于所述數據庫的空閑的數據庫連接,在所述數據庫的各從數據庫中選取一個作為目標數據庫;建連模塊,用于建立新的到所述目標數據庫的數據庫連接。
[0020]在一些實施例中,所述選取模塊進一步用于:對于每個從數據庫,確定該從數據庫的非空閑的數據庫連接的數量與該從數據庫的權重的比值;將所述比值的最小值對應的從數據庫作為目標數據庫。
[0021]在一些實施例中,所述選取模塊進一步用于:利用隨機算法,在所述數據庫的各從數據庫中選取一個作為目標數據庫。
[0022]在一些實施例中,所述裝置還包括:故障檢測單元,用于檢測各從數據庫是否發生故障;屏蔽單元,用于屏蔽發生故障的從數據庫;探查單元,用于間隔預設時間探查所述發生故障的從數據庫;解除屏蔽單元,用于解除屏蔽故障解除的從數據庫。
[0023]本申請提供的數據庫連接的控制方法和裝置,在接收到終端發送的對數據庫的訪問請求后,首先判斷數據庫連接池中是否存在空閑的數據庫連接,在存在空閑的數據庫連接時,則復用空閑的連接,在不存在空閑的數據庫連接時,向數據庫發送建立連接請求,建立數據庫連接,實現了高效地利用了較少的數據庫連接來支撐數據庫訪問請求。
【附圖說明】
[0024]通過閱讀參照以下附圖所作的對非限制性實施例所作的詳細描述,本申請的其它特征、目的和優點將會變得更明顯:
[0025]圖1是本申請可以應用于其中的示例性系統架構圖;
[0026]圖2是根據本申請的數據庫連接的控制方法的一個實施例的流程圖;
[0027]圖3是根據本申請的數據庫連接的控制方法的又一個實施例的流程圖;
[0028]圖4是根據本申請的數據庫連接的控制方法的數據庫連接控制規則的工作示意圖;
[0029]圖5是根據本申請的數據庫連接的控制裝置的一個實施例的結構示意圖;
[0030]圖6是適于用來實現本申請實施例的服務器的計算機系統的結構示意圖。
【具體實施方式】
[0031]下面結合附圖和實施例對本申請作進一步的詳細說明。可以理解的是,此處所描述的具體實施例僅僅用于解釋相關發明,而非對該發明的限定。另外還需要說明的是,為了便于描述,附圖中僅示出了與有關發明相關的部分。
[0032]需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互組合。下面將參考附圖并結合實施例來詳細說明本申請。
[0033]圖1示出了可以應用本申請的數據庫連接的控制方法或數據庫連接的控制裝置的實施例的示例性系統架構100。
[0034]如圖1所示,系統架構100可以包括終端設備101、102、103,網絡104,服務器105以及數據庫106、107。網絡104用以在終端設備101、102、103和服務器105之間以及服務器105和數據庫106、107之間提供通信鏈路的介質。網絡104可以包括各種連接類型,例如有線、無線通信鏈路或者光纖電纜等等。
[0035]終端設備101、102、103上的應用軟件可以通過網絡104與服務器105交互,同樣,月艮務器105可以通過網絡104與第一數據庫106、第二數據庫107交互,以接收或發送消息等。終端設備101、102、103上可以安裝有各種需要訪問數據庫的應用,例如網頁瀏覽器應用、購物類應用、搜索類應用、即時通信工具、郵箱客戶端、社交平臺軟件等。
[0036]終端設備101、102、103可以是具有顯示屏的各種電子設備,包括但不限于智能手機、平板電腦、電子書閱讀器、膝上型便攜計算機和臺式計算機等等。
[0037]服務器105可以是提供各種服務的服務器,例如對終端設備101、102、103上安裝的應用程序訪問數據庫提供支持的數據庫連接服務器。數據庫連接服務器可以包括數據庫連接池,并對數據庫連接池中的數據庫連接進行維護和管理,其還可以對接收到的數據庫訪問請求等數據進行分析等處理,也可以根據接收到的數據庫訪問請求以及數據庫連接的數量,向數據庫發送請求。并接收從數據庫返回的消息,將終端設備的數據庫訪問請求對應的處理結果(例如連接數據庫成功)反饋給終端設備。
[0038]數據庫106、107可以是存儲各種類型的數據的數據庫,例如存儲有終端設備101、102、103上安裝的應用程序所需的數據,通過數據庫連接與終端設備101、102、103連接后,允許上述終端設備訪問數據庫。數據庫106、107可以接收服務器105發送的請求,并對上述請求進行分析等處理,并將處理結果返回給服務器。
[0039]需要說明的是,本申請實施例所提供的數據庫連接的控制方法一般由服務器105執行,相應地,數據庫連接的控制裝置一般設置于服務器105中。
[0040]應該理解,圖1中的終端設備、網絡、服務器和數據庫的數目僅僅是示意性的。根據實現需要,可以具有任意數目的終端設備、網絡、服務器和數據庫。
[0041]繼續參考圖2,示出了根據本申請的數據庫連接的控制方法的一個應用場景的流程圖200。本實施例的數據庫連接的控制方法,包括以下步驟:
[0042]步驟201,接收終端發送的對數據庫的訪問請求。
[0043]本實施例中,數據庫連接的控制方法運行于其上的電子設備(例如圖1中所示的服務器)可以通過有線連接或者無線連接方式從應用程序安裝的終端(例如圖1中所示的終端設備)接收對數據庫的訪問請求。可以理解的是,上述對數據庫的訪問請求中,包含訪問的文件路徑。需要指出的是,上述無線連接方式可以包括但不限于3G/4G連接、WiFi連接、藍牙連接、WiMAX連接、Zigbee連接、UWB(ultra wideband)連接、以及其他現在已知或將來開發的無線連接方式。
[0044]步驟202,判斷數據庫連接池中是否存在用于上述數據庫的空閑的數據庫連接。
[0045]本實施例中,基于接收到的終端發送的對數據庫的訪問請求,上述電子設備(如圖1所示的服務器)首先判斷數據庫連接池中是否存在用于上述數據庫的空閑的數據庫連接。其中,數據庫連接池是負責分配、管理和釋放數據庫連接的結構,它允許終端上安裝的應用程序重復使用一個現有的數據庫連接,而不是再重新建立一個。當一個數據庫連接未連接終端設備時,可以認為此數據庫連接是空閑的。
[0046]步驟203,響應于上述數據庫連接池中存在用于上述數據庫的空閑的數據庫連接,選擇空閑的數據庫連接進行復用,以便利用復用的數據庫連接來連接終端和上述數據庫。
[0047]當上述數據庫連接池中存在上述終端訪問的數據庫的空閑的數據庫連接時,選擇空閑的數據庫連接進行復用。本實施例中,終端上的應用程序通過數據庫連接訪問或者使用數據庫結束后,被使用的數據庫連接會被釋放。復用數據庫連接可以理解為重新利用被釋放的數據庫連接,以連接終端和上述數據庫,從而使得終端上的應用程序通過上述數據庫連接訪問或者使用數據庫。
[0048]步驟204,響應于上述數據庫連接池中不存在用于上述數據庫的空閑的數據庫連接,建立新的數據庫連接,以便利用新的數據庫連接來連接終端和上述數據庫。
[0049]當上述數據庫連接池中不存在上述終端訪問的數據庫的空閑的數據庫連接時,需要建立新的數據庫連接,連接終端和上述數據庫。
[0050]在本實施例的一些可選的實現方式中,上述步驟204可以包括圖2中未示出的以下子步驟:
[0051]響應于數據庫連接池中不存在用于上述數據庫的空閑的數據庫連接,在上述數據庫的各從數據庫中選取一個作為目標數據庫;建立新的到所述目標數據庫的數據庫連接。
[0052]數據庫連接池中不存在用于上述數據庫的空閑的數據庫連接時,需要向數據庫發送建立連接請求。但在實踐中,由于數據庫的吞吐量巨大,客戶端會與多個從數據庫進行訪問請求的交互,這樣可能造成不同的從數據庫負載不同的情況。
[0053]為了保證各從數據庫之間的負載均衡,需要從上述數據庫的各從數據庫中選取一個作為目標數據庫,并建立新的到選取的目標數據庫的數據庫連接。這樣可以避免某個從數據庫的負載過高,而其它從數據庫負載過少的現象。
[0054]在本實施例的一些可選的實現方式中,上述子步驟還可以包括圖2中未示出的以下步驟:
[0055]對于每個從數據庫,確定該從數據庫的權重與該從數據庫的非空閑的數據庫連接的數量的比值;將比值的最小值對應的從數據庫作為目標數據庫。
[0056]由于不同的從數據庫的硬件、網絡連接狀況都可能不完全一樣,造成不同從數據庫的穩定性不同。通過為每個從數據庫設置權重來體現各從數據庫的穩定性。可以理解的是,不同的從數據庫的非空閑的數據庫連接的數量也不同,此處,非空閑的數據庫連接是指正在連接終端和從數據庫的數據庫連接。
[0057]確定每個從數據庫的非空閑的數據庫連接的數量和其權重的比值,可以幫助選擇性能較好的從數據庫。舉例來說,兩個從數據庫的權重相同時,第一個從數據庫的非空閑的數據庫連接的數量小于第二個從數據庫的非空閑的數據庫連接的數量,這種情況下,第一個從數據庫是較優的選擇。因此,選擇比值的最小值對應的從數據庫為目標數據庫。
[0058]可以理解的是,本實施例的上述實現方式,尤其適用于系統結構中只有一個服務器的情況。
[0059]在本實施例的一些可選的實現方式中,上述子步驟還可以包括圖2中未示出的以下步驟:
[0060]利用隨機算法,在上述數據庫的各從數據庫中選取一個作為目標數據庫。
[0061]本實施例中,隨機算法可以是算法本身包含了隨機數生成器的算法。本實施例的實現方式,尤其適用于系統結構中存在多個服務器的情況。可以理解的是,本實施例的上述實現方式尤其適用于系統結構中每個服務器在每次啟動時采用。由于各服務器的配置文件一致,且各服務器通過環回的方式遍歷從數據庫時,由于各服務器環回遍歷的起點從數據庫相同,容易導致各服務器選擇的從數據庫相同,從而導致某個從數據庫的負載明顯高于其它從數據庫。在服務器啟動時采用隨機算法選取起點從數據庫,在后續接收到終端設備的數據庫訪問請求時,也可以根據每個從數據庫的非空閑數據庫的數量與該從數據庫的權重來選擇目標數據庫。
[0062]本實施例中,通過隨機算法使得各服務器隨機選擇不同的起點從數據庫,從而避免了某個從數據庫的負載明顯高于其它從數據庫的現象,實現了從數據庫的負載均衡。
[0063]在本實施例的一些可選的實現方式中,上述方法還包括圖2中未示出的以下步驟:檢測各從數據庫是否發生故障;屏蔽發生故障的從數據庫;間隔預設時間探查所述發生故障的從數據庫;解除屏蔽故障解除的從數據庫。
[0064]當由于網絡原因或者其它可能的原因導致某個從數據庫發生故障,無法提供正常服務時,服務器會通過臨時隔離手段屏蔽上述發生故障的從數據庫。在實踐中,臨時隔離手段可以是設置一個正常工作的數據庫列表,當檢測到某個從數據庫不發生故障時,則將發生故障的從數據庫從列表中刪除,則向數據庫發送建立連接請求時,不會發送至發生故障的從數據庫中。
[0065]本實施例中,還對上述發生故障的從數據庫進行定時探查,判斷上述發生故障的從數據庫是否恢復正常,能夠提供正常的服務。當故障解除后,對上述從數據庫解除屏蔽。在實踐中,當從數據庫恢復正常后,可再將上述從數據庫重新加入正常工作的數據庫列表中。
[0066]本申請的上述實施例提供的數據庫連接的控制方法,在接收到終端發送的對數據庫的訪問請求后,首先判斷數據庫連接池中是否存在空閑的數據庫連接,在存在空閑的數據庫連接時,則復用空閑的連接,在不存在空閑的數據庫連接時,向數據庫發送建立連接請求,建立數據庫連接,實現了高效地利用了較少的數據庫連接來支撐數據庫訪問請求。
[0067]繼續參考圖3,示出了根據本申請的數據庫連接的控制方法的又一個實施例的流程圖300。本實施例的數據庫連接的控制方法包括以下步驟:
[0068]步驟301,接收終端發送的對數據庫的訪問請求。
[0069]本實施例中,終端可以是圖1所示的終端設備101、102、103,數據庫可以是圖1所示的數據庫106、107。終端上安裝的應用程序在需要訪問數據庫時,通過終端向服務器發送對數據庫的訪問請求。
[0070]步驟302,判斷數據庫連接池中是否存在用于上述數據庫的空閑的數據庫連接。
[0071]為了充分高效地利用現有的數據庫連接,首先要判斷連接池中是否存在空閑的數據庫連接,存在空閑的數據庫連接時,對上述空閑的數據庫連接進行復用,即執行步驟303;在不存在空閑的數據庫連接時,再建立新的數據庫連接,即執行步驟304。
[0072]步驟303,響應于上述數據庫連接池中存在用于上述數據庫的空閑的數據庫連接,選擇空閑的數據庫連接進行復用,以便利用復用的數據庫連接來連接終端和上述數據庫。
[0073]上述步驟303具體包括子步驟3031和子步驟3032。
[0074]子步驟3031,將終端和復用的數據庫連接之間的連接屬性與復用的數據庫連接和數據庫之間的連接屬性進行比較,確定二者的差異部分。
[0075]子步驟3032,向上述數據庫發送包括差異部分的屬性修改請求,以供上述數據庫修改復用的數據庫連接和上述數據庫之間的連接屬性。
[0076]由于不同的終端上安裝的應用程序本身具備不同的屬性,這導致不同的終端和數據庫連接之間的連接屬性不同。同理,不同的數據庫連接和數據庫之間的連接屬性也不相同。但是終端通過數據庫連接與上述數據庫連接時,要求終端和數據庫連接之間的連接屬性與不同的數據庫連接和數據庫之間的連接屬性保持一致。否則只能將終端和數據庫連接之間的連接與不同的數據庫連接和數據庫之間的連接綁定,這種綁定造成數據庫連接的復用率極低。
[0077]本實施例中,通過比較終端和數據庫連接之間的連接屬性與不同的數據庫連接和數據庫之間的連接屬性之間的差異部分,并將上述差異部分包裝在屬性修改請求中發送給數據庫,數據庫在接收到上述屬性修改請求后,會修改數據庫連接和數據庫之間的連接屬性,從而使得終端和數據庫連接之間的連接屬性與不同的數據庫連接和數據庫之間的連接屬性保持一致。
[0078]通過這種比較連接屬性間的差異部分,并對數據庫連接和數據庫之間的連接屬性的差異部分進行修改,可以有效地提高數據庫連接的復用率,從而減少了維護數據庫連接的成本。
[0079]步驟304,響應于所述數據庫連接池中不存在用于所述數據庫的空閑的數據庫連接,建立新的數據庫連接,以便利用所述新的數據庫連接來連接所述終端和所述數據庫。
[0080]上述步驟304具體包括以下子步驟:
[0081 ]子步驟3041,向所述數據庫發送建立連接請求。
[0082]要建立新的數據庫連接,首先向數據庫發送建立連接請求,以使得數據庫在接收到上述建立連接請求后,建立一個新的數據庫連接。
[0083]子步驟3042,將正在建立連接過程中的數據庫連接加入預設的數組中。
[0084]本實施例中,正在建立連接過程中的數據庫連接可以理解為已經向數據庫發送了建立連接請求,但未連接到數據庫的數據庫連接。在實踐中,預設的數組可以是特定的hash桶,其中,hash桶是哈希表內元素的虛擬子群組,可以讓大部分集合中的搜尋和獲取工作更容易、更快速。
[0085]子步驟3043,在接收到上述數據庫返回的應答消息時,從預設的數組中查找應答消息對應的數據庫連接。
[0086]本實施例中,將正在建立在建立連接過程中的數據庫連接加入預設的數組后,接收到數據庫返回的應答消息時,再去處理應答消息對應的數據庫連接。這樣,服務器可以并行處理其他業務邏輯,不會因為要等待數據庫的應答而不能進行其他的操作,即采用異步方式建立新的數據庫連接。
[0087]子步驟3044,利用所述應答消息對應的數據庫連接來連接終端和數據庫。
[0088]可以理解的是,上述應答消息是數據庫連接建立成功的消息。在數據庫連接建立成功后,連接終端和數據庫。
[0089]由于現有的建立數據庫連接采用同步方式,正常情況下,服務器在向數據庫發送建立連接請求后,會阻塞等待一個RTT(Round-Trip Time,往返延遲)的時間。如果出現網絡異常情況或者要訪問的數據庫達到性能瓶頸時,會阻塞等待一個超時時間(1ms級別)。再加上失敗重連的耗時,客戶端的阻塞等待時間有可能達到10ms級別,會極大的影響服務器的吞吐。
[0090]本實施例中,通過采用異步的方式建立新的數據庫連接,使得服務器可以同步處理其他的業務操作,實現提高服務器吞吐的效果。
[0091]步驟305,根據預設的數據庫連接控制規則,控制用于上述數據庫的數據庫連接的數量。
[0092]由于終端中安裝的應用程序對數據庫的訪問或使用存在高峰期和低谷期。在高峰期時,需要通過大量的數據庫連接來支撐訪問或使用;在低谷期,可以用盡量少的數據庫連接支撐訪問或使用。因此,對數據庫的數據庫連接的數量進行控制,能夠有效地減少維護數據庫連接的成本,充分利用現有的數據庫連接。
[0093]在本實施例的一些可選的實現方式中,步驟305具體包括圖3中未示出的以下子步驟:
[0094]子步驟一,當接收的訪問請求的數量小于或等于第一預設值時,復用空閑的數據庫連接以及釋放超時的數據庫連接。
[0095]本實施例中,第一預設值是根據數據庫連接池中的數據庫連接進行設定的一個值。當接收的訪問請求的數量小于或等于第一預設值時,可以認為處于低谷期,采用復用空閑的數據庫連接以及釋放超時的數據庫連接的方式來控制數據庫連接的數量。
[0096]其中,釋放超時的數據庫連接可以理解為:數據庫連接池之外的數據庫連接處于空閑狀態,且其存在時間超過預設的一個時間值,為了減少維護數據庫連接的成本,將這種數據庫連接釋放掉。
[0097]子步驟二,當接收的訪問請求的數量大于所述第一預設值且小于或等于第二預設值且用于所述數據庫的非空閑的數據庫連接的數量大于預設的數據庫連接池的最大連接數量時,復用空閑的數據庫連接以及釋放空閑的數據庫連接。
[0098]本實施例中,數據庫連接池的最大連接數量是根據數據庫的硬件及網絡情況預設的一個值。
[0099]當接收的訪問請求的數量大于所述第一預設值且小于或等于第二預設值時,可以認為此時的訪問數據庫數量處于高峰期和低谷期之間,此時采用復用空閑的數據庫連接的方式來控制數據庫連接的數量。
[0100]當接收的訪問請求的數量大于所述第一預設值且小于或等于第二預設值且用于所述數據庫的非空閑的數據庫連接的數量大于預設的數據庫連接池的最大連接數量時,可以認為此時的訪問數據庫數量處于高峰期過后的回落期,此時采用復用空閑的數據庫連接以及釋放空閑的數據庫連接的方式來控制數據庫連接的數量。此處,釋放空閑的數據庫連接是指將超出數據庫連接池的最大連接數量部分的數據庫連接及時釋放,防止由于維護已建立的數據庫連接,造成服務器的吞吐下降。
[0101]子步驟三,當接收的訪問請求的數量大于所述第二預設值時,建立新的數據庫連接、復用空閑的數據庫連接以及釋放空閑的數據庫連接。
[0102]本實施例中,當接收的訪問請求的數量大于所述第二預設值時,可以認為此時的訪問數據庫數量處于高峰期,采用建立新的數據庫連接、復用空閑的數據庫連接以及釋放空閑的數據庫連接的方式來控制數據庫連接的數量。因為處于高峰期,所以要建立新的數據庫連接來滿足訪問請求的要求。同時要及時釋放空閑的數據庫連接,避免由于維護空閑的數據庫連接,造成數據庫處理其他業務的能力下降。采用本實施例的方式,可以動態的維持數據庫連接的數量在比較高的位置。
[0103]圖4示出了本實施例的上述實現方式中的預設的數據庫連接控制規則的具體工作示意圖400。其中,401為復用空閑的數據庫連接,402為釋放超時的數據庫連接,403為釋放空閑的數據庫連接,404為建立新的數據庫連接。
[0104]在本實施例中,第一預設值可以小于數據庫連接池的最大連接數量,第二預設值可以大于數據庫連接池的最大連接數量,并且小于數據庫連接數量的最大值。其中,數據庫連接數量的最大值是由數據庫的硬件和網絡等情況來確定的,表示數據庫能夠支撐的數據庫連接數量的最大值。當對數據庫的訪問請求數量小于第一預設值時,為低谷期;當對數據庫的訪問請求數量大于或等于第一預設值且小于第二預設值時,為低谷期與高峰期之間的過渡期;當對數據庫的訪問請求數量大于或等于第二預設值時,為高峰期。
[0105]在低谷期,采用401和402控制數據庫連接的數量;在過渡期,采用401和403控制數據庫連接的數量;在高峰期,采用401、403和404控制數據庫連接的數量。
[0106]本申請的上述實施例提供的數據庫連接的控制方法,通過對數據庫連接和終端之間的連接屬性以及數據庫連接與數據庫之間的連接屬性進行比較,并向數據庫發送包含二者差異部分的屬性修改請求,使得數據庫修改數據庫連接與數據庫之間的連接屬性,有效地提高了數據庫連接的復用效率;通過異步的方式建立數據庫連接,有效地避免了服務器在建立數據庫連接過程堵塞的現象,提高了數據庫的吞吐;通過對數據庫連接數量的有效控制,有效地降低了數據庫維護數據庫連接的成本,提高了穩定性,實現了高效地支撐終端的海量訪問請求。
[0107]繼續參考圖5,示出了根據本申請的數據庫連接的控制裝置的結構示意圖500。本實施例的數據庫連接的控制裝置包括:接收單元501、判斷單元502、復用單元503和建連單元504。
[0108]其中,接收單元501,用于接收終端發送的對數據庫的訪問請求;判斷單元502,用于判斷數據庫連接池中是否存在用于上述數據庫的空閑的數據庫連接;復用單元503,用于響應于數據庫連接池中存在用于上述數據庫的空閑的數據庫連接,選擇空閑的數據庫連接進行復用,以便利用復用的數據庫連接來連接終端和上述數據庫;建連單元504,用于響應于數據庫連接池中不存在用于上述數據庫的空閑的數據庫連接,建立新的數據庫連接,以便利用新的數據庫連接來連接終端和上述數據庫。
[0109]本實施例中,接收單元501用于接收終端發送的對數據庫的訪問請求。判斷單元502判斷數據庫連接池中是否還存在空閑的數據庫連接,如果存在,就調用復用單元503復用空閑的數據庫連接;如果不存在,則調用建連單元504建立一個新的數據庫連接。
[0110]在本實施例的一個可選的實現方式中,上述復用單元503包括圖5中未示出的屬性比較模塊和屬性修改模塊。
[0111]其中,屬性比較模塊,用于將終端和復用的數據庫連接之間的連接屬性與復用的數據庫連接和數據庫之間的連接屬性進行比較,確定二者的差異部分;屬性修改模塊,用于向數據庫發送包括差異部分的屬性修改請求,以供數據庫修改復用的數據庫連接和數據庫之間的連接屬性。
[0112]本實施例中,屬性比較模塊,用于比較終端和復用的數據庫連接之間的連接屬性與復用的數據庫連接和數據庫之間的連接屬性,確定二者之間的差異部分,并將上述差異部分發送給屬性修改模塊,屬性修改模塊將上述差異部分打包在屬性修改請求內發送給上述數據庫,數據庫根據上述差異部分,修改復用的數據庫連接和數據庫之間的連接屬性。這樣,快速地實現了終端與數據庫之間的連接。
[0113]在本實施例的一個可選的實現方式中,建連單元504包括圖5中未示出的以下模塊:發送模塊、加入模塊、查找模塊和連接模塊。
[0114]其中,發送模塊,用于向上述數據庫發送建立連接請求;加入模塊,用于將正在建立連接過程中的數據庫連接加入預設的數組中;查找模塊,用于在接收到上述數據庫返回的應答消息時,從預設的數組中查找應答消息對應的數據庫連接;連接模塊,用于利用應答消息對應的數據庫連接來連接終端和上述數據庫。
[0115]本實施例中,在建立新的數據庫連接時,首先通過發送模塊向數據庫發送建立連接請求,隨后加入模塊將正在建立連接過程中的數據庫連接加入預設的數組中,查找模塊在接收到數據庫返回的應答消息時,從預設的數組中查找對應的數據庫連接,連接模塊利用此數據庫連接來連接終端和上述數據庫。上述異步的建立連接方式,避免了傳統的同步建立連接方式造成的服務器堵塞現象。
[0116]在本實施例的一些可選的實現方式中,上述裝置還包括圖5中未示出的控制單元,用于根據預設的數據庫連接控制規則,控制用于數據庫的數據庫連接的數量。
[0117]對數據庫的數據庫連接的數量進行規律的控制,可以有效地減少數據庫用于維護數據庫連接的成本。
[0118]在本實施例的一些可選的實現方式中,控制單元還包括以下控制模塊:第一控制模塊、第二控制模塊以及第三控制模塊。
[0119]其中,第一控制模塊,用于當接收的訪問請求的數量小于或等于第一預設值時,復用空閑的數據庫連接以及釋放超時的數據庫連接;第二控制模塊,用于當接收的訪問請求的數量大于所述第一預設值且小于或等于第二預設值且用于所述數據庫的非空閑的數據庫連接的數量大于預設的數據庫連接池的最大連接數量時,復用空閑的數據庫連接以及釋放空閑的數據庫連接;第三控制模塊,用于當接收的訪問請求的數量大于所述第二預設值時,建立新的數據庫連接、復用空閑的數據庫連接以及釋放空閑的數據庫連接。
[0120]根據接收的對數據庫的訪問請求數量,分為低谷期、高峰期以及位于低谷期和高峰期之間的過渡期,對三個時期采用不同的數據庫連接管理方式對數據庫連接的數量進行管理,有效地控制了數據庫用于維護數據庫連接的成本,提高了數據庫運行的穩定性。
[0121]在本實施例的一些可選的實現方式中,上述建連單元504還包括圖5中未示出的選取模塊和建連模塊。
[0122]其中,選取模塊,用于響應于數據庫連接池中不存在用于上述數據庫的空閑的數據庫連接,在所述數據庫的各從數據庫中選取一個作為目標數據庫;建連模塊,用于建立新的到目標數據庫的數據庫連接。
[0123]由于在實踐中,考慮到數據庫的高吞吐量,客戶端會與多個從數據庫進行交互。因此,選取模塊在多個從數據庫中選擇一個作為目標數據庫,建連模塊建立到目標數據庫的數據庫連接。
[0124]在本實施例的一些可選的實現方式中,上述選取模塊進一步用于:對于每個從數據庫,確定該從數據庫的非空閑的數據庫連接的數量與該從數據庫的權重的比值;將比值的最小值對應的從數據庫作為目標數據庫。
[0125]選取模塊可以根據每個從數據庫的非空閑的數據庫連接的數量和該從數據庫的權重,來確定目標數據庫。本實施例中,選取模塊可以選擇非空閑的數據庫連接的數量與權重比值最小的從數據庫作為目標數據庫。
[0126]在本實施例的一些可選的實現方式中,上述選取模塊進一步用于:利用隨機算法,在所述數據庫的各從數據庫中選取一個作為目標數據庫。
[0127]本實施例中,隨機算法可以是算法本身包含了隨機數生成器的算法。本實施例的實現方式,尤其適用于系統結構中存在多個服務器的情況。
[0128]在本實施例的一些可選的實現方式中,上述裝置還包括圖5中未示出的以下部分:故障檢測單元、屏蔽單元、探查單元和解除屏蔽單元。
[0129]故障檢測單元,用于檢測各從數據庫是否發生故障;屏蔽單元,用于屏蔽發生故障的從數據庫;探查單元,用于間隔預設時間探查所述發生故障的從數據庫;解除屏蔽單元,用于解除屏蔽故障解除的從數據庫。
[0130]本實施例中,故障檢測單元能夠實時檢測出故障數據庫,并調用屏蔽單元對故障數據庫進行屏蔽,當探查單元探查到故障數據庫恢復正常時,調用解除屏蔽單元解除對故障數據庫的屏蔽。
[0131]本申請的上述實施例提供的數據庫連接的控制裝置,能夠高效地利用數據庫連接,來滿足海量的數據庫訪問請求。
[0132]下面參考圖6,其示出了適于用來實現本申請實施例的服務器的計算機系統600的結構示意圖。
[0133]如圖6所示,計算機系統600包括中央處理單元(CPU)601,其可以根據存儲在只讀存儲器(R0M)602中的程序或者從存儲部分608加載到隨機訪問存儲器(RAM)603中的程序而執行各種適當的動作和處理。在RAM 603中,還存儲有系統600操作所需的各種程序和數據。CPU 60KROM 602以及RAM 603通過總線604彼此相連。輸入/輸出(I/O)接口605也連接至總線 604。
[0134]以下部件連接至I/O接口605:包括鍵盤、鼠標等的輸入部分606 ;包括諸如陰極射線管(CRT)、液晶顯示器(LCD)等以及揚聲器等的輸出部分607;包括硬盤等的存儲部分608;以及包括諸如LAN卡、調制解調器等的網絡接口卡的通信部分609。通信部分609經由諸如因特網的網絡執行通信處理。驅動器610也根據需要連接至I/O接口 605。可拆卸介質611,諸如磁盤、光盤、磁光盤、半導體存儲器等等,根據需要安裝在驅動器610上,以便于從其上讀出的計算機程序根據需要被安裝入存儲部分608。
[0135]特別地,根據本公開的實施例,上文參考流程圖描述的過程可以被實現為計算機軟件程序。例如,本公開的實施例包括一種計算機程序產品,其包括有形地包含在機器可讀介質上的計算機程序,所述計算機程序包含用于執行流程圖所示的方法的程序代碼。在這樣的實施例中,該計算機程序可以通過通信部分609從網絡上被下載和安裝,和/或從可拆卸介質611被安裝。在該計算機程序被中央處理單元(CPU)601執行時,執行本申請的方法中限定的上述功能。
[0136]附圖中的流程圖和框圖,圖示了按照本申請各種實施例的系統、方法和計算機程序產品的可能實現的體系架構、功能和操作。在這點上,流程圖或框圖中的每個方框可以代表一個模塊、程序段、或代碼的一部分,所述模塊、程序段、或代碼的一部分包含一個或多個用于實現規定的邏輯功能的可執行指令。也應當注意,在有些作為替換的實現中,方框中所標注的功能也可以以不同于附圖中所標注的順序發生。例如,兩個接連地表示的方框實際上可以基本并行地執行,它們有時也可以按相反的順序執行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個方框、以及框圖和/或流程圖中的方框的組合,可以用執行規定的功能或操作的專用的基于硬件的系統來實現,或者可以用專用硬件與計算機指令的組合來實現。
[0137]描述于本申請實施例中所涉及到的單元可以通過軟件的方式實現,也可以通過硬件的方式來實現。所描述的單元也可以設置在處理器中,例如,可以描述為:一種處理器包括接收單元、判斷單元、復用單元和建連單元。其中,這些單元的名稱在某種情況下并不構成對該單元本身的限定,例如,接收單元還可以被描述為“接收終端發送的對數據庫的訪問請求的單元”。
[0138]作為另一方面,本申請還提供了一種非易失性計算機存儲介質,該非易失性計算機存儲介質可以是上述實施例中所述裝置中所包含的非易失性計算機存儲介質;也可以是單獨存在,未裝配入終端中的非易失性計算機存儲介質。上述非易失性計算機存儲介質存儲有一個或者多個程序,當所述一個或者多個程序被一個設備執行時,使得所述設備:接收終端發送的對數據庫的訪問請求;判斷數據庫連接池中是否存在用于所述數據庫的空閑的數據庫連接;響應于所述數據庫連接池中存在用于所述數據庫的空閑的數據庫連接,選擇空閑的數據庫連接進行復用,以便利用復用的數據庫連接來連接所述終端和所述數據庫;響應于所述數據庫連接池中不存在用于所述數據庫的空閑的數據庫連接,建立新的數據庫連接,以便利用所述新的數據庫連接來連接所述終端和所述數據庫。
[0139]以上描述僅為本申請的較佳實施例以及對所運用技術原理的說明。本領域技術人員應當理解,本申請中所涉及的發明范圍,并不限于上述技術特征的特定組合而成的技術方案,同時也應涵蓋在不脫離所述發明構思的情況下,由上述技術特征或其等同特征進行任意組合而形成的其它技術方案。例如上述特征與本申請中公開的(但不限于)具有類似功能的技術特征進行互相替換而形成的技術方案。
【主權項】
1.一種數據庫連接的控制方法,其特征在于,所述方法包括: 接收終端發送的對數據庫的訪問請求; 判斷數據庫連接池中是否存在用于所述數據庫的空閑的數據庫連接; 響應于所述數據庫連接池中存在用于所述數據庫的空閑的數據庫連接,選擇空閑的數據庫連接進行復用,以便利用復用的數據庫連接來連接所述終端和所述數據庫; 響應于所述數據庫連接池中不存在用于所述數據庫的空閑的數據庫連接,建立新的數據庫連接,以便利用所述新的數據庫連接來連接所述終端和所述數據庫。2.根據權利要求1所述的方法,其特征在于,所述響應于所述數據庫連接池中存在用于所述數據庫的空閑的數據庫連接,選擇空閑的數據庫連接進行復用,以便利用復用的數據庫連接來連接所述終端和所述數據庫,包括: 將所述終端和所述復用的數據庫連接之間的連接屬性與所述復用的數據庫連接和所述數據庫之間的連接屬性進行比較,確定二者的差異部分; 向所述數據庫發送包括所述差異部分的屬性修改請求,以供所述數據庫修改所述復用的數據庫連接和所述數據庫之間的連接屬性。3.根據權利要求1所述的方法,其特征在于,所述響應于所述數據庫連接池中不存在用于所述數據庫的空閑的數據庫連接,建立新的數據庫連接,以便利用新的數據庫連接來連接所述終端和所述數據庫,包括: 向所述數據庫發送建立連接請求; 將正在建立連接過程中的數據庫連接加入預設的數組中; 在接收到所述數據庫返回的應答消息時,從所述預設的數組中查找所述應答消息對應的數據庫連接; 利用所述應答消息對應的數據庫連接來連接所述終端和所述數據庫。4.根據權利要求1所述的方法,其特征在于,所述方法還包括: 根據預設的數據庫連接控制規則,控制用于所述數據庫的數據庫連接的數量。5.根據權利要求4所述的方法,其特征在于,所述根據預設的數據庫連接控制規則,控制用于所述數據庫的數據庫連接的數量,包括: 當接收的訪問請求的數量小于或等于第一預設值時,復用空閑的數據庫連接以及釋放超時的數據庫連接; 當接收的訪問請求的數量大于所述第一預設值且小于或等于第二預設值且用于所述數據庫的非空閑的數據庫連接的數量大于預設的數據庫連接池的最大連接數量時,復用空閑的數據庫連接以及釋放空閑的數據庫連接; 當接收的訪問請求的數量大于所述第二預設值時,建立新的數據庫連接、復用空閑的數據庫連接以及釋放空閑的數據庫連接。6.根據權利要求1所述的方法,其特征在于,所述響應于所述數據庫連接池中不存在用于所述數據庫的空閑的數據庫連接,建立新的數據庫連接,以便利用新的數據庫連接來連接所述終端和所述數據庫,包括: 響應于所述數據庫連接池中不存在用于所述數據庫的空閑的數據庫連接,在所述數據庫的各從數據庫中選取一個作為目標數據庫; 建立新的到所述目標數據庫的數據庫連接。7.根據權利要求6所述的方法,其特征在于,所述在所述數據庫的各從數據庫中選取一個作為目標數據庫,包括: 對于每個從數據庫,確定該從數據庫的非空閑的數據庫連接的數量與該從數據庫的權重的比值; 將所述比值的最小值對應的從數據庫作為目標數據庫。8.根據權利要求6所述的方法,其特征在于,所述在所述數據庫的各從數據庫中選取一個作為目標數據庫,包括: 利用隨機算法,在所述數據庫的各從數據庫中選取一個作為目標數據庫。9.根據權利要求6所述的方法,其特征在于,所述方法還包括: 檢測各從數據庫是否發生故障; 屏蔽發生故障的從數據庫; 間隔預設時間探查所述發生故障的從數據庫; 解除屏蔽故障解除的從數據庫。10.一種數據庫連接的控制裝置,其特征在于,所述裝置包括: 接收單元,用于接收終端發送的對數據庫的訪問請求; 判斷單元,用于判斷數據庫連接池中是否存在用于所述數據庫的空閑的數據庫連接; 復用單元,用于響應于所述數據庫連接池中存在用于所述數據庫的空閑的數據庫連接,選擇空閑的數據庫連接進行復用,以便利用復用的數據庫連接來連接所述終端和所述數據庫; 建連單元,用于響應于所述數據庫連接池中不存在用于所述數據庫的空閑的數據庫連接,建立新的數據庫連接,以便利用所述新的數據庫連接來連接所述終端和所述數據庫。11.根據權利要求10所述的裝置,其特征在于,所述復用單元包括: 屬性比較模塊,用于將所述終端和所述復用的數據庫連接之間的連接屬性與所述復用的數據庫連接和所述數據庫之間的連接屬性進行比較,確定二者的差異部分; 屬性修改模塊,用于向所述數據庫發送包括所述差異部分的屬性修改請求,以供所述數據庫修改所述復用的數據庫連接和所述數據庫之間的連接屬性。12.根據權利要求10所述的裝置,其特征在于,所述建連單元包括: 發送模塊,用于向所述數據庫發送建立連接請求; 加入模塊,用于將正在建立連接過程中的數據庫連接加入預設的數組中; 查找模塊,用于在接收到所述數據庫返回的應答消息時,從所述預設的數組中查找所述應答消息對應的數據庫連接; 連接模塊,用于利用所述應答消息對應的數據庫連接來連接所述終端和所述數據庫。13.根據權利要求10所述的裝置,其特征在于,所述裝置還包括: 控制單元,用于根據預設的數據庫連接控制規則,控制用于所述數據庫的數據庫連接的數量。14.根據權利要求13所述的裝置,其特征在于,所述控制單元包括: 第一控制模塊,用于當接收的訪問請求的數量小于或等于第一預設值時,復用空閑的數據庫連接以及釋放超時的數據庫連接; 第二控制模塊,用于當接收的訪問請求的數量大于所述第一預設值且小于或等于第二預設值且用于所述數據庫的非空閑的數據庫連接的數量大于預設的數據庫連接池的最大連接數量時,復用空閑的數據庫連接以及釋放空閑的數據庫連接; 第三控制模塊,用于當接收的訪問請求的數量大于所述第二預設值時,建立新的數據庫連接、復用空閑的數據庫連接以及釋放空閑的數據庫連接。15.根據權利要求10所述的裝置,其特征在于,所述建連單元包括: 選取模塊,用于響應于所述數據庫連接池中不存在用于所述數據庫的空閑的數據庫連接,在所述數據庫的各從數據庫中選取一個作為目標數據庫; 建連模塊,用于建立新的到所述目標數據庫的數據庫連接。16.根據權利要求15所述的裝置,其特征在于,所述選取模塊進一步用于: 對于每個從數據庫,確定該從數據庫的非空閑的數據庫連接的數量與該從數據庫的權重的比值; 將所述比值的最小值對應的從數據庫作為目標數據庫。17.根據權利要求15所述的裝置,其特征在于,所述選取模塊進一步用于: 利用隨機算法,在所述數據庫的各從數據庫中選取一個作為目標數據庫。18.根據權利要求10所述的裝置,其特征在于,所述裝置還包括: 故障檢測單元,用于檢測各從數據庫是否發生故障; 屏蔽單元,用于屏蔽發生故障的從數據庫; 探查單元,用于間隔預設時間探查所述發生故障的從數據庫; 解除屏蔽單元,用于解除屏蔽故障解除的從數據庫。
【文檔編號】G06F17/30GK105956138SQ201610312417
【公開日】2016年9月21日
【申請日】2016年5月11日
【發明人】王天宇
【申請人】北京百度網訊科技有限公司