TWI790991B - 資料庫操作方法及裝置 - Google Patents
資料庫操作方法及裝置 Download PDFInfo
- Publication number
- TWI790991B TWI790991B TW106102691A TW106102691A TWI790991B TW I790991 B TWI790991 B TW I790991B TW 106102691 A TW106102691 A TW 106102691A TW 106102691 A TW106102691 A TW 106102691A TW I790991 B TWI790991 B TW I790991B
- Authority
- TW
- Taiwan
- Prior art keywords
- database
- target transaction
- data
- execution
- business logic
- Prior art date
Links
Images
Landscapes
- Vehicle Body Suspensions (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本發明提供一種資料庫操作方法及裝置。方法包括:根據用戶指示執行目標事物的觸發指令,獲取由目標事務封裝成的業務邏輯代碼;根據業務邏輯代碼而對目標事務進行預測執行,並記錄預測執行過程中獲得的目標事務的切分條件和涉及的資料範圍;當預測執行成功時,根據業務邏輯代碼以及預測執行過程中獲得的目標事務的切分條件和涉及的資料範圍,控制切分條件指向的資料庫實際執行目標事務。本發明可以提高事務執行效率並增大事務處理量。
Description
本發明係有關資料庫技術領域,尤其有關一種資料庫操作方法及裝置。
資料庫事務(Database Transaction),是指作為單個邏輯操作單元執行的一系列操作,要麼完全地執行,要麼完全地不執行。一個事務由一系列的資料庫操作指令所構成,例如結構化查詢語言(Structured Query Language,SQL)語句,這些資料庫操作指令之間存在有切分條件以及跳轉等邏輯,意味著在一次執行過程中該事務中可能有部分資料庫操作指令被跳過不執行。但在現有技術中,由於無法預先獲知事務的切分條件或者跳轉邏輯等資訊,因此只能按照執行邏輯邊執行邊判斷,依序執行事務中的語句,以實現對資料庫的操作。這種事務執行方式效率較低,事務處理量較低。
本發明的多個態樣提供一種資料庫操作方法及裝置,
用以提高事務執行效率並增大事務處理量。
本發明的一個態樣,提供一種資料庫操作方法,包括:根據用戶指示執行目標事務的觸發指令,獲取由所述目標事務封裝成的業務邏輯代碼;根據所述業務邏輯代碼而對所述目標事務進行預測執行,並記錄所述預測執行過程中獲得的所述目標事務的切分條件和涉及的資料範圍;當預測執行成功時,根據所述業務邏輯代碼以及所述預測執行過程中獲得的所述目標事務的切分條件和涉及的資料範圍,控制所述切分條件指向的資料庫實際執行所述目標事務。
本發明的另一個態樣,提供一種資料庫操作裝置,包括:獲取模組,用以根據用戶指示執行目標事務的觸發指令,獲取所述目標事務封裝成的業務邏輯代碼;預測執行模組,用以根據所述業務邏輯代碼而對所述目標事務進行預測執行,並記錄所述預測執行過程中獲得的所述目標事務的切分條件和涉及的資料範圍;控制執行模組,用以當預測執行成功時,根據所述業務邏輯代碼以及所述預測執行過程中獲得的所述目標事務的切分條件和涉及的資料範圍,控制所述切分條件指向的資料庫實際執行所述目標事務。
在本發明中,資料庫操作裝置根據用戶的觸發指令,獲取由目標事務封裝成的業務邏輯代碼,根據業務邏輯代碼而對目標事務進行預測執行,並預測出目標事務的切分條件和涉及的資料範圍,在預測執行成功時,根據業務邏輯代碼和預測執行過程中獲得的目標事務的切分條件和涉及的資料範圍,控制切分條件指向的資料庫實際執行該目標事務。其中,透過預測執行可以獲得目標事務的切分條件,可以確定目標事務應該在哪個或哪些資料庫上執行,即確保資料庫消費的確定性,一方面可以預先確定目標事務是單機事務還是分散式事務,另一方面可以預先進行資料準備,有利於提高事務執行效率,進而增大事務處理量。
10‧‧‧應用伺服器
20‧‧‧資料庫
30‧‧‧資料庫操作裝置
41‧‧‧獲取模組
42‧‧‧預測執行模組
43‧‧‧控制執行模組
為了更清楚地說明本發明實施例中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖是本發明的一些實施例,對於本領域普通技術人員來講,在不付出創造性勞動性的前提下,還可以根據這些附圖而獲得其他的附圖。
圖1為現有技術中資料庫應用系統的部署圖;圖2為本發明一實施例提供的資料庫應用系統的部署圖;圖3為本發明一實施例提供的資料庫操作方法的流程示意圖;圖4為本發明一實施例提供的資料庫操作裝置的結構 示意圖。
為使本發明實施例的目的、技術方案和優點更加清楚,下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本發明的一部分實施例,而不是全部的實施例。基於本發明中的實施例,本領域普通技術人員在沒有作出創造性勞動前提下所獲得的所有其他實施例,都屬於本發明保護的範圍。
圖1為現有技術中資料庫應用系統的部署圖。如圖1所示,該系統包括:應用伺服器10和資料庫20。其中,應用伺服器10可以為一個,也可以為多個。資料庫20可以為一個,也可以為多個。圖1中僅示例性的示出一個應用伺服器10和一個資料庫20。當需要以事務方式而對資料庫20進行訪問時,應用伺服器10執行事務邏輯,依序將事務中的資料庫操作指令作用於資料庫20上。這種事務執行方式的效率較低,事務處理量較低。
針對現有技術存在的缺陷,本發明提供一種新的資料庫應用系統,如圖2所示。該系統在應用伺服器10和資料庫20之間增加資料庫操作裝置30。資料庫操作裝置30用以執行本發明提供的資料庫操作方法,實現一種新的事務執行邏輯,亦即,基於目標事務封裝成的業務邏輯代碼,實現對目標事務的預測執行,再根據目標事務封裝成 的業務邏輯代碼以及預測執行過程中獲得的目標事務的切分條件和涉及的資料範圍,控制資料庫20實際執行目標事務。
其中,本發明透過預測執行可以獲得目標事務的切分條件,可以確定目標事務應該在哪個或哪些資料庫上執行,亦即確保資料庫消費的確定性,一方面可以預先確定事務是單機還是分散式的,另一方面可以預先進行資料準備,因此有利於提高事務執行效率,進而增大事務處理量。另外,本發明將預測執行與業務邏輯代碼相結合,業務邏輯代碼中包含目標事務的執行邏輯,所以資料庫不用擔心共用資料集(亦即,資料庫內的資料)發生變化,只要確保目標事務的切分條件和涉及的資料範圍沒有發生變化,就可以確保事務能夠串列且正確的執行,從而可以降低事務的回滾機率。其中,事務處理量是指單位時間內處理事務的數量。
值得說明的是,資料庫操作裝置30實際上是一種邏輯處理裝置,其可以單獨部署,位於應用伺服器10和資料庫20之間,也可以被部署於應用伺服器10端來實現,或者也可以被部署於資料庫20端來實現。
下面實施例將具體說明本發明技術方案的方法流程。
圖3為本發明一實施例提供的資料庫操作方法的流程示意圖。如圖3所示,該方法包括:
301、根據用戶指示執行目標事務的觸發指令,獲取由該目標事務封裝成的業務邏輯代碼。
302、根據上述業務邏輯代碼而對目標事務進行預測執行,並記錄預測執行過程中獲得的目標事務的切分條件和涉及的資料範圍。
303、當預測執行成功時,根據業務邏輯代碼以及預測執行過程中獲得的目標事務的切分條件和涉及的資料範圍,控制切分條件指向的資料庫實際執行目標事務。
首先說明,為了便於描述,本實施例將用戶需要執行的事務稱為目標事務。目標事務主要包括用以對資料庫進行操作的操作指令,除資料庫操作指令之外還包括一些用來控制目標事務執行狀態的控制指令,例如事務開始指令、事務提交指令、事務回滾指令等。這些指令實際上是由資料庫語言所編寫的語句。根據資料庫語言的不同,這些指令可以是不同語言所編寫的語句。舉例說明,若採用SQL,則上述資料庫操作指令和控制指令實際上是一系列的SQL語句。
在本實施例中,需要將目標事務封裝成業務邏輯代碼,該業務邏輯代碼中封裝有目標事務中的資料庫操作指令以及資料庫操作指令之間的跳轉條件和邏輯等資訊。這意味著在預測執行過程中和實際執行過程中,分別由資料庫操作裝置和資料庫來控制整個目標事務的執行邏輯。
其中,業務邏輯代碼需要被預先部署在資料庫操作裝置及各資料庫上,並預先經過編譯。在實際使用該業務邏輯代碼時,只需提供該業務邏輯代碼的名稱且僅需提供一次即可,與不停傳輸資料庫操作指令相比,有利於減輕網 路流量,節約網路資源。可選地,若業務邏輯代碼還需要輸入參數,則除了提供業務邏輯代碼的名稱之外,還可以提供所需的輸入參數。例如,用戶可以透過觸發指令,向資料庫操作裝置提供業務邏輯代碼的名稱,資料庫操作裝置根據該名稱獲取業務邏輯代碼。
可選地,該業務邏輯代碼可以是一儲存過程(procedure),或者也可以是其他類型的實現方式。若該業務邏輯代碼是一儲存過程,則考慮到儲存過程中的語句都是編譯過的,所以執行速度更快,另外,在使用時,只需傳輸儲存過程的名稱和必要的入參,消耗的網路流量相對較少。
下面以減庫存事務為例,則減庫存事務的SQL代碼如下,括弧內的文字為注釋:begin transaction(開始事務)select * from inventory where itemId=?for update(用商品id來查看目前庫存,並鎖定)if(item.inventory>0) item.inventory--;update inventory set item.inventory=$item.inventory where itemId=?commit;else rollback;(如果目前庫存大於0,則減少、更新商品庫存並提交,否則回滾)
其中,可以將上述減庫存事務封裝成一個 procedure,並把該procedure命名為buySth(long itemId),該procedure返回真/假(true/false)以表示減庫存事務是否成功。其中,該procedure的虛擬碼如下:procedure:boolean buySth(long itemId){ Item item=executeQuery(“select * from inventory where itemId=?for update”);if(item.inventory>0){ item.inventory--;executeUpdate(update inventory set item.inventory=$item.inventory where itemId=?) commit();return true;}else{ rollback();return false;}
由此可見,在上述減庫存事務封裝成的儲存過程中,包括了減庫存事務中的資料庫操作指令,還包括一些儲存過程自身的指令,同時也包括減庫存事務的業務邏輯。
具體上,當用戶需要執行目標事務時,可以發出觸發指令,以指示執行目標事務;資料庫操作裝置根據用戶的觸發指令,獲取由目標事務封裝成的業務邏輯代碼。可選地,該觸發指令可以包括業務邏輯代碼的名稱,或者該觸 發指令與業務邏輯代碼的名稱存在有映射關係,總之資料庫操作裝置可以根據該觸發指令而獲取由目標事務所封裝成的業務邏輯代碼。
在獲取業務邏輯代碼之後,資料庫操作裝置可以根據該業務邏輯代碼而對目標事務進行預測執行,並記錄預測執行過程中獲得目標事務的切分條件和涉及的資料範圍。其中,目標事務的切分條件用以指示目標事務涉及到哪個或哪些資料庫。例如,目標事務的切分條件可由分區鍵(PartitionKey)這一資訊來予以表示,這意味著確定了目標事務預測執行過程中的PartitionKey列表相當於確定了目標事務的切分條件。目標事務涉及的資料範圍用以指示目標事務具體涉及上述切分條件指向的資料庫上的哪個或哪些資料。例如,目標事務涉及的資料可以由資料的主鍵(PrimaryKeys)這一資訊來予以表示,這意味著確定了目標事務預測執行過程中的PrimaryKeys列表相當於確定了目標事務涉及的資料範圍。
其中,資料庫操作裝置根據業務邏輯代碼而對目標事務進行預測執行的過程實際上是:運行業務邏輯代碼中的指令,當該指令為封裝在業務邏輯代碼中的目標事務中的資料庫操作指令時,對資料庫操作指令進行預測執行,以實現對目標事務的預測執行。其中,資料庫操作裝置在對運行到的目標事務中的資料庫操作指令進行預測執行的過程中,可以根據預測執行結果而確定下一個需要執行的資料庫操作指令。
其中,資料庫操作指令對資料庫的操作主要是訪問資料庫中的資料,因此可以模擬資料庫操作指令的資料環境,基於所模擬的資料環境而對資料庫操作指令進行預測執行。基於此,一種對資料庫操作指令進行預測執行的方式可以是:在本地創建的記憶體庫中模擬資料庫操作指令所需的資料環境,基於所模擬的資料環境而對資料庫操作指令進行預測執行。
進一步,一種在本地創建的記憶體庫中模擬資料庫操作指令的資料環境,基於所模擬的資料環境而對資料庫操作指令進行預測執行的實施方式包括: 將獲取到的資料庫操作指令拆分為一個讀指令和一個寫指令,將讀指令運行於真正的資料庫上,亦即,在資料庫中執行該讀指令以獲取讀資料集(ReadSet),將讀資料集存入本地記憶體庫中,以模擬資料庫操作指令所需的資料環境。然後,將寫指令作用於記憶體庫上,以實現對資料庫操作指令的預測執行,亦即,在記憶體庫中執行寫指令以修改讀資料集,例如對讀資料集中的有關資料進行更新或查詢處理等。其中,執行寫指令以修改讀資料集可以產生結果資料集(affectRowInMemdb)。
在上述預測執行過程中,資料庫操作裝置每預測執行一條資料庫操作指令,就在本地記錄該資料庫操作指令讀取的讀資料集中的PrimaryKeys和PartitionKey。可選地,資料庫操作裝置也可以記錄主鍵對應的版本號資訊等整個讀資料集以及結果資料集,但不限於此。
其中,讀資料集中的PrimaryKeys反映了該目標事務涉及的資料範圍,而讀資料集中的PartitionKey反映了目標事務涉及的資料分佈在哪個或哪些資料庫上,即可以作為目標事務的切分條件。
資料庫操作裝置繼續運行業務邏輯代碼,當運行到該業務邏輯代碼中包含的目標事務中的事務提交指令(如上述commit( ))時,則可以返回真(true),其意味著預測執行成功,反之,若運行到該業務邏輯代碼中包含的目標事務中的事務回滾指令(如上述rollback( ))時,則可以返回假(false),其意味著預測執行失敗。
當預測執行成功時,資料庫操作裝置可以根據業務邏輯代碼以及預測執行過程中獲得的目標事務的切分條件和涉及的資料範圍,控制預測執行過程中獲取的目標事務的切分條件所指向的資料庫實際執行目標事務。
在一個具體實施例中,資料庫操作裝置可以向資料庫下發業務邏輯代碼的名稱,以指示資料庫運行業務邏輯代碼以實際執行目標事務,並接收資料庫返回的實際執行過程中獲得的目標事務的切分條件和涉及的資料範圍;若實際執行過程中獲得目標事務的切分條件和涉及的資料範圍均與預測執行中獲得的目標事務的切分條件和涉及的資料範圍相同,則向資料庫下發事務提交指令,以供資料庫提交目標事務;若實際執行過程中獲得目標事務的切分條件和涉及的資料範圍均與預測執行中獲得的目標事務的切分條件和涉及的資料範圍中至少一者不相同,則向資料庫下 發事務回滾指令,以供資料庫回滾目標事務。
在另一具體實施例中,資料庫操作裝置可以向資料庫下發業務邏輯代碼的名稱以及預測執行過程中獲得的目標事務的切分條件和涉及的資料範圍,以指示資料庫運行業務邏輯代碼以實際執行目標事務,並在實際執行過程中獲得目標事務的切分條件和涉及的資料範圍均與預測執行中獲得的目標事務的切分條件和涉及的資料範圍相同時,提交目標事務,或者在實際執行過程中獲得目標事務的切分條件和涉及的資料範圍均與預測執行中獲得的目標事務的切分條件和涉及的資料範圍中至少一者不相同時,回滾目標事務。
可選地,為了減少資料庫操作裝置與資料庫之間的交互次數,節約網路資源,可以將業務邏輯代碼的名稱以及預測執行過程中獲得的目標事務的切分條件和涉及的資料範圍同時(一併)下發給資料庫。
與單純的procedure方案相比,本發明加入了預測執行過程,可以提前獲得目標事務的切分條件和涉及的資料範圍,可以確定目標事務應該在哪個或哪些資料庫上執行。
一方面,基於預測出的目標事務的切分條件,可以預先確定目標事務是單機事務還是分散式事務,若確定目標事務為單機事務,則可以以單機事務處理邏輯控制資料庫實際執行目標事務;若確定目標事務為分散式事務,則可以以分散式事務處理邏輯控制資料庫實際執行目標事務。 由於分散式事務的處理邏輯和單機事務的處理邏輯有所不同,單機事務的處理邏輯相對簡單,例如不涉及讀寫加鎖等問題,所以所消耗的資源也相對較少。基於此,本實施例透過識別目標事務是否為單機事務,在識別為單機事務時採用單機事務的處理邏輯進行處理,有利於提高處理效率,增大事務處理量,節約處理成本。
另一方面,基於預測出的目標事務的切分條件和涉及的資料範圍,可以預先進行資料準備,例如從其他資料庫或本地資料庫的“下層磁片儲存”中提前載入所有跨節點資料,有利於提高事務執行效率,進而增大事務處理量。
另外,本發明提供一種單純的預測執行方案,主要是指由應用伺服器控制目標事務執行邏輯的預測執行方案。在該方案中,在應用伺服器執行目標事務的過程中,依序獲取應用伺服器執行到的目標事務中的資料庫操作指令;對資料庫操作指令進行預測執行,將預測執行結果返回給應用伺服器以供應用伺服器確定下一個需要執行的資料庫操作指令,並在本地記錄資料庫操作指令以及預測執行產生的預測執行資料;當獲取到目標事務中的事務提交指令時,根據本地記錄的資料庫操作指令以及預測執行資料,控制應用伺服器對應的資料庫實際執行目標事務。其中,控制應用伺服器對應的資料庫實際執行目標事務的方式包括:向資料庫下發本地記錄的資料庫操作指令,以指示資料庫執行資料庫操作指令,若實際執行結果與預測執行結果相同,提交所述目標事務;若實際執行結果與預測執行 結果不相同,回滾目標事務。
其中,事務在預測執行過程中是並行的,但在資料庫中實際執行時卻是按照順序串列執行的,因此兩個對相同資料進行操作的事務,在預測執行階段可能是正確的,但到了實際執行階段,無論是哪個先執行,另一個會因為事務會因為資料發生變化導致預測執行結果與實際執行結果不同而發生回滾,回滾機率較高。
舉例說明,假設有兩個事務,事務1和事務2,兩個事務均是讀取key的值,並將其賦值給id;若id=0,則將id+1並作為key的新值。在預測執行過程中,由於並不修改資料庫中的數值,所以兩個事務均能讀取到key=0並賦值給id,且由於id=0,故均能成功執行第二條語句,即將id+1並賦值給key,亦即兩個事務的預測執行結果均為key=1。但在實際執行過程中,兩個事務需要串列執行,假設先事務1,再事務2,則事務1能讀取到id=0,並將id+1並賦值給key,此時key=1;當事務2執行時,讀取key=1並賦值給id,此時id=1,再將id+1並賦值給key,此時key=2,將兩個事務的實際執行結果與預測執行結果進行比較,可以發現事務2的兩個結果不同,故事務2需要回滾。但實際上,若資料庫能夠看到事務2的業務邏輯,當id>0時就不用執行第二條語句,亦即不用執行將id+1並賦值給key的操作,此時獲得的執行結果仍為key=1,這樣事務2就不用回滾。
與單純的預測執行方案相比,本發明加入了 procedure方案,充分發揮procedure方案的優勢,資料庫在實際執行過程中能夠看到並根據目標事務的業務邏輯進行執行,所以資料庫不用擔心共用資料集(即資料庫內的資料)發生變化,只要確保目標事務的切分條件和涉及的資料範圍沒有發生變化,就可以確保事務能夠串列且正確的執行,一定程度上可以解決單純的預測執行方案中出現的回滾現象,有利於降低回滾機率,提高事務執行效率。
下面仍以上面減庫存事務為例,詳細說明本發明技術方案的操作流程。
減庫存事務的SQL代碼如前面所述,由該減庫存事務封裝成的procedure的偽代碼也如前面所述。
在實際執行過程中,資料庫操作裝置(或者也可稱為執行伺服器)根據用戶的觸發指令,以獲取上述procedure,然後運行該procedure。
首先,資料庫操作裝置在本地創建記憶體庫;當資料庫操作裝置運行到select * from inventory where itemId=?for update這條SQL語句時,將這條SQL語句直接在資料庫中進行查找,並在本地記憶體庫中記錄下這次查詢結果(亦即,查詢到的待處理資料,也就是目前庫存量),同時記錄該次查詢涉及的PrimaryKeys和PartitionKey。
值得說明的是,由於該SQL語句是一條查詢語句,所以對該語句進行拆分與否其結果都相同,為了簡化操作,可以不對查詢語句進行拆分。
資料庫操作裝置判斷查詢結果是否大於0,若判斷結果為是,則將目前庫存量減少,並執行更新語句,亦即,update inventory set item.inventory=$item.inventory where itemId=?;若判斷結果為否,則執行回滾語句。
若資料庫操作裝置執行到rollback語句,則清空本地記憶體庫。在這種情況下,因為事務並沒有在資料庫中執行,所以無需資料庫執行回滾操作。
若資料庫操作裝置執行到更新語句,亦即,update inventory set item.inventory=?where itemId=?,則將這條SQL語句拆解為一個讀資料庫指令,即select * from inventory where itemId=?和一個寫資料庫指令,亦即,update inventory set item.inventory=?where itemId=?;接著,將select * from inventory where itemId=?這個語句下發到資料庫中,獲得讀資料集,將讀資料集中的資料寫入本地記憶體庫中;再根據update inventory set item.inventory=?where itemId=?這個語句在本地記憶體庫中進行更新操作,以獲得結果資料集,同時記錄讀結果集中的PrimaryKeys及其對應的版本號資訊,並記錄PartitionKey。
當資料庫操作裝置執行到commit指令後,返回真值,並將之前執行的這一切,在下層資料庫中,帶著事務全部執行一次(這次執行是真實執行)。
資料庫操作裝置執行完上述流程之後,會得到如下執行事務的範本:調用的procedure:boolean buySth(long itemId)
對應的參數:itemId=xxx
對應的PartitionKey的列表=xxx。
進一步,在上述執行procedure的過程中,還可以記錄ReadSet中的PrimaryKeys及其對應的版本號資訊,這有助於在下層資料庫執行之前,提前從其他“下層資料庫”和本地資料庫的“下層磁片儲存”中提前按照記錄的PrimaryKeys載入所有跨節點資料,這種提前載入跨節點資料的方式,可以批量的將慢速設備中的資料載入到記憶體中,對於順序執行的procedure來說起到了至關重要的作用,能夠極大的提升執行效率。
需要說明的是,對於前述的各方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領域技術人員應該知悉,本發明並不受所描述的動作順序的限制,因為依據本發明,某些步驟可以採用其他順序或者同時進行。其次,本領域技術人員也應該知悉,說明書中所描述的實施例均屬於較佳實施例,所涉及的動作和模組並不一定是本發明所必須的。
在上述實施例中,對各個實施例的描述都各有偏重,某個實施例中沒有詳述的部分,可以參見其他實施例的相關描述。
圖4為本發明一實施例提供的資料庫操作裝置的結構示意圖。如圖4所示,該裝置包括:獲取模組41、預測
執行模組42和控制執行模組43。
獲取模組41,用以根據用戶指示執行目標事務的觸發指令,獲取目標事務封裝成的業務邏輯代碼。
預測執行模組42,用以根據獲取模組41獲取的業務邏輯代碼而對目標事務進行預測執行,並記錄預測執行過程中獲得的目標事務的切分條件和涉及的資料範圍。
控制執行模組43,用以當預測執行模組42預測執行成功時,根據業務邏輯代碼以及預測執行過程中獲得的目標事務的切分條件和涉及的資料範圍,控制切分條件指向的資料庫實際執行目標事務。
在一可選實施例中,上述預測執行模組42具體用以:運行業務邏輯代碼中的指令;當指令為封裝在業務邏輯代碼中的目標事務中的資料庫操作指令時,對資料庫操作指令進行預測執行。
進一步,預測執行模組42在對運行到的資料庫操作指令進行預測執行時,具體用以:若資料庫操作指令屬於修改資料庫類指令,則在本地創建的記憶體庫中模擬資料庫操作指令的資料環境,基於模擬的資料環境而對資料庫操作指令進行預測執行;若資料庫操作指令不屬於修改資料庫類指令,則在資料庫中執行資料庫操作指令,以對資料庫操作指令進行預測執行。
更進一步,預測執行模組42當在本地創建的記憶體庫中模擬資料庫操作指令的資料環境,基於模擬的資料環境而對資料庫操作指令進行預測執行時,具體用以:將資料庫操作指令拆分為讀指令和寫指令;在資料庫中執行讀指令以獲取讀資料集,將讀資料集儲存入記憶體庫中以模擬資料庫操作指令的資料環境;在記憶體庫中執行寫指令以修改讀資料集。
在一可選實施例中,控制執行模組43具體可用以:向資料庫下發業務邏輯代碼的名稱,以指示資料庫運行業務邏輯代碼以實際執行目標事務,並接收資料庫返回的實際執行過程中獲得的目標事務的切分條件和涉及的資料範圍;若實際執行過程中獲得目標事務的切分條件和涉及的資料範圍均與預測執行中獲得的目標事務的切分條件和涉及的資料範圍相同,則向資料庫下發事務提交指令,以供資料庫提交目標事務;若實際執行過程中獲得目標事務的切分條件和涉及的資料範圍均與預測執行中獲得的目標事務的切分條件和涉及的資料範圍中至少一者不相同,則向資料庫下發事務回滾指令,以供資料庫回滾目標事務。
在另一可選實施例中,控制執行模組43具體可用以:
向資料庫下發業務邏輯代碼的名稱以及預測執行過程中獲得的目標事務的切分條件和涉及的資料範圍,以指示資料庫運行業務邏輯代碼以實際執行目標事務,並在實際 執行過程中獲得目標事務的切分條件和涉及的資料範圍均與預測執行中獲得的目標事務的切分條件和涉及的資料範圍相同時,提交目標事務,或者在實際執行過程中獲得目標事務的切分條件和涉及的資料範圍均與預測執行中獲得的目標事務的切分條件和涉及的資料範圍中至少一者不相同時,回滾目標事務。
進一步,控制執行模組43具體可用以:
將業務邏輯代碼的名稱以及預測執行過程中獲得的目標事務的切分條件和涉及的資料範圍同時下發給資料庫。
可選地,上述業務邏輯代碼可以為一儲存過程,但不限於此。該儲存過程可以使用各類語言來實現,例如可以是mysql或Java等語言來實現。
本實施例提供的資料庫操作裝置,實際上是一種邏輯處理裝置,其可以單獨部署,位於應用伺服器和資料庫之間,也可以被部署於應用伺服器端來實現,或者也可以被部署於資料庫端來實現。
本實施例提供的資料庫操作裝置,根據用戶的觸發指令,獲取由目標事務封裝成的業務邏輯代碼,根據業務邏輯代碼而對目標事務進行預測執行,並預測出目標事務的切分條件和涉及的資料範圍,在預測執行成功時,根據業務邏輯代碼和預測執行過程中獲得的目標事務的切分條件和涉及的資料範圍,控制切分條件指向的資料庫實際執行該目標事務。其中,透過預測執行可以獲得目標事務的切分條件,可以確定目標事務應該在哪個或哪些資料庫上執 行,亦即確保資料庫消費的確定性,一方面可以預先確定目標事務是單機事務還是分散式事務,另一方面可以預先進行資料準備,有利於提高事務執行效率,進而增大事務處理量。
另外,本實施例的資料庫操作裝置,實現了預測執行與procedure的結合,與單純的預測執行方案相比,能夠充分發揮procedure方案的優勢,資料庫在實際執行過程中能夠看到並根據目標事務的業務邏輯進行執行,所以資料庫不用擔心共用資料集(亦即,資料庫內的資料)發生變化,只要確保目標事務的切分條件和涉及的資料範圍沒有發生變化,就可以確保事務能夠串列且正確的執行,一定程度上可以解決單純的預測執行方案中出現的回滾現象,有利於降低回滾機率,提高事務執行效率。
所屬領域的技術人員可以清楚地瞭解到,為了描述的方便和簡潔,上述描述的系統,裝置和單元的具體操作過程,可以參考前述方法實施例中的對應過程,在此不再贅述。
在本發明所提供的幾個實施例中,應該理解到,所揭露的系統,裝置和方法,可以透過其他的方式來實現。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現時可以有另外的劃分方式,例如多個單元或元件可以相結合或者可以被集成到另一個系統,或一些特徵可以忽略,或不執行。另一方面,所顯示或討論的相互之間的耦合或直接 耦合或通信連接可以是透過一些介面、裝置或單元的間接耦合或通信連接,可以是電性,機械或其他的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,亦即,可以位於一個地方,或者也可以分佈到多個網路單元上。可以根據實際的需要而選擇其中的部分或者全部單元來實現本實施例方案的目的。
另外,在本發明各個實施例中的各功能單元可以被集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元被集成在一個單元中。上述集成的單元既可以採用硬體的形式來實現,也可以採用硬體加軟體功能單元的形式來實現。
上述以軟體功能單元的形式實現的集成的單元,可以被儲存在一個電腦可讀取儲存媒體中。上述軟體功能單元被儲存在一個儲存媒體中,包括若干指令用以使得一台電腦設備(可以是個人電腦,伺服器,或者網路設備等)或處理器(processor)執行本發明各個實施例所述方法的部分步驟。而前述的儲存媒體包括:U碟、移動硬碟、唯讀記憶體(Read-Only Memory,ROM)、隨機存取記憶體(Random Access Memory,RAM)、磁碟或者光碟等各種可以儲存程式碼的媒體。
最後應說明的是:以上實施例僅用以說明本發明的技術方案,而非對其限制;儘管參照前述實施例對本發明進行了詳細的說明,本領域的普通技術人員應當理解:其依 然可以對前述各實施例所記載的技術方案進行修改,或者對其中部分技術特徵進行等同替換;而這些修改或者替換,並不使相應技術方案的本質脫離本發明之各實施例技術方案的精神和範圍。
Claims (16)
- 一種資料庫操作方法,其特徵在於,包括:資料庫操作裝置根據用戶指示執行目標事務的觸發指令,獲取由該目標事務封裝成的業務邏輯代碼;該資料庫操作裝置根據該業務邏輯代碼而對該目標事務進行預測執行,並記錄該預測執行過程中獲得的該目標事務的切分條件和涉及的資料範圍;以及當預測執行成功時,該資料庫操作裝置根據該業務邏輯代碼以及該預測執行過程中獲得的該目標事務的切分條件和涉及的資料範圍,控制該切分條件指向的資料庫實際執行該目標事務,其中,該資料庫運行該業務邏輯代碼以實際執行該目標事務,並根據該資料庫實際執行過程中獲得的該目標事務的切分條件和涉及的資料範圍與該預測執行過程中獲得的該目標事務的切分條件和涉及的資料範圍,提交或者回滾該目標事務。
- 如請求項1所述的方法,其中,該根據該業務邏輯代碼而對該目標事務進行預測執行,包括:運行該業務邏輯代碼中的指令;以及當該指令為封裝在該業務邏輯代碼中的該目標事務中的資料庫操作指令時,對該資料庫操作指令進行預測執行。
- 如請求項2所述的方法,其中,該對該資料庫操作指令進行預測執行,包括:若該資料庫操作指令屬於修改資料庫類指令,則在本地創建的記憶體庫中模擬該資料庫操作指令的資料環境,基於該模擬的資料環境而對該資料庫操作指令進行預測執行;以及若該資料庫操作指令不屬於修改資料庫類指令,則在該資料庫中執行該資料庫操作指令,以對該資料庫操作指令進行預測執行。
- 如請求項3所述的方法,其中,該在本地創建的記憶體庫中模擬該資料庫操作指令的資料環境,基於該模擬的資料環境而對該資料庫操作指令進行預測執行,包括:將該資料庫操作指令拆分為讀指令和寫指令;在該資料庫中執行該讀指令以獲取讀資料集,將該讀資料集儲存入該記憶體庫中以模擬該資料庫操作指令的資料環境;以及在該記憶體庫中執行該寫指令以修改該讀資料集。
- 如請求項1至4中任一項所述的方法,其中,該根據該業務邏輯代碼以及該預測執行過程中獲得的該目標事務的切分條件和涉及的資料範圍,控制該切分條件指向的資料庫實際執行該目標事務,包括: 向該資料庫下發該業務邏輯代碼的名稱,以指示該資料庫運行該業務邏輯代碼以實際執行該目標事務,並接收該資料庫返回的該實際執行過程中獲得的該目標事務的切分條件和涉及的資料範圍;若該實際執行過程中獲得該目標事務的切分條件和涉及的資料範圍均與該預測執行中獲得的該目標事務的切分條件和涉及的資料範圍相同,則向該資料庫下發事務提交指令,以供該資料庫提交該目標事務;以及若該實際執行過程中獲得該目標事務的切分條件和涉及的資料範圍與該預測執行中獲得的該目標事務的切分條件和涉及的資料範圍中至少一者不相同,則向該資料庫下發事務回滾指令,以供該資料庫回滾該目標事務。
- 如請求項1至4中任一項所述的方法,其中,該根據該業務邏輯代碼以及該預測執行過程中獲得的該目標事務的切分條件和涉及的資料範圍,控制該切分條件指向的資料庫實際執行該目標事務,包括:向該資料庫下發該業務邏輯代碼的名稱以及該預測執行過程中獲得的該目標事務的切分條件和涉及的資料範圍,以指示該資料庫運行該業務邏輯代碼以實際執行該目標事務,並在該實際執行過程中獲得該目標事務的切分條件和涉及的資料範圍均與該預測執行中獲得的該目標事務的切分條件和涉及的資料範圍相同時,提交該目標事務,或者在該實際執行過程中獲得該目標事務的切分條件和涉 及的資料範圍與該預測執行中獲得的該目標事務的切分條件和涉及的資料範圍中至少一者不相同時,回滾該目標事務。
- 如請求項6所述的方法,其中,該向該資料庫下發該業務邏輯代碼的名稱以及該預測執行過程中獲得的該目標事務的切分條件和涉及的資料範圍,包括:將該業務邏輯代碼的名稱以及該預測執行過程中獲得的該目標事務的切分條件和涉及的資料範圍同時下發給該資料庫。
- 如請求項1至4中任一項所述的方法,其中,該業務邏輯代碼為一儲存過程。
- 一種資料庫操作裝置,其特徵在於,包括:獲取模組,用以根據用戶指示執行目標事務的觸發指令,獲取該目標事務封裝成的業務邏輯代碼;預測執行模組,用以根據該業務邏輯代碼而對該目標事務進行預測執行,並記錄該預測執行過程中獲得的該目標事務的切分條件和涉及的資料範圍;以及控制執行模組,用以當預測執行成功時,根據該業務邏輯代碼以及該預測執行過程中獲得的該目標事務的切分條件和涉及的資料範圍,控制該切分條件指向的資料庫實際執行該目標事務, 其中,該資料庫運行該業務邏輯代碼以實際執行該目標事務,並根據該資料庫實際執行過程中獲得的該目標事務的切分條件和涉及的資料範圍與該預測執行過程中獲得的該目標事務的切分條件和涉及的資料範圍,提交或者回滾該目標事務。
- 如請求項9所述的裝置,其中,該預測執行模組具體用以:運行該業務邏輯代碼中的指令;以及當該指令為封裝在該業務邏輯代碼中的該目標事務中的資料庫操作指令時,對該資料庫操作指令進行預測執行。
- 如請求項10所述的裝置,其中,該預測執行模組具體用以:若該資料庫操作指令屬於修改資料庫類指令,則在本地創建的記憶體庫中模擬該資料庫操作指令的資料環境,基於該模擬的資料環境而對該資料庫操作指令進行預測執行;以及若該資料庫操作指令不屬於修改資料庫類指令,則在該資料庫中執行該資料庫操作指令,以對該資料庫操作指令進行預測執行。
- 如請求項11所述的裝置,其中,該預測執行模組具 體用以:將該資料庫操作指令拆分為讀指令和寫指令;在該資料庫中執行該讀指令以獲取讀資料集,將該讀資料集儲存入該記憶體庫中以模擬該資料庫操作指令的資料環境;以及在該記憶體庫中執行該寫指令以修改該讀資料集。
- 如請求項9至12中任一項所述的裝置,其中,該控制執行模組具體用以:向該資料庫下發該業務邏輯代碼的名稱,以指示該資料庫運行該業務邏輯代碼以實際執行該目標事務,並接收該資料庫返回的該實際執行過程中獲得的該目標事務的切分條件和涉及的資料範圍;若該實際執行過程中獲得該目標事務的切分條件和涉及的資料範圍均與該預測執行中獲得的該目標事務的切分條件和涉及的資料範圍相同,則向該資料庫下發事務提交指令,以供該資料庫提交該目標事務;以及若該實際執行過程中獲得該目標事務的切分條件和涉及的資料範圍與該預測執行中獲得的該目標事務的切分條件和涉及的資料範圍中至少一者不相同,則向該資料庫下發事務回滾指令,以供該資料庫回滾該目標事務。
- 如請求項9至12中任一項所述的裝置,其中,該控制執行模組具體用以: 向該資料庫下發業務邏輯代碼的名稱以及該預測執行過程中獲得的該目標事務的切分條件和涉及的資料範圍,以指示該資料庫運行該業務邏輯代碼以實際執行該目標事務,並在該實際執行過程中獲得該目標事務的切分條件和涉及的資料範圍均與該預測執行中獲得的該目標事務的切分條件和涉及的資料範圍相同時,提交該目標事務,或者在該實際執行過程中獲得該目標事務的切分條件和涉及的資料範圍與該預測執行中獲得的該目標事務的切分條件和涉及的資料範圍中至少一者不相同時,回滾該目標事務。
- 如請求項14所述的裝置,其中,該控制執行模組具體用以:將該業務邏輯代碼的名稱以及該預測執行過程中獲得的該目標事務的切分條件和涉及的資料範圍同時下發給該資料庫。
- 如請求項9至12中任一項所述的裝置,其中,該業務邏輯代碼為一儲存過程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
TW106102691A TWI790991B (zh) | 2017-01-24 | 2017-01-24 | 資料庫操作方法及裝置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
TW106102691A TWI790991B (zh) | 2017-01-24 | 2017-01-24 | 資料庫操作方法及裝置 |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201828116A TW201828116A (zh) | 2018-08-01 |
TWI790991B true TWI790991B (zh) | 2023-02-01 |
Family
ID=63960249
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW106102691A TWI790991B (zh) | 2017-01-24 | 2017-01-24 | 資料庫操作方法及裝置 |
Country Status (1)
Country | Link |
---|---|
TW (1) | TWI790991B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040078559A1 (en) * | 2002-10-22 | 2004-04-22 | Kabushiki Kaisha Toshiba | Speculative execution control device for computer instructions and method for the same |
US20070198750A1 (en) * | 2005-12-13 | 2007-08-23 | Moilanen Jacob L | Input/output workload fingerprinting for input/output schedulers |
US20120215751A1 (en) * | 2008-01-21 | 2012-08-23 | International Business Machines Corporation | Transaction prediction modeling method |
TW201346524A (zh) * | 2011-12-30 | 2013-11-16 | Intel Corp | 可組配式減少的指令集核心之技術 |
US20150378739A1 (en) * | 2014-06-27 | 2015-12-31 | International Business Machines Corporation | Accurate tracking of transactional read and write sets with speculation |
-
2017
- 2017-01-24 TW TW106102691A patent/TWI790991B/zh active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040078559A1 (en) * | 2002-10-22 | 2004-04-22 | Kabushiki Kaisha Toshiba | Speculative execution control device for computer instructions and method for the same |
US20070198750A1 (en) * | 2005-12-13 | 2007-08-23 | Moilanen Jacob L | Input/output workload fingerprinting for input/output schedulers |
US20120215751A1 (en) * | 2008-01-21 | 2012-08-23 | International Business Machines Corporation | Transaction prediction modeling method |
TW201346524A (zh) * | 2011-12-30 | 2013-11-16 | Intel Corp | 可組配式減少的指令集核心之技術 |
US20150378739A1 (en) * | 2014-06-27 | 2015-12-31 | International Business Machines Corporation | Accurate tracking of transactional read and write sets with speculation |
Also Published As
Publication number | Publication date |
---|---|
TW201828116A (zh) | 2018-08-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107391653B (zh) | 一种分布式NewSQL数据库系统及图片数据储存方法 | |
US11175953B2 (en) | Determining an allocation of computing resources for a job | |
WO2017107810A1 (zh) | 数据库操作方法及装置 | |
JP6877435B2 (ja) | データベース動作方法及び装置 | |
WO2017041639A1 (zh) | 数据库操作方法及装置 | |
WO2020248511A1 (zh) | 一种基于运行时模型实现对终端应用控制的方法 | |
TWI774643B (zh) | 資料庫操作方法及裝置 | |
US20140108874A1 (en) | Detecting memory hazards in parallel computing | |
CN112970011A (zh) | 记录查询优化中的谱系 | |
WO2017041637A1 (zh) | 数据库操作方法及装置 | |
CN109656868A (zh) | 一种cpu与gpu之间的内存数据转移方法 | |
TWI790991B (zh) | 資料庫操作方法及裝置 | |
US20080189305A1 (en) | Predictive Database Pool Preparation | |
TWI725110B (zh) | 資料庫操作方法及裝置 | |
TWI735512B (zh) | 資料庫操作方法及裝置 | |
TWI805544B (zh) | 資料庫操作方法及裝置 | |
US20160004747A1 (en) | Join query execution method and device, and storage medium | |
US20230376485A1 (en) | Distributed query plan generation | |
Sowmiyasree et al. | Improving the Performance of Hadoop Framework Using Optimization Process in the Information Management |