本發(fā)明涉及數(shù)據(jù)庫技術領域,具體而言,涉及數(shù)據(jù)庫訪問控制方法和裝置。
背景技術:
數(shù)據(jù)庫作為各類應用系統(tǒng)的核心系統(tǒng),是絕大多數(shù)系統(tǒng)運轉不可或缺的部分。不同的應用對數(shù)據(jù)庫的要求不同。部分系統(tǒng)要求絕對可靠的寫入和讀取,系統(tǒng)需要不停的提升硬件,并朝分布式、集群數(shù)據(jù)庫發(fā)展。部分系統(tǒng)并不要求數(shù)據(jù)能夠立即寫入,或者立即讀取,此部分系統(tǒng)只需要保證數(shù)據(jù)庫系統(tǒng)不能垮掉即可。
現(xiàn)有的系統(tǒng)無法解決數(shù)據(jù)庫資源的保護問題,以及在訪問數(shù)據(jù)庫之前預測訪問資源需求的情況下控制數(shù)據(jù)庫訪問量的問題。
技術實現(xiàn)要素:
有鑒于此,本發(fā)明實施例提供了數(shù)據(jù)庫訪問控制方法和裝置,旨在提供數(shù)據(jù)庫資源的保護和訪問控制的方案,以改善上述問題。
本發(fā)明實施例提供的一種數(shù)據(jù)庫訪問控制方法,所述方法包括:獲取應用系統(tǒng)的數(shù)據(jù)庫操作請求,根據(jù)預設的判斷規(guī)則和數(shù)據(jù)庫當前的資源狀態(tài)判斷所述數(shù)據(jù)庫操作請求是否允許執(zhí)行。如果判斷所述數(shù)據(jù)庫操作請求允許執(zhí)行,通知所述應用系統(tǒng)發(fā)送所述數(shù)據(jù)庫操作請求至所述數(shù)據(jù)庫進行執(zhí)行;否則,通知所述應用系統(tǒng)不能執(zhí)行所述數(shù)據(jù)庫操作請求。
本發(fā)明實施例提供的一種數(shù)據(jù)庫訪問控制裝置,所述數(shù)據(jù)庫訪問裝置包括:請求獲取模塊,用于獲取應用系統(tǒng)的數(shù)據(jù)庫操作請求。判斷模塊,用于根據(jù)預設的判斷規(guī)則和數(shù)據(jù)庫當前的資源狀態(tài)判斷所述數(shù)據(jù)庫操作請求是否允許執(zhí)行。通知發(fā)送模塊,用于如果判斷所述數(shù)據(jù)庫操作請求允許執(zhí)行,通知所述應用系統(tǒng)發(fā)送所述數(shù)據(jù)庫操作請求至所述數(shù)據(jù)庫進行執(zhí)行;否則,通知所述應用系統(tǒng)不能執(zhí)行所述數(shù)據(jù)庫操作請求。
本發(fā)明實施例提供的數(shù)據(jù)庫訪問控制方法中,在應用系統(tǒng)向所述數(shù)據(jù)庫發(fā)送數(shù)據(jù)庫操作請求之后,所述數(shù)據(jù)庫訪問控制系統(tǒng)根據(jù)所接收的數(shù)據(jù)庫操作請求,和預設的判斷規(guī)則和數(shù)據(jù)庫當前的資源狀態(tài)判斷是否允許所述數(shù)據(jù)庫操作請求執(zhí)行。如果判斷后得出所述當前的資源狀態(tài)允許所述數(shù)據(jù)庫操作請求執(zhí)行,則通知所述應用系統(tǒng)發(fā)送所述數(shù)據(jù)庫操作請求至所述數(shù)據(jù)庫進行執(zhí)行;如果判斷得出所述數(shù)據(jù)庫操作請求不允許執(zhí)行,則通知所述應用系統(tǒng)不能執(zhí)行所述數(shù)據(jù)庫操作請求,則該數(shù)據(jù)庫操作請求就不會被執(zhí)行。在接收數(shù)據(jù)庫操作請求之后,根據(jù)預設的判斷機制判斷數(shù)據(jù)庫操作請求是否允許執(zhí)行,保護了數(shù)據(jù)庫資源,控制數(shù)據(jù)庫端的數(shù)據(jù)庫操作請求訪問,提高了數(shù)據(jù)庫的安全性和訪問率。
為使本發(fā)明的上述目的、特征和優(yōu)點能更明顯易懂,下文特舉較佳實施例,并配合所附附圖,作詳細說明如下。
附圖說明
為了更清楚地說明本發(fā)明實施例的技術方案,下面將對實施例中所需要使用的附圖作簡單地介紹,應當理解,以下附圖僅示出了本發(fā)明的某些實施例,因此不應被看作是對范圍的限定,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他相關的附圖。
圖1為本發(fā)明實施例提供的數(shù)據(jù)庫訪問控制系統(tǒng)的結構示意圖;
圖2為本發(fā)明第一實施例提供的數(shù)據(jù)庫訪問控制方法的步驟流程圖;
圖3為本發(fā)明第二實施例提供的數(shù)據(jù)庫訪問控制方法的步驟流程圖;
圖4為本發(fā)明第三實施例提供的數(shù)據(jù)庫訪問控制方法的步驟流程圖;
圖5為本發(fā)明第四實施例提供的數(shù)據(jù)庫訪問控制裝置的功能模塊圖;
圖6為本發(fā)明第五實施例提供的數(shù)據(jù)庫訪問控制裝置的功能模塊圖。
具體實施方式
為使本發(fā)明實施例的目的、技術方案和優(yōu)點更加清楚,下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。因此,以下對在附圖中提供的本發(fā)明的實施例的詳細描述并非旨在限制要求保護的本發(fā)明的范圍,而是僅僅表示本發(fā)明的選定實施例。基于本發(fā)明中的實施例,本領域普通技術人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
請參見圖1,是本發(fā)明實施例提供的數(shù)據(jù)庫訪問控制方法和裝置所應用的數(shù)據(jù)庫訪問控制系統(tǒng)100的結構示意圖。所述數(shù)據(jù)庫訪問控制系統(tǒng)100包括:至少一個應用系統(tǒng)110、數(shù)據(jù)庫訪問控制裝置120和數(shù)據(jù)庫130。所述應用系統(tǒng)110與所述數(shù)據(jù)庫訪問控制裝置120連接,以判斷所述應用系統(tǒng)發(fā)送的數(shù)據(jù)庫操作請求是否允許執(zhí)行。本發(fā)明實施例提供的數(shù)據(jù)庫訪問控制方法和裝置可以應用于數(shù)據(jù)庫服務器中,即數(shù)據(jù)庫訪問控制裝置120和數(shù)據(jù)庫130位于同一臺服務器中,當然本發(fā)明實施例提供的數(shù)據(jù)庫訪問裝置和數(shù)據(jù)庫130也可以分開部署。所述數(shù)據(jù)庫訪問控制裝置與所述數(shù)據(jù)庫連接,數(shù)據(jù)庫訪問控制裝置120將接收的所述應用系統(tǒng)的數(shù)據(jù)庫操作請求的判斷結果通知給應用系統(tǒng)110。所述數(shù)據(jù)庫訪問控制裝置優(yōu)選設置于所述數(shù)據(jù)庫所在的服務器。本發(fā)明實施例中的應用系統(tǒng)110不限于一個。
請參見圖2,為本發(fā)明第一實施例提供的數(shù)據(jù)庫訪問控制方法的步驟流程圖,所述數(shù)據(jù)庫訪問控制方法應用于圖1所示的數(shù)據(jù)庫訪問控制裝置120。下面將對圖2所示的步驟進行具體解釋。
步驟S201,獲取應用系統(tǒng)的數(shù)據(jù)庫操作請求。
應用系統(tǒng)在需要向數(shù)據(jù)庫執(zhí)行寫入、獲取、查詢等操作時,需要發(fā)送數(shù)據(jù)庫操作請求至所述數(shù)據(jù)庫訪問控制裝置。所述數(shù)據(jù)庫操作請求可以包括所請求的數(shù)據(jù)操作種類、所請求的操作對象等。所述請求的數(shù)據(jù)操作種類可以包括寫入請求、獲取請求、查詢請求等。所請求的操作對象可以包括:欲寫入的數(shù)據(jù)和寫入目的結構、欲查詢的數(shù)據(jù)結構等。
一般地,所述數(shù)據(jù)庫訪問控制裝置以發(fā)送sql(Structured Query Language,結構化查詢語言)至數(shù)據(jù)庫的方式發(fā)起數(shù)據(jù)庫操作請求。所述結構化查詢語言,是一種特殊目的的編程語言,是數(shù)據(jù)庫查詢和程序設計語言,用于存取數(shù)據(jù)以及查詢、更新和管理關系數(shù)據(jù)庫系統(tǒng)。結構化查詢語言是高級的非過程化編程語言,允許用戶在高層數(shù)據(jù)結構上工作。它不要求用戶指定對數(shù)據(jù)的存放方法,也不需要用戶了解具體的數(shù)據(jù)存放方式,所以具有完全不同底層結構的不同數(shù)據(jù)庫系統(tǒng),可以使用相同的結構化查詢語言作為數(shù)據(jù)輸入和管理的接口。結構化查詢語言語句可以嵌套,具有極大的靈活性和強大的功能。
步驟S202,根據(jù)預設的判斷規(guī)則和數(shù)據(jù)庫當前的資源狀態(tài)判斷所述數(shù)據(jù)庫操作請求是否允許執(zhí)行。
如果所述數(shù)據(jù)庫操作請求允許執(zhí)行,則執(zhí)行步驟S203,通知所述應用系統(tǒng)發(fā)送所述數(shù)據(jù)庫操作請求至所述數(shù)據(jù)庫進行執(zhí)行。
如果所述數(shù)據(jù)庫操作請求不允許執(zhí)行,則執(zhí)行步驟S204,通知所述應用系統(tǒng)不能執(zhí)行所述數(shù)據(jù)庫操作請求。
所述數(shù)據(jù)庫訪問控制裝置內(nèi)預設有判斷規(guī)則,所述判斷規(guī)則用于判斷應用系統(tǒng)發(fā)送的數(shù)據(jù)庫操作請求是否允許執(zhí)行。具體地,所述數(shù)據(jù)庫訪問控制裝置根據(jù)數(shù)據(jù)庫當前的資源狀態(tài),并利用預設的判斷規(guī)則,綜合判斷所述數(shù)據(jù)庫操作請求是否允許執(zhí)行。所述數(shù)據(jù)庫的資源狀態(tài)可以包括:數(shù)據(jù)庫IO狀態(tài)、CPU狀態(tài)、內(nèi)存狀態(tài)、數(shù)據(jù)庫線程執(zhí)行狀態(tài)等中的至少一種,所述數(shù)據(jù)庫的一種或多種資源狀態(tài)關聯(lián)所述數(shù)據(jù)庫操作請求能否被所述數(shù)據(jù)庫執(zhí)行。每種資源狀態(tài)均對應其極限閾值,在達到其極限閾值時,滿足預設條件的數(shù)據(jù)庫操作請求將不允許執(zhí)行。
所述數(shù)據(jù)庫IO狀態(tài),是指所述數(shù)據(jù)庫中磁盤IO占時比,即為周期內(nèi)用于IO操作的時間比率,即IO隊列非空的時間比率,所述磁盤IO占時比對應一個極限閾值。磁盤IO占時比暗示了設備的繁忙程度。一般地,如果占時比達到100%,表示該設備已經(jīng)接近滿負荷運行了。在占時比達到80%時,該設備達到高負荷運行狀態(tài),某些優(yōu)先級別為低優(yōu)先級和中優(yōu)先級的數(shù)據(jù)庫操作請求可能就允許執(zhí)行,只能允許高優(yōu)先級別的數(shù)據(jù)庫操作請求執(zhí)行。當然,在某些數(shù)據(jù)庫為多磁盤的情況下,即使占時比為100%,由于多磁盤的并發(fā)能力,磁盤使用未必達到了滿負荷運載??梢愿鶕?jù)數(shù)據(jù)庫的具體硬件配置和數(shù)據(jù)庫操作請求的優(yōu)先級別來設置不同的控制條件,以便適應數(shù)據(jù)庫的具體需求。
在一種實施方式中,所述數(shù)據(jù)庫訪問控制裝置根據(jù)當前的資源狀態(tài)判斷所述數(shù)據(jù)庫操作請求是否允許執(zhí)行的過程可以為:若所述數(shù)據(jù)庫操作請求為寫入請求,寫入目標結構已經(jīng)在執(zhí)行寫入操作,則所述數(shù)據(jù)庫操作請求不允許執(zhí)行。若所述數(shù)據(jù)庫IO達到80%,則只允許高優(yōu)先級的數(shù)據(jù)庫操作請求允許執(zhí)行。若所述數(shù)據(jù)線程數(shù)達到其極限閾值,則所述數(shù)據(jù)庫操作請求不允許執(zhí)行。具體的限定條件可以針對數(shù)據(jù)庫的保護機制設定,在此不做限定。
若判定所述數(shù)據(jù)庫操作請求允許執(zhí)行,則通知所述應用系統(tǒng)發(fā)送所述數(shù)據(jù)庫操作請求至所述數(shù)據(jù)庫進行執(zhí)行;例如將寫入請求的數(shù)據(jù)寫入到寫入目標對象,刪除滿足條件的數(shù)據(jù)庫條目,查詢請求的數(shù)據(jù)庫條目等。若判定所述數(shù)據(jù)庫操作請求不允許執(zhí)行,則通知所述應用系統(tǒng)不能執(zhí)行所述數(shù)據(jù)庫操作請求,不觸發(fā)對所述數(shù)據(jù)庫執(zhí)行該數(shù)據(jù)庫操作請求。
所述數(shù)據(jù)庫訪問控制裝置在得出判斷結果后,返回判斷結果至所述應用系統(tǒng),以通知所述應用系統(tǒng)是否可以執(zhí)行其所發(fā)送的數(shù)據(jù)庫操作請求。所述判斷結果可以僅包括是否允許執(zhí)行的指示信息,也可以包括判斷依據(jù)或者當前執(zhí)行狀態(tài)等。若判定結果為不允許執(zhí)行,可以直接拒絕此次數(shù)據(jù)庫操作請求,也可以間隔一段時間后再次判斷該數(shù)據(jù)庫操作請求的是否允許執(zhí)行。
上述本發(fā)明實施例提供的數(shù)據(jù)庫訪問控制方法,在接收到應用系統(tǒng)的數(shù)據(jù)庫操作請求時,根據(jù)裝置內(nèi)預設的判斷規(guī)則,和數(shù)據(jù)庫當前的資源狀態(tài),判斷所述應用系統(tǒng)的數(shù)據(jù)庫操作請求是否允許執(zhí)行,保護了數(shù)據(jù)庫資源,控制數(shù)據(jù)庫端的數(shù)據(jù)庫操作請求訪問,提高了數(shù)據(jù)庫的安全性和訪問率。
請參見圖3,為本發(fā)明第二實施例提供的數(shù)據(jù)庫訪問控制方法的步驟流程圖。在上述實施例的基礎上,步驟S202所述的,根據(jù)預設的判斷規(guī)則和數(shù)據(jù)庫當前的資源狀態(tài)判讀所述數(shù)據(jù)庫操作請求是否允許執(zhí)行的具體實施過程,還可以有其它可能實施方式。下面將對圖3所示的步驟進行具體解釋。
步驟S301,獲取所述應用系統(tǒng)的數(shù)據(jù)庫操作請求。
應用系統(tǒng)在需要向數(shù)據(jù)庫執(zhí)行寫入、刪除、查詢、修改等操作時,需要發(fā)送數(shù)據(jù)庫操作請求至所述數(shù)據(jù)庫訪問控制裝置。如果是寫入操作,所述數(shù)據(jù)庫操作請求包括所請求的數(shù)據(jù)操作種類、所請求的操作對象以及寫入的數(shù)據(jù)庫條目數(shù)等。如果所述請求的數(shù)據(jù)操作種類為刪除操作或者修改操作。所請求的操作對象可以包括:欲寫入的數(shù)據(jù)和寫入目的結構、欲查詢的數(shù)據(jù)結構等。
步驟S302,判斷所述數(shù)據(jù)庫操作請求是否滿足預設條件。
在所述資源狀態(tài)滿足預設條件時,執(zhí)行步驟S303,判定所述數(shù)據(jù)庫操作請求不允許執(zhí)行。
在所述資源狀態(tài)不滿足預設條件時,執(zhí)行步驟S304。
所述數(shù)據(jù)庫的資源狀態(tài)可以包括:數(shù)據(jù)庫IO狀態(tài)、CPU狀態(tài)、內(nèi)存狀態(tài)、數(shù)據(jù)庫線程執(zhí)行狀態(tài)等中的至少一種,用于判定所述數(shù)據(jù)庫操作請求不允許執(zhí)行的預設條件可以包括下述條件中的至少一種。
其一,所述資源狀態(tài)為磁盤IO占時比,所述磁盤IO占時比達到極限閾值,且所述數(shù)據(jù)庫操作請求的優(yōu)先級不是預設的高優(yōu)先級。
數(shù)據(jù)庫操作請求為寫入請求時,磁盤IO占時比較高。在接收到所述數(shù)據(jù)庫操作請求時,判斷所述磁盤IO占時比達是否到其極限閾值(例如80%),若達到極限閾值,此時低優(yōu)先級和中優(yōu)先級的數(shù)據(jù)庫操作請求不允許執(zhí)行,只允許執(zhí)行高優(yōu)先級的數(shù)據(jù)庫操作請求。判斷當前的數(shù)據(jù)庫操作請求的優(yōu)先級是不是高優(yōu)先級,若是則判定所述數(shù)據(jù)庫操作請求允許執(zhí)行,或者是再根據(jù)其它的數(shù)據(jù)庫資源狀態(tài)判斷該數(shù)據(jù)庫操作請求是否允許執(zhí)行。若當前的數(shù)據(jù)庫操作請求的優(yōu)先級不是高優(yōu)先級,則判定所述數(shù)據(jù)庫操作請求不允許執(zhí)行。
其二,所述資源狀態(tài)包括數(shù)據(jù)庫內(nèi)存,所述數(shù)據(jù)庫內(nèi)存達到其極限閾值,且所述數(shù)據(jù)庫操作請求為查詢請求。
數(shù)據(jù)庫操作請求為普通查詢請求時,內(nèi)存消耗較高。在接收到所述數(shù)據(jù)庫操作請求時,判斷所述數(shù)據(jù)庫內(nèi)存是否達到極限閾值(例如數(shù)據(jù)庫可使用內(nèi)存的90%),若達到極限閾值,則判斷此時的數(shù)據(jù)庫操作請求是否為查詢請求。若所述數(shù)據(jù)庫操作請求不是查詢請求,則可以判定所述數(shù)據(jù)庫操作請求允許執(zhí)行,或者是再根據(jù)其它的數(shù)據(jù)庫資源狀態(tài)判斷該數(shù)據(jù)庫操作請求是否允許執(zhí)行。若當前的數(shù)據(jù)庫操作請求為查詢請求,則判定所述數(shù)據(jù)庫操作請求不允許執(zhí)行。
其三,所述資源狀態(tài)包括數(shù)據(jù)線程數(shù),所述數(shù)據(jù)線程數(shù)達到其極限閾值。
數(shù)據(jù)庫資源狀態(tài)還可以為數(shù)據(jù)線程數(shù),即為該數(shù)據(jù)庫當前已經(jīng)在執(zhí)行的線程的數(shù)量,數(shù)據(jù)庫的線程數(shù)對應一個極限閾值。在接收到所述數(shù)據(jù)庫操作請求時,判斷所述數(shù)據(jù)庫當前的數(shù)據(jù)線程數(shù)是否達到極限閾值。若所述數(shù)據(jù)線程數(shù)未達到極限閾值,則判定所述數(shù)據(jù)庫操作請求允許執(zhí)行,或者是再根據(jù)其它的數(shù)據(jù)庫資源狀態(tài)判斷該數(shù)據(jù)庫操作請求是否允許執(zhí)行。若所述數(shù)據(jù)線程數(shù)達到其極限閾值,則可以直接判定所述數(shù)據(jù)庫操作請求不允許執(zhí)行。
其四,所述數(shù)據(jù)庫操作請求為排他寫入,獲取所述排他寫入對應的寫入?yún)^(qū)域,且所述寫入?yún)^(qū)域為正在寫入狀態(tài)。
應用系統(tǒng)發(fā)送的數(shù)據(jù)庫操作請求可以為寫入請求,所述寫入請求包括排他寫入和非排他寫入。所述排他寫入,即為所述排他寫入請求對應的寫入?yún)^(qū)域不能同時執(zhí)行其他的寫入請求。在接收到所述數(shù)據(jù)庫操作請求時,判斷所述數(shù)據(jù)庫操作請求是否為排他寫入。若所述數(shù)據(jù)庫操作請求是非排他寫入,則可以判定所述數(shù)據(jù)庫操作請求允許執(zhí)行,或者是再根據(jù)其它的數(shù)據(jù)庫資源狀態(tài)判斷該數(shù)據(jù)庫操作請求是否允許執(zhí)行。若所述數(shù)據(jù)庫為排他寫入,則判斷該排他寫入請求對應的寫入?yún)^(qū)域是否為正在寫入狀態(tài)。若所述寫入?yún)^(qū)域不是正在寫入狀態(tài),則可以判定該數(shù)據(jù)庫操作請求允許執(zhí)行,或者是再根據(jù)其它的數(shù)據(jù)庫資源狀態(tài)判斷所述數(shù)據(jù)庫操作請求是否允許執(zhí)行。若所述寫入?yún)^(qū)域是正在寫入狀態(tài),則可以判定該數(shù)據(jù)庫操作請求不允許執(zhí)行。
步驟S304,獲取所述數(shù)據(jù)庫操作請求的請求語句。
在所述數(shù)據(jù)資源狀態(tài)不滿足上述實施例提供的預設條件時,初步判定所述數(shù)據(jù)庫操作請求可能允許執(zhí)行,還需要進一步的判斷過程。獲取所述數(shù)據(jù)庫操作請求的請求語句。步驟S305,根據(jù)所述數(shù)據(jù)庫操作請求的請求語句和所述請求語句的平均資源消耗計算所述數(shù)據(jù)庫操作請求的預測資源消耗。
所述數(shù)據(jù)庫訪問控制裝置在執(zhí)行歷史數(shù)據(jù)庫操作請求時,會記錄數(shù)據(jù)庫操作請求中的請求語句的平均資源消耗,以用于后續(xù)的數(shù)據(jù)庫操作請求的預測資源消耗。依據(jù)上述步驟獲取數(shù)據(jù)庫操作請求中的條目信息后,根據(jù)所述數(shù)據(jù)庫訪問控制裝置內(nèi)記錄的請求語句的平均資源消耗的歷史數(shù)據(jù),計算所述數(shù)據(jù)庫操作請求中的請求語句所需要的資源消耗,進而得出所述數(shù)據(jù)庫操作請求的預測資源消耗。
步驟S306,判斷所述數(shù)據(jù)庫當前的資源狀態(tài)是否滿足所述數(shù)據(jù)庫操作請求的預測資源消耗。
如果所述資源狀態(tài)滿足所述數(shù)據(jù)庫操作請求的預測資源消耗,則執(zhí)行步驟S307,判定所述數(shù)據(jù)庫操作請求允許執(zhí)行。
如果所述資源狀態(tài)不滿足所述數(shù)據(jù)庫操作請求的預測資源消耗,則執(zhí)行步驟S303,判定所述數(shù)據(jù)庫操作請求不允許執(zhí)行。
依據(jù)上述步驟計算所述數(shù)據(jù)庫操作請求的預測資源消耗,根據(jù)所述數(shù)據(jù)庫當前的系統(tǒng)資源消耗的基線值,判斷所述數(shù)據(jù)庫當前的資源狀態(tài)是否滿足所述數(shù)據(jù)庫操作請求的預測資源消耗。如果所述數(shù)據(jù)庫當前的資源狀態(tài)滿足所述數(shù)據(jù)庫操作請求的預測資源消耗,判定所述數(shù)據(jù)庫操作請求允許執(zhí)行。如果所述數(shù)據(jù)庫當前的資源狀態(tài)不滿足所述數(shù)據(jù)庫操作請求的預測資源消耗,判定所述數(shù)據(jù)庫操作請求不允許執(zhí)行。
上述本實施例提供的多種用于判定所述數(shù)據(jù)庫操作請求不允許執(zhí)行的預設條件,可以根據(jù)數(shù)據(jù)庫所接收的數(shù)據(jù)庫操作請求的種類選擇其中一種方式作為判斷依據(jù),也可以將多種判斷方式綜合判斷數(shù)據(jù)庫操作請求是否允許執(zhí)行。在進行數(shù)據(jù)庫操作請求的執(zhí)行狀態(tài)判斷時,增設根據(jù)數(shù)據(jù)庫當前的資源狀態(tài)和數(shù)據(jù)庫操作請求的預測資源是否匹配的判斷過程,以進一步判斷數(shù)據(jù)庫的資源狀態(tài)是否允許執(zhí)行所接收的數(shù)據(jù)庫操作請求,進一步提高了數(shù)據(jù)庫的資源保護和訪問控制。
請參見圖4,為本發(fā)明第三實施例提供的數(shù)據(jù)庫訪問控制方法的步驟流程圖。為了計算所接收的數(shù)據(jù)庫操作請求的預測資源消耗,以及進一步保證數(shù)據(jù)庫的資源滿足數(shù)據(jù)庫操作請求的需求,本發(fā)明實施例增設了根據(jù)數(shù)據(jù)庫操作請求執(zhí)行后的資源消耗總量計算數(shù)據(jù)庫操作請求中的請求語句的平均資源消耗的過程,以用于后續(xù)數(shù)據(jù)庫操作請求的預測資源消耗的計算。下面將結合圖4,對上述資源消耗的計算過程進行具體解釋。
步驟S401,獲取所述應用系統(tǒng)返回的所述數(shù)據(jù)庫操作請求及執(zhí)行完成的指示信息。
數(shù)據(jù)庫訪問控制裝置在判定應用系統(tǒng)發(fā)送的數(shù)據(jù)庫操作請求允許執(zhí)行時,應用系統(tǒng)將所述數(shù)據(jù)庫操作請求發(fā)送到數(shù)據(jù)庫進行執(zhí)行,即由數(shù)據(jù)庫執(zhí)行應用系統(tǒng)發(fā)起的sql語句。應用系統(tǒng)的數(shù)據(jù)庫操作請求執(zhí)行完成后,返回數(shù)據(jù)庫操作請求及執(zhí)行完成的指示信息至所述數(shù)據(jù)庫訪問控制裝置。所述數(shù)據(jù)庫操作請求完成的指示信息可以包括:數(shù)據(jù)庫操作請求執(zhí)行的起止時間、數(shù)據(jù)庫操作請求中的請求語句種類、數(shù)據(jù)庫操作請求的條目信息等,所述數(shù)據(jù)庫操作請求的條目信息包括操作數(shù)據(jù)庫的條目數(shù)。
步驟S402,根據(jù)所述數(shù)據(jù)庫操作請求執(zhí)行前的資源狀態(tài)和所述數(shù)據(jù)庫操作請求執(zhí)行后的資源狀態(tài)獲取所述數(shù)據(jù)庫操作請求對應的資源消耗總量。
為監(jiān)控所述數(shù)據(jù)庫的系統(tǒng)資源消耗量,優(yōu)選在該數(shù)據(jù)庫無訪問時,建立系統(tǒng)資源消耗的基線值。數(shù)據(jù)庫訪問控制裝置在數(shù)據(jù)庫系統(tǒng)啟動時,可控制所述訪問暫時不執(zhí)行,先檢測數(shù)據(jù)庫的系統(tǒng)資源消耗的基線值,即為檢測一段時間內(nèi)數(shù)據(jù)庫IO、內(nèi)存、CPU消耗值、數(shù)據(jù)線程數(shù)等參數(shù)。記錄基線值后,開始放行數(shù)據(jù)庫操作請求。
在執(zhí)行所述數(shù)據(jù)庫操作請求之前,記錄該數(shù)據(jù)庫的系統(tǒng)資源消耗的基線值。執(zhí)行完所述數(shù)據(jù)庫操作請求之后,再次記錄所述數(shù)據(jù)庫當前的系統(tǒng)資源消耗的基線值。根據(jù)所述數(shù)據(jù)庫操作請求執(zhí)行前的資源狀態(tài),以及所述數(shù)據(jù)庫操作請求執(zhí)行后的系統(tǒng)資源消耗的基線值,獲取所述數(shù)據(jù)庫操作請求對應的資源消耗總量。
步驟S403,根據(jù)所述資源消耗總量和所述數(shù)據(jù)庫操作請求的條目信息,計算所述數(shù)據(jù)庫操作請求中的請求語句執(zhí)行每個條目的平均資源消耗量。
所述數(shù)據(jù)庫訪問控制裝置根據(jù)所述資源消耗總量和所述數(shù)據(jù)庫操作請求的條目信息,計算所述數(shù)據(jù)庫操作請求中的請求語句執(zhí)行每個條目的平均資源消耗量,用于計算包括所述請求語句的下一次數(shù)據(jù)庫操作請求的預測資源消耗。所述數(shù)據(jù)庫訪問控制裝置在完成執(zhí)行完的數(shù)據(jù)庫操作請求中的請求語句的平均資源消耗量后,將數(shù)據(jù)庫操作請求中的每種請求語句對應的平均資源消耗量存儲。在接收到下一次的數(shù)據(jù)庫操作請求時,根據(jù)該數(shù)據(jù)庫操作請求中的請求語句的種類,以及其中的請求語句的平均資源消耗的歷史記錄,預測包含該請求語句的數(shù)據(jù)庫操作請求可能需求的資源消耗。可以根據(jù)所述數(shù)據(jù)庫當前的系統(tǒng)資源,以及所接收的數(shù)據(jù)庫操作請求可能需求的資源消耗,判斷所述數(shù)據(jù)庫當前的系統(tǒng)資源是否滿足所述數(shù)據(jù)庫操作請求可能需求的資源消耗,以判斷所述數(shù)據(jù)庫操作請求是否允許執(zhí)行。
請參見圖5,為本發(fā)明第四實施例提供的數(shù)據(jù)庫訪問控制裝置500的功能模塊圖。本發(fā)明實施例提供的所述數(shù)據(jù)庫訪問控制裝置500與上述實施例提供的數(shù)據(jù)庫訪問控制裝置120可以為實現(xiàn)數(shù)據(jù)庫訪問控制功能的同一裝置或者不同裝置。本實施例提供的所述數(shù)據(jù)庫訪問控制裝置500包括:請求獲取模塊510、判斷模塊520和通知發(fā)送模塊530。
所述請求獲取模塊510,用于獲取應用系統(tǒng)的數(shù)據(jù)庫操作請求。
所述判斷模塊520,用于根據(jù)預設的判斷規(guī)則和數(shù)據(jù)庫當前的資源狀態(tài)判斷所述數(shù)據(jù)庫操作請求是否允許執(zhí)行。
所述通知發(fā)送模塊530,用于如果判斷所述數(shù)據(jù)庫操作請求允許執(zhí)行,通知所述應用系統(tǒng)發(fā)送所述數(shù)據(jù)庫操作請求至所述數(shù)據(jù)庫進行執(zhí)行;否則,通知所述應用系統(tǒng)不能執(zhí)行所述數(shù)據(jù)庫操作請求。
在上述實施例的基礎上,所述判斷模塊520用于:
在所述資源狀態(tài)滿足預設條件時,判定所述數(shù)據(jù)庫操作請求不允許執(zhí)行。
在所述資源狀態(tài)不滿足預設條件時,判定所述數(shù)據(jù)庫操作請求允許執(zhí)行。
在上述實施例的基礎上,所述判斷模塊520用于判定數(shù)據(jù)庫操作請求不允許執(zhí)行的預設條件包括以下條件中的至少一個:
所述資源狀態(tài)包括磁盤IO占時比,所述磁盤IO占時比達到其極限閾值,且所述數(shù)據(jù)庫操作請求的優(yōu)先級不是預設的高優(yōu)先級;
所述資源狀態(tài)包括數(shù)據(jù)庫內(nèi)存,所述數(shù)據(jù)庫內(nèi)存達到其極限閾值,且所述數(shù)據(jù)庫操作請求為查詢請求;
所述資源狀態(tài)包括數(shù)據(jù)線程數(shù),所述數(shù)據(jù)線程數(shù)達到其極限閾值;以及
所述數(shù)據(jù)庫操作請求為排他寫入,獲取所述排他寫入對應的寫入?yún)^(qū)域,且所述寫入?yún)^(qū)域為正在寫入狀態(tài)。
請參見圖6,為本發(fā)明第五實施例提供的數(shù)據(jù)庫訪問控制裝置。在上述實施例的基礎上,本發(fā)明實施例提供的數(shù)據(jù)庫訪問控制裝置600還可以包括:指示信息接收模塊610、資源消耗總量獲取模塊620和平均資源消耗量計算模塊630。
指示信息接收模塊610,用于獲取所述應用系統(tǒng)返回的所述數(shù)據(jù)庫操作請求及執(zhí)行完成的指示信息,其中,所述指示信息包括所述數(shù)據(jù)庫操作請求的條目信息;
資源消耗總量獲取模塊620,用于根據(jù)所述數(shù)據(jù)庫操作請求執(zhí)行前的資源狀態(tài)和所述數(shù)據(jù)庫操作請求執(zhí)行后的資源狀態(tài)獲取所述數(shù)據(jù)庫操作請求對應的資源消耗總量;
平均資源消耗量計算模塊630,用于根據(jù)所述資源消耗總量和所述數(shù)據(jù)庫操作請求的條目信息,計算所述數(shù)據(jù)庫操作請求中的請求語句執(zhí)行每個條目的平均資源消耗量,用于計算包括所述請求語句的下一次數(shù)據(jù)庫操作請求的預測資源消耗。
在上述實施例的基礎上,所述判斷模塊520還用于:
在所述資源狀態(tài)不滿足預設條件時,獲取所述數(shù)據(jù)庫操作請求的請求語句種類,或者還包括所述數(shù)據(jù)庫操作請求中的條目信息,即操作數(shù)據(jù)庫的條目數(shù);
根據(jù)所述數(shù)據(jù)庫操作請求的語句種類和請求語句的平均資源消耗計算所述數(shù)據(jù)庫操作請求的預測資源消耗;或者根據(jù)所述數(shù)據(jù)庫操作請求的語句種類和請求語句執(zhí)行每個條目的平均資源消耗計算所述數(shù)據(jù)庫操作請求的預測資源消耗;
判斷所述數(shù)據(jù)庫當前的資源狀態(tài)是否滿足所述數(shù)據(jù)庫操作請求的預測資源消耗;
如果所述資源狀態(tài)滿足所述數(shù)據(jù)庫操作請求的預測資源消耗,判定所述數(shù)據(jù)庫操作請求允許執(zhí)行;
如果所述資源狀態(tài)不滿足所述數(shù)據(jù)庫操作請求的預測資源消耗,判定所述數(shù)據(jù)庫操作請求不允許執(zhí)行。
上述本發(fā)明實施例提供的數(shù)據(jù)庫訪問控制裝置,在接收到應用系統(tǒng)的數(shù)據(jù)庫操作請求時,根據(jù)裝置內(nèi)預設的判斷規(guī)則,和數(shù)據(jù)庫當前的資源狀態(tài),判斷所述應用系統(tǒng)的數(shù)據(jù)庫操作請求是否允許執(zhí)行,保護了數(shù)據(jù)庫資源,控制數(shù)據(jù)庫端的數(shù)據(jù)庫操作請求訪問,提高了數(shù)據(jù)庫的安全性和訪問率。本發(fā)明實施例提供的數(shù)據(jù)庫訪問控制裝置的具體實施過程請參見上述方法實施例,在此不再一一贅述。
在本申請所提供的幾個實施例中,應該理解到,所揭露的裝置和方法,也可以通過其它的方式實現(xiàn)。以上所描述的裝置實施例僅僅是示意性的,例如,附圖中的流程圖和框圖顯示了根據(jù)本發(fā)明的多個實施例的裝置、方法和計算機程序產(chǎn)品的可能實現(xiàn)的體系架構、功能和操作。在這點上,流程圖或框圖中的每個方框可以代表一個模塊、程序段或代碼的一部分,所述模塊、程序段或代碼的一部分包含一個或多個用于實現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應當注意,在有些作為替換的實現(xiàn)方式中,方框中所標注的功能也可以以不同于附圖中所標注的順序發(fā)生。例如,兩個連續(xù)的方框實際上可以基本并行地執(zhí)行,它們有時也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或動作的專用的基于硬件的系統(tǒng)來實現(xiàn),或者可以用專用硬件與計算機指令的組合來實現(xiàn)。
另外,在本發(fā)明各個實施例中的各功能模塊可以集成在一起形成一個獨立的部分,也可以是各個模塊單獨存在,也可以兩個或兩個以上模塊集成形成一個獨立的部分。
所述功能如果以軟件功能模塊的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在一個計算機可讀取存儲介質中?;谶@樣的理解,本發(fā)明的技術方案本質上或者說對現(xiàn)有技術做出貢獻的部分或者該技術方案的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網(wǎng)絡設備等)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。而前述的存儲介質包括:U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質。需要說明的是,在本文中,諸如第一和第二等之類的關系術語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關系或者順序。而且,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設備中還存在另外的相同要素。
以上所述僅為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,對于本領域的技術人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。應注意到:相似的標號和字母在下面的附圖中表示類似項,因此,一旦某一項在一個附圖中被定義,則在隨后的附圖中不需要對其進行進一步定義和解釋。
以上所述,僅為本發(fā)明的具體實施方式,但本發(fā)明的保護范圍并不局限于此,任何熟悉本技術領域的技術人員在本發(fā)明揭露的技術范圍內(nèi),可輕易想到變化或替換,都應涵蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍應所述以權利要求的保護范圍為準。