TWI725110B - 資料庫操作方法及裝置 - Google Patents
資料庫操作方法及裝置 Download PDFInfo
- Publication number
- TWI725110B TWI725110B TW106101941A TW106101941A TWI725110B TW I725110 B TWI725110 B TW I725110B TW 106101941 A TW106101941 A TW 106101941A TW 106101941 A TW106101941 A TW 106101941A TW I725110 B TWI725110 B TW I725110B
- Authority
- TW
- Taiwan
- Prior art keywords
- database
- database operation
- instruction
- execution
- transaction
- Prior art date
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本發明提供一種資料庫操作方法及裝置。方法包括:在應用伺服器執行目標交易的過程中,依次獲取應用伺服器執行到的目標交易中的資料庫操作指令;對資料庫操作指令進行預測執行,將預測執行結果返回給應用伺服器以供應用伺服器確定下一個需要執行的資料庫操作指令,並在本地記錄資料庫操作指令以及在資料庫操作指令屬於修改資料庫類指令時記錄預測執行產生的預測執行資料;當獲取到目標交易中的交易提交指令時,根據本地記錄的資料庫操作指令以及預測執行資料,控制應用伺服器對應的資料庫實際執行目標交易。本發明可以提高交易執行效率。
Description
本發明關於資料庫技術領域,尤其關於一種資料庫操作方法及裝置。
資料庫交易(Database Transaction),是指作為單個邏輯工作單元執行的一系列操作,要麼完全地執行,要麼完全地不執行。一個交易由一系列資料庫操作指令構成,例如結構化查詢語言(Structured Query Language,SQL)語句,這些資料庫操作指令之間存在分割條件以及跳轉等邏輯,意味著在一次執行過程中該交易中可能有部分資料庫操作指令被跳過不執行。但在現有技術中,由於無法預先獲知交易中需要執行的資料庫操作指令,因此只能按照執行邏輯邊執行邊判斷,依次執行交易中的語句,以實現對資料庫的操作。這種交易執行方式效率較低,尤其是在交易設置讀已提交隔離級別的情況下,其執行效率會更低,交易輸送量較低。
本發明的多個方面提供一種資料庫操作方法及裝置,用以提高交易執行效率並增大交易輸送量。
本發明的一方面,提供一種資料庫操作方法,包括:在應用伺服器執行目標交易的過程中,依次獲取所述應用伺服器執行到的所述目標交易中的資料庫操作指令;對所述資料庫操作指令進行預測執行,將預測執行結果返回給所述應用伺服器以供所述應用伺服器確定下一個需要執行的資料庫操作指令,並在本地記錄所述資料庫操作指令以及在所述資料庫操作指令屬於修改資料庫類指令時記錄所述預測執行產生的預測執行資料;當獲取到所述目標交易中的交易提交指令時,根據本地記錄的所述資料庫操作指令以及所述預測執行資料,控制所述應用伺服器對應的資料庫實際執行所述目標交易。
本發明的另一方面,提供一種資料庫操作裝置,包括:獲取模組,用於在應用伺服器執行目標交易的過程中,依次獲取所述應用伺服器執行到的所述目標交易中的資料庫操作指令;預測執行模組,用於對所述資料庫操作指令進行預測執行,將預測執行結果返回給所述應用伺服器以供所述應用伺服器確定下一個需要執行的資料庫操作指令,並在本地記錄所述資料庫操作指令以及在所述資料庫操作指令屬於修改資料庫類指令時記錄所述預測執行產生的預測執行資料;
控制執行模組,用於當獲取到所述目標交易中的交易提交指令時,根據本地記錄的所述資料庫操作指令以及所述預測執行資料,控制所述應用伺服器對應的資料庫實際執行所述目標交易。
在本發明中,資料庫操作裝置與應用伺服器相互配合,在應用伺服器執行目標交易的過程加入預測執行過程,預先獲得並記錄目標交易需要執行的全部資料庫操作指令,並僅針對屬於修改資料庫類指令的資料庫操作指令記錄預測執行產生的預測執行資料以適應於讀已提交隔離級別,為真實執行交易提供了條件,之後根據記錄的資料庫操作指令以及預測執行資料,控制應用伺服器對應的資料庫實際執行該目標交易,有利於提高執行效率,進而增大交易輸送量。
10:應用伺服器
20:資料庫
30:資料庫操作裝置
301、302、303:方法步驟
41:獲取模組
42:預測執行模組
43:控制執行模組
為了更清楚地說明本發明實施例中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發明的一些實施例,對於本領域普通技術人員來講,在不付出創造性勞動性的前提下,還可以根據這些附圖獲得其他的附圖。
圖1為現有技術中資料庫應用系統的部署圖;圖2為本發明一實施例提供的資料庫應用系統的部署圖;圖3為本發明一實施例提供的資料庫操作方法的流程
示意圖;圖4為本發明一實施例提供的資料庫操作裝置的結構示意圖。
為使本發明實施例的目的、技術方案和優點更加清楚,下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本發明一部分實施例,而不是全部的實施例。基於本發明中的實施例,本領域普通技術人員在沒有作出創造性勞動前提下所獲得的所有其他實施例,都屬於本發明保護的範圍。
圖1為現有技術中資料庫應用系統的部署圖。如圖1所示,該系統包括:應用伺服器10和資料庫20。其中,資料庫20可以為一個,也可以為多個。圖1中僅示例性的示出一個資料庫20。當需要以交易方式對資料庫20進行訪問時,應用伺服器10執行交易邏輯,依次將交易中的資料庫操作指令作用於資料庫20上。由於無法預先獲知交易中需要執行的資料庫操作指令,導致交易執行效率較低,尤其是在配置讀已提交隔離級別的情況下,其執行效率會更低,交易輸送量較低。
針對現有技術存在的缺陷,本發明提供一種新的資料庫應用系統,如圖2所示。該系統在應用伺服器10和資料庫20之間增加資料庫操作裝置30。資料庫操作裝置30
用以執行本發明提供的資料庫操作方法,在讀已提交這一隔離級別下實現一種新的交易執行邏輯,即先對交易進行預測執行,提前獲得該交易中需要執行的資料庫操作指令,實現執行路徑的預測,並且結合讀已提交這一隔離級別僅僅針對屬於修改資料庫類指令的資料庫操作指令記錄對其進行預測執行所產生的預測執行資料,進而基於預測執行得到的資料庫操作指令以及預測執行資料在資料庫20上實際執行交易,有利於提高交易執行效率,增大交易輸送量。交易輸送量是指單位時間內處理交易的數量。
值得說明的是,資料庫操作裝置30實際上是一種邏輯處理裝置,其可以單獨部署,位於應用伺服器10和資料庫20之間,也可以部署於應用伺服器10一端實現,或者也可以部署於資料庫20一端實現。
下面實施例將具體說明本發明技術方案的方法流程。
圖3為本發明一實施例提供的資料庫操作方法的流程示意圖。如圖3所示,該方法包括:
301、在應用伺服器執行目標交易的過程中,依次獲取應用伺服器執行到的目標交易中的資料庫操作指令。
302、對資料庫操作指令進行預測執行,將預測執行結果返回給應用伺服器以供應用伺服器確定下一個需要執行的資料庫操作指令,並在本地記錄資料庫操作指令以及在資料庫操作指令屬於修改資料庫類指令時記錄預測執行產生的預測執行資料。
303、當獲取到目標交易中的交易提交指令時,根據
本地記錄的資料庫操作指令以及預測執行資料,控制應用伺服器對應的資料庫實際執行目標交易。
首先說明,為便於描述,本實施例將應用伺服器需要執行的交易稱為目標交易。目標交易主要包括用於對資料庫進行操作的操作指令,除資料庫操作指令之外還包括一些用於控制目標交易執行狀態的控制指令,例如交易開始指令、交易提交指令、交易轉返指令等。這些指令實際上是由資料庫語言編寫的語句。根據資料庫語言的不同,這些指令可以是不同語言編寫的語句。舉例說明,若採用SQL,則上述資料庫操作指令和控制指令實際上是一系列的SQL語句。
本實施例提供的方法適用於對隔離級別為讀已提交的資料庫進行操作。其中,有些資料庫預設是讀已提交這一隔離級別,例如,Oracle資料庫預設是讀已提交這一隔離級別的,有些資料庫預設不是讀已提交這一隔離級別,例如MySQL資料庫預設是可重複讀這一隔離級別。基於此,在執行本實施例提供的方法之前,可以確定資料庫的隔離級別是否是讀已提交,若不是,則需要預先配置資料庫為讀已提交這一隔離級別。例如,可以在應用伺服器執行目標交易之前,配置資料庫為讀已提交這一隔離級別。
在資料庫的隔離級別為讀已提交的前提下,可以執行本實施例提供的方法以在資料庫中執行目標交易。具體流程如下:
應用伺服器控制整個目標交易的執行邏輯,可以按照
現有方式執行目標交易。資料庫操作裝置在應用伺服器執行目標交易的過程中,依次獲取應用伺服器執行到的目標交易中的資料庫操作指令。
在一可選實施方式中,應用伺服器按照現有方式向資料庫發送資料庫操作指令,以實現對資料庫的訪問。資料庫操作裝置可以對應用伺服器與資料庫之間的通信進行監控,以攔截應用伺服器發往資料庫的資料庫操作指令。
在另一可選實施方式中,對應用伺服器的處理邏輯進行稍微修改,將原來向資料庫發送資料庫操作指令的處理邏輯改為向資料庫操作裝置發送。基於此,資料庫操作裝置可以接收應用伺服器主動下發的資料庫操作指令。
在此說明,若目標交易是顯式交易,則目標交易中的首個指令是交易開始指令,如開始交易(begin transaction),基於此,資料庫操作裝置在獲取應用伺服器執行到的資料庫操作指令之前,可以攔截應用伺服器發往資料庫的目標交易中的交易開始指令,根據該交易開始指令,獲知需要執行目標交易。或者,資料庫操作裝置在獲取應用伺服器執行到的資料庫操作指令之前,可以接收應用伺服器主動下發的目標交易中的交易開始指令,根據該交易開始指令,獲知需要執行目標交易。若目標交易是隱式交易,則目標交易的首個指令就是資料庫操作指令,不包括獲取交易開始指令的步驟。
資料庫操作裝置在獲取應用伺服器執行到的資料庫操作指令後,對獲取到的資料庫操作指令進行預測執行,將
預測執行結果返回給應用伺服器,以供應用伺服器確定下一個需要執行的資料庫操作指令。其中,預測執行結果決定著目標交易的執行路徑,這裡的執行路徑是指資料庫操作指令之間的跳轉邏輯。透過將預測執行結果返回給應用伺服器,從而達到由應用伺服器控制整個目標交易的執行邏輯的目的。
另外,資料庫操作裝置還需要在本地記錄所獲取到的資料庫操作指令,以及在該資料庫操作指令屬於修改資料庫類指令時記錄對該資料庫操作指令進行預測執行產生的預測執行資料。所述修改資料庫類指令是指對資料庫有修改的資料庫操作指令,例如以update、insert等開頭的指令;一般以select開頭的指令不屬於修改資料庫類指令。所述預測執行資料主要是指對資料庫操作指令進行預測執行過程中的一些資料。
例如,資料庫操作裝置可以在本地建立記憶體庫,將所獲取到的資料庫操作指令以及預測執行資料存入記憶體庫中。進一步,若預測執行資料不包括預測執行結果,則也可以將預測執行結果存入記憶體庫中。
從本質而言,讀已提交隔離級別只保證寫入多個資料是原子的,不在讀取的時候加鎖,這樣可以提升系統的並行,提高交易執行效率。為了在預測執行這一核心思想的基礎上實現對讀已提交這一隔離級別的模擬,本實施例僅僅針對屬於修改資料庫類指令的資料庫操作指令,記錄其預測執行產生的預測執行資料,卻不記錄不屬於修改資料
庫類指令的資料庫操作指令對應的預測執行資料。由此可見,在實現讀已提交這一隔離級別的情況下,所記錄的資料量相對較少,這樣在後續基於本地記錄的資料庫操作指令和預測執行資料在資料庫中真實執行目標交易的過程中,所需處理的資料量相對較少,有利於進一步提高執行效率和性能,增大交易輸送量。
其中,資料庫操作指令對資料庫的操作主要是訪問資料庫中的資料,則可以模擬資料庫操作指令的資料環境,基於所模擬的資料環境對資料庫操作指令進行預測執行。進一步,考慮到不屬於修改資料庫類指令的資料庫操作指令不會引起資料庫的變化,因此可以直接在資料庫中對該資料庫操作指令進行預測執行,這樣可以節約模擬資料環境的操作,實現相對簡單,有利於節約資源,提高執行效率。但是,對於屬於修改資料庫類指令的資料庫操作指令,由於其會引起資料庫的變化(主要是指資料庫中的資料被改變),因此需要模擬資料環境,在所模擬的資料環境中進行預測執行。
基於上述分析,一種對資料庫操作指令進行預測執行的方式可以是:對獲取到的資料庫操作指令的類別進行識別;若資料庫操作指令屬於修改資料庫類指令,則在本地建立的記憶體庫中模擬資料庫操作指令的資料環境,基於所模擬的資料環境對資料庫操作指令進行預測執行;若資料庫操作指令不屬於修改資料庫類指令,在資料
庫中執行該資料庫操作指令,以對該資料庫操作指令進行預測執行。
進一步,一種在本地建立的記憶體庫中模擬資料庫操作指令的資料環境,基於所模擬的資料環境對資料庫操作指令進行預測執行的實施方式包括:將獲取到的資料庫操作指令拆分為一個讀指令和一個寫指令,將讀指令運行於真正的資料庫上,即在資料庫中執行該讀指令以獲取讀資料集(ReadSet),將讀資料集存入本地記憶體庫中,以模擬資料庫操作指令所需的資料環境。然後,將寫指令作用於記憶體庫上,以實現對資料庫操作指令的預測執行,即在記憶體庫中執行寫指令以修改讀資料集,例如對讀資料集中的有關資料進行更新或查詢處理等。其中,執行寫指令以修改讀資料集可以產生結果資料集(affectRowInMemdb),該結果資料集包括預測執行結果。
在上述預測執行過程中,若資料庫操作指令屬於修改資料庫類指令,則資料庫操作裝置可以在本地記錄讀指令所讀取的讀資料集以及執行寫指令產生的結果資料集。由此可見,所述預測執行資料可以包括讀資料集和結果資料集,或者也可以包括讀資料集和結果資料集中的部分資料,例如能夠對在資料庫中實際執行目標交易產生有益效果的一些資料,例如一些數值的各種索引,例如一級索引、二級索引、主鍵值等。
當資料庫操作裝置獲取到目標交易中的交易提交指令
(即應用伺服器執行到交易提交指令)時,則可以根據本地記錄的資料庫操作指令以及預測執行資料,控制應用伺服器對應的資料庫實際執行目標交易。
上述根據本地記錄的資料庫操作指令以及預測執行資料,控制應用伺服器對應的資料庫實際執行目標交易的一種可選實施方式包括:資料庫操作裝置向資料庫下發本地記錄的所述資料庫操作指令,以指示資料庫執行資料庫操作指令,並接收資料庫返回的資料庫操作指令的實際執行結果;然後,將資料庫操作指令的實際執行結果與預測執行結果進行比較,若實際執行結果與預測執行結果相同,向資料庫下發交易提交指令,以供資料庫提交該目標交易;若實際執行結果與預測執行結果不相同,向資料庫下發交易轉返指令,以供資料庫轉返該目標交易。
在上述實施方式中,考慮到交易的原子性,透過將實際執行結果與預測執行結果進行比較,可以避免交易執行過程出錯,有利於提高交易執行的成功機率。
進一步,在現有技術中,由於無法預先知道交易需要執行的全部資料庫操作指令,所以只能按照交易的執行邏輯依次執行資料庫操作指令,這會導致應用伺服器與資料庫之間的頻繁交互,這在遠端應用場景中將會消耗大量網路資源。但在本實施例中,透過預測執行過程已經預先獲得目標交易需要執行的全部資料庫操作指令,即本地記錄的資料庫操作指令,因此在向資料庫下發本地記錄的資料
庫操作指令,以指示資料庫執行資料庫操作指令的過程中,可以將本地記錄的資料庫操作指令同時(或者一併)下發到資料庫,有利於節約網路資源。另外,對於一些平行的資料庫操作指令,資料庫還可以平行作業,有利於進一步提高交易執行效率,增大交易輸送量。
進一步,還可以將本地記錄的所有資料庫操作指令連同本地記錄的預測執行資料一併下發給資料庫。
進一步,在一種根據本地記錄的資料庫操作指令以及預測執行資料,控制應用伺服器對應的資料庫實際執行目標交易的可選實施方式中,資料庫操作裝置可以根據本地記錄的資料庫操作指令,判斷目標交易是否為單機交易;若判斷結果為是,則根據本地記錄的資料庫操作指令以及預測執行資料,以單機交易處理邏輯控制資料庫實際執行目標交易;若判斷結果為否,則根據本地記錄的資料庫操作指令以及預測執行資料,以分散式交易處理邏輯控制資料庫實際執行目標交易。
其中,基於預測執行過程中獲得的資料庫操作指令可以識別出目標交易是單機交易還是分散式交易。例如,可以判斷本地記錄的資料庫操作指令的操作物件是否作用於同一物理設備上,若判斷結果為是,則可以確定該目標交易為單機交易;若判斷結果為否,則可以確定該目標交易為分散式交易。
由於分散式交易的處理邏輯和單機交易的處理邏輯有所不同,單機交易的處理邏輯相對簡單,例如不關於讀寫
加鎖等問題,所以所消耗的資源也相對較少。基於此,本實施例透過識別目標交易是否為單機交易,在識別為單機交易時採用單機交易的處理邏輯進行處理,而不是像現有技術那樣統一採用分散式交易處理邏輯進行處理,有利於提高處理效率,節約處理成本。
在一可選實施方式中,若資料庫操作裝置獲取到目標交易中的交易轉返指令(即應用伺服器執行到交易轉返指令)時,可以刪除本地記錄的資料庫操作指令以及預測執行資料,例如可以直接清空本地記憶體庫,實現轉返操作。在該情況下,由於目標交易並未在資料庫中真正執行,所以資料庫無需執行轉返操作,可見,在交易轉返這種情況下,採用本實施例方法也可以提高交易執行效率。
由上述可見,在本實施例提供的方法中,資料庫操作裝置與應用伺服器相互配合,在應用伺服器執行目標交易的過程加入預測執行過程,在預測執行過程中,可以提前獲得目標交易的執行路徑,即真正需要執行的資料庫操作指令,並僅針對屬於修改資料庫類指令的資料庫操作指令記錄預測執行產生的預測執行資料以適應於讀已提交隔離級別,為真實執行交易提供了條件,之後在根據記錄的資料庫操作指令以及預測執行資料實際執行該目標交易時,例如基於預測執行資料可以提前獲取有關資料資訊並且可以減少指令之間的跳轉等,因此可以提高執行效率,增大交易輸送量。
下面以減庫存交易為例,詳細說明本發明技術方案的
工作流程。其中,資料庫的隔離級別為讀已提交這一隔離級別。
在實際執行過程中,應用伺服器負責該減庫存交易的整個邏輯,資料庫操作裝置(或者也可稱為執行伺服器)只會獲取應用伺服器執行到的開始交易,需要執行的SQL語句,以及提交/轉返指令。
首先,開始交易後,資料庫操作裝置在本地建立記憶體庫;
當資料庫操作裝置獲取到select * from inventory where itemId=? for update這條SQL語句時,識別出這條SQL語句不會修改資料庫,因此將這條SQL語句直接作用在實際資料庫中,即在資料庫中執行該條SQL語句以獲得查詢結果,即讀資料集,將全部查詢結果返回給應
用伺服器,以供應用伺服器確定下一個需要執行的SQL語句,並在本地記憶體庫中記錄這條SQL語句。由於是讀已隔離級別,故不需要記錄任何與執行該條SQL語句有關的資料。
應用伺服器收到資料庫操作裝置返回的查詢結果後,判斷查詢結果中目前庫存量是否大於0,若判斷結果為是,則將目前庫存量減少,並執行更新語句,即update inventory set item.inventory=$item.inventory where itemId=?;若判斷結果為否,則執行rollback語句。
第一種情況,假設應用伺服器執行了rollback語句,則資料庫操作裝置會獲取到rollback語句。一旦資料庫儲存裝置獲取到rollback語句,則清空本地記憶體庫,主要是指清空之前記錄的select * from inventory where itemId=? for update這條SQL語句。在這種情況下,因為交易並沒有在資料庫中執行,所以無需資料庫執行轉返操作。
第二種情況,假設應用伺服器執行了update inventory set item.inventory=$item.inventory where itemId=?這條語句,則資料庫操作裝置會獲取到update inventory set item.inventory=$item.inventory where itemId=?這條語句。則資料庫操作裝置獲取到update inventory set item.inventory=? where itemId=?這條SQL語句時,識別出該SQL語句會修改資料庫,於是將這條SQL語句拆解為一個讀指令,即select * from inventory where itemId=?和一個寫指令,即update inventory set
item.inventory=? where itemId=?;接著,將select * from inventory where itemId=?這個語句下發到資料庫中,獲得讀資料集,將讀資料集中的資料寫入本地記憶體庫中;其中,讀資料集中包括主鍵列表(itemId)和該主鍵對應的版本號資訊(version)。然後,根據update inventory set item.inventory=? where itemId=?這個語句在本地記憶體庫中進行更新操作,以獲得結果資料集,並將結果資料集返回給應用伺服器。該結果資料集可以是類似修改了幾條記錄這樣的修改記錄資訊,例如,affectRow=1表示修改了一條記錄;或者,結果資料集也可以是記錄修改詳細資訊的修改詳情資訊。其中,結果資料集和讀資料集構成預測執行資料。
應用伺服器此時執行commit指令。
當資料庫操作裝置獲取到commit指令後,基於本地記憶體庫中的SQL語句以及預測執行資料,在資料庫中執行該減庫存交易,這次交易執行過程是真實執行的。例如,本地記錄的SQL語句以及預測執行資料如下所示:
較佳的,資料庫操作裝置可以一次性將本地記憶體庫中的SQL語句全部提交到資料庫中,資料庫基於此進行
執行,有利於節約傳輸SQL語句所消耗的網路資源。
這次真實執行也會返回執行結果,可以將預測執行結果與實際執行結果進行比較,例如可以先比較兩個結果中的itemId和version,然後再比較兩個結果中的affectRow;如果比較結果為相同,則可以在資料庫中提交這次交易,而如果比較結果為不相同,則認為提交是失敗的,由於在這種情況下,交易本身其實一直都沒有真正的在資料庫中執行提交,所以可以簡單地轉返整個請求,讓應用服務器重新提交即可。
其中,經過上述預測執行,已經獲得了所有的需要執行的SQL語句,以及相應的預測執行資料,例如全部分割條件,數值的索引等,而這些資料足以讓我們提前對交易是否是單機交易做出判斷。基於此,可以採用相應的交易處理邏輯進行處理,有利於節約資源。
需要說明的是,對於前述的各方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領域技術人員應該知悉,本發明並不受所描述的動作順序的限制,因為依據本發明,某些步驟可以採用其他順序或者同時進行。其次,本領域技術人員也應該知悉,說明書中所描述的實施例均屬於較佳實施例,所關於的動作和模組並不一定是本發明所必須的。
在上述實施例中,對各個實施例的描述都各有側重,某個實施例中沒有詳述的部分,可以參見其他實施例的相關描述。
圖4為本發明一實施例提供的資料庫操作裝置的結構示意圖。如圖4所示,該裝置包括:獲取模組41、預測執行模組42和控制執行模組43。
獲取模組41,用於在應用伺服器執行目標交易的過程中,依次獲取應用伺服器執行到的目標交易中的資料庫操作指令。
預測執行模組42,用於對資料庫操作指令進行預測執行,將預測執行結果返回給應用伺服器以供應用伺服器確定下一個需要執行的資料庫操作指令,並在本地記錄資料庫操作指令以及在資料庫操作指令屬於修改資料庫類指令時記錄預測執行產生的預測執行資料。
控制執行模組43,用於當獲取到目標交易中的交易提交指令時,根據本地記錄的資料庫操作指令以及預測執行資料,控制應用伺服器對應的資料庫實際執行目標交易。
在一可選實施方式中,該資料庫操作裝置還包括:配置模組,用於在應用伺服器執行目標交易之前,配置資料庫為讀已提交隔離級別。
在一可選實施方式中,獲取模組41具體可用於:攔截應用伺服器發往資料庫的資料庫操作指令;或者,接收應用伺服器主動下發的資料庫操作指令。
在一可選實施方式中,獲取模組41還用於:在獲取應用伺服器執行到的目標交易中的資料庫操作指令之前,攔截應用伺服器發往資料庫的目標交易中的交易開始指
令;或者,接收應用伺服器主動下發的目標交易中的交易開始指令。
在一可選實施方式中,預測執行模組42具體可用於:若獲取模組41獲取到的資料庫操作指令屬於修改資料庫類指令,在本地建立的記憶體庫中模擬資料庫操作指令的資料環境,基於模擬的資料環境對資料庫操作指令進行預測執行;若獲取模組41獲取到的資料庫操作指令不屬於修改資料庫類指令,在資料庫中執行資料庫操作指令,以對資料庫操作指令進行預測執行。
進一步,在獲取模組41獲取到的資料庫操作指令屬於修改資料庫類指令的情況下,預測執行模組42在執行在本地建立的記憶體庫中模擬資料庫操作指令的資料環境,基於模擬的資料環境對資料庫操作指令進行預測執行的操作時,具體用於:將資料庫操作指令拆分為讀指令和寫指令;在資料庫中執行讀指令以獲取讀資料集,將讀資料集存入記憶體庫中以模擬資料庫操作指令的資料環境;在記憶體庫中執行寫指令以修改讀資料集。
在一可選實施方式中,控制執行模組43具體可用於:向資料庫下發本地記錄的資料庫操作指令,以指示資料庫執行資料庫操作指令,並接收資料庫返回的資料庫操
作指令的實際執行結果;若實際執行結果與預測執行結果相同,向資料庫下發交易提交指令,以供資料庫提交目標交易;若實際執行結果與預測執行結果不相同,向資料庫下發交易轉返指令,以供資料庫轉返目標交易。考慮到交易的原子性,控制執行模組43透過將實際執行結果與預測執行結果進行比較,可以避免交易執行過程出錯,有利於提高交易執行的成功機率。
進一步,控制執行模組43在向資料庫下發本地記錄的資料庫操作指令時,具體可用於:將本地記錄的資料庫操作指令同時下發給資料庫,有利於節約網路資源。
進一步,控制執行模組43可以將本地記錄的所有資料庫操作指令連同本地記錄的預測執行資料一併下發給資料庫,有利於節約網路資源。
在一可選實施方式中,控制執行模組43具體用於:根據本地記錄的資料庫操作指令,判斷目標交易是否為單機交易;若判斷結果為是,則根據本地記錄的資料庫操作指令以及預測執行資料,以單機交易處理邏輯控制資料庫實際執行目標交易;若判斷結果為否,則根據本地記錄的資料庫操作指令以及預測執行資料,以分散式交易處理邏輯控制資料庫實際執行目標交易。由於分散式交易的處理邏輯和單機交易的處理邏輯有所不同,單機交易的處理邏輯相對簡單,例
如不關於讀寫加鎖等問題,所以所消耗的資源也相對較少。基於此,控制執行模組43透過識別目標交易是否為單機交易,在識別為單機交易時採用單機交易的處理邏輯進行處理,有利於提高處理效率,節約處理成本。
在一可選實施方式中,預測執行模組42還用於:在獲取到目標交易中的交易轉返指令時,刪除本地記錄的資料庫操作指令以及預測執行資料。
本實施例提供的資料庫操作裝置,其可以單獨部署,位於應用伺服器和資料庫之間,也可以部署於應用伺服器一端實現,或者也可以部署於資料庫一端實現。
本實施例提供的資料庫操作裝置,與應用伺服器相互配合,在應用伺服器執行目標交易的過程加入預測執行過程,預先獲得並記錄目標交易需要執行的全部資料庫操作指令,並僅針對屬於修改資料庫類指令的資料庫操作指令記錄預測執行產生的預測執行資料以適應於讀已提交隔離級別,為真實執行交易提供了條件,之後根據記錄的資料庫操作指令以及預測執行資料,控制應用伺服器對應的資料庫實際執行該目標交易,有利於提高執行效率,增大交易輸送量。
所屬領域的技術人員可以清楚地瞭解到,為描述的方便和簡潔,上述描述的系統,裝置和單元的具體工作過程,可以參考前述方法實施例中的對應過程,在此不再贅述。
在本發明所提供的幾個實施例中,應該理解到,所揭
露的系統,裝置和方法,可以透過其它的方式實現。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現時可以有另外的劃分方式,例如多個單元或元件可以結合或者可以整合到另一個系統,或一些特徵可以忽略,或不執行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是透過一些介面,裝置或單元的間接耦合或通信連接,可以是電性,機械或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位於一個地方,或者也可以分佈到多個網路單元上。可以根據實際的需要選擇其中的部分或者全部單元來實現本實施例方案的目的。
另外,在本發明各個實施例中的各功能單元可以整合在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元整合在一個單元中。上述整合的單元既可以採用硬體的形式實現,也可以採用硬體加軟體功能單元的形式實現。
上述以軟體功能單元的形式實現的整合的單元,可以儲存在一個電腦可讀取儲存媒體中。上述軟體功能單元儲存在一個儲存媒體中,包括若干指令用以使得一台電腦設備(可以是個人電腦,伺服器,或者網路設備等)或處理器(processor)執行本發明各個實施例所述方法的部分步驟。而前述的儲存媒體包括:U碟、移動硬碟、唯讀記憶
體(Read-Only Memory,ROM)、隨機存取記憶體(Random Access Memory,RAM)、磁碟或者光碟等各種可以儲存程式碼的媒體。
最後應說明的是:以上實施例僅用以說明本發明的技術方案,而非對其限制;儘管參照前述實施例對本發明進行了詳細的說明,本領域的普通技術人員應當理解:其依然可以對前述各實施例所記載的技術方案進行修改,或者對其中部分技術特徵進行等同替換;而這些修改或者替換,並不使相應技術方案的本質脫離本發明各實施例技術方案的精神和範圍。
Claims (12)
- 一種資料庫操作方法,其特徵在於,包括:在應用伺服器執行目標交易的過程中,依次獲取該應用伺服器執行到的該目標交易中的資料庫操作指令;對該資料庫操作指令進行預測執行,將預測執行結果返回給該應用伺服器以供該應用伺服器確定下一個需要執行的資料庫操作指令,並在本地記錄該資料庫操作指令以及在該資料庫操作指令屬於修改資料庫類指令時記錄該預測執行產生的預測執行資料,該預測執行結果決定該目標交易的執行路徑,該執行路徑是該資料庫操作指令之間的跳轉邏輯;及當獲取到該目標交易中的交易提交指令時,根據本地記錄的該資料庫操作指令以及該預測執行資料,控制該應用伺服器對應的資料庫實際執行該目標交易。
- 根據申請專利範圍第1項所述的方法,其中,還包括:在該應用伺服器執行該目標交易之前,配置該資料庫為讀已提交隔離級別。
- 根據申請專利範圍第1項所述的方法,其中,該對該資料庫操作指令進行預測執行,包括:若該資料庫操作指令屬於修改資料庫類指令,在本地建立的記憶體庫中模擬該資料庫操作指令的資料環境,基於該模擬的資料環境對該資料庫操作指令進行預測執行;及 若該資料庫操作指令不屬於修改資料庫類指令,在該資料庫中執行該資料庫操作指令,以對該資料庫操作指令進行預測執行。
- 根據申請專利範圍第3項所述的方法,其中,該在本地建立的記憶體庫中模擬該資料庫操作指令所需的資料環境,基於該模擬的資料環境對該資料庫操作指令進行預測執行,包括:將該資料庫操作指令拆分為讀指令和寫指令;在該資料庫中執行該讀指令以獲取讀資料集,將該讀資料集存入該記憶體庫中以模擬該資料庫操作指令的資料環境;及在該記憶體庫中執行該寫指令以修改該讀資料集。
- 根據申請專利範圍第1至4項中任一項所述的方法,其中,該根據本地記錄的該資料庫操作指令以及該預測執行資料,控制該應用伺服器對應的資料庫實際執行目標交易,包括:向該資料庫下發本地記錄的該資料庫操作指令,以指示該資料庫執行該資料庫操作指令,並接收該資料庫返回的該資料庫操作指令的實際執行結果;若該實際執行結果與該預測執行結果相同,向該資料庫下發該交易提交指令,以供該資料庫提交該目標交易;及若該實際執行結果與該預測執行結果不相同,向該資料庫下發交易復原指令,以供該資料庫回滾該目標交易。
- 根據申請專利範圍第5項所述的方法,其中,該向該資料庫下發本地記錄的該資料庫操作指令,包括:將本地記錄的該資料庫操作指令同時下發給該資料庫。
- 一種資料庫操作裝置,其特徵在於,包括:獲取模組,用於在應用伺服器執行目標交易的過程中,依次獲取該應用伺服器執行到的該目標交易中的資料庫操作指令;預測執行模組,用於對該資料庫操作指令進行預測執行,將預測執行結果返回給該應用伺服器以供該應用伺服器確定下一個需要執行的資料庫操作指令,並在本地記錄該資料庫操作指令以及在該資料庫操作指令屬於修改資料庫類指令時記錄該預測執行產生的預測執行資料,該預測執行結果決定該目標交易的執行路徑,該執行路徑是該資料庫操作指令之間的跳轉邏輯;及控制執行模組,用於當獲取到該目標交易中的交易提交指令時,根據本地記錄的該資料庫操作指令以及該預測執行資料,控制該應用伺服器對應的資料庫實際執行該目標交易。
- 根據申請專利範圍第7項所述的裝置,其中,還包括:配置模組,用於在該應用伺服器執行該目標交易之前,配置該資料庫為讀已提交隔離級別。
- 根據申請專利範圍第7項所述的裝置,其中,該 預測執行模組具體用於:若該資料庫操作指令屬於修改資料庫類指令,在本地建立的記憶體庫中模擬該資料庫操作指令的資料環境,基於該模擬的資料環境對該資料庫操作指令進行預測執行;及若該資料庫操作指令不屬於修改資料庫類指令,在該資料庫中執行該資料庫操作指令,以對該資料庫操作指令進行預測執行。
- 根據申請專利範圍第9項所述的裝置,其中,該預測執行模組具體用於:將該資料庫操作指令拆分為讀指令和寫指令;在該資料庫中執行該讀指令以獲取讀資料集,將該讀資料集存入該記憶體庫中以模擬該資料庫操作指令的資料環境;及在該記憶體庫中執行該寫指令以修改該讀資料集。
- 根據申請專利範圍第7至10項中任一項所述的裝置,其中,該控制執行模組具體用於:向該資料庫下發本地記錄的該資料庫操作指令,以指示該資料庫執行該資料庫操作指令,並接收該資料庫返回的該資料庫操作指令的實際執行結果;若該實際執行結果與該預測執行結果相同,向該資料庫下發該交易提交指令,以供該資料庫提交該目標交易;及若該實際執行結果與該預測執行結果不相同,向該資 料庫下發交易復原指令,以供該資料庫回滾該目標交易。
- 根據申請專利範圍第11項所述的裝置,其中,該控制執行模組具體用於:將本地記錄的該資料庫操作指令同時下發給該資料庫。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
TW106101941A TWI725110B (zh) | 2017-01-19 | 2017-01-19 | 資料庫操作方法及裝置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
TW106101941A TWI725110B (zh) | 2017-01-19 | 2017-01-19 | 資料庫操作方法及裝置 |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201828164A TW201828164A (zh) | 2018-08-01 |
TWI725110B true TWI725110B (zh) | 2021-04-21 |
Family
ID=63960188
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW106101941A TWI725110B (zh) | 2017-01-19 | 2017-01-19 | 資料庫操作方法及裝置 |
Country Status (1)
Country | Link |
---|---|
TW (1) | TWI725110B (zh) |
Citations (17)
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 |
US20060004998A1 (en) * | 2004-06-30 | 2006-01-05 | Intel Corporation | Method and apparatus for speculative execution of uncontended lock instructions |
CN1829964A (zh) * | 2003-08-02 | 2006-09-06 | 国际商业机器公司 | 用于处理消息队列的方法、设备和计算机程序 |
US20070198750A1 (en) * | 2005-12-13 | 2007-08-23 | Moilanen Jacob L | Input/output workload fingerprinting for input/output schedulers |
US20090187534A1 (en) * | 2008-01-21 | 2009-07-23 | International Business Machines Corporation | Transaction prediction modeling method |
US20090254774A1 (en) * | 2007-08-27 | 2009-10-08 | Kickfire, Inc. | Methods and systems for run-time scheduling database operations that are executed in hardware |
CN101587447A (zh) * | 2008-05-23 | 2009-11-25 | 国际商业机器公司 | 支持事务存储的系统及基于预测的事务执行方法 |
CN101625699A (zh) * | 2009-07-28 | 2010-01-13 | 大连新中连软件集团有限公司 | 基于业务组件化的应用软件进行业务控制的方法和系统 |
CN102203779A (zh) * | 2011-05-03 | 2011-09-28 | 华为技术有限公司 | 更新数据的方法和控制装置 |
TW201142632A (en) * | 2010-01-18 | 2011-12-01 | Microsoft Corp | Database engine throttling |
US20140214880A1 (en) * | 2013-01-29 | 2014-07-31 | Nec Laboratories America, Inc. | System and methods for Predicting Query Execution Time for Concurrent and Dynamic Database Workloads |
US20150149725A1 (en) * | 2013-11-25 | 2015-05-28 | Ashish Mathur | Multi-threaded system for performing atomic binary translations |
CN105204923A (zh) * | 2014-06-27 | 2015-12-30 | 国际商业机器公司 | 用于资源预配置的方法和装置 |
US20150378739A1 (en) * | 2014-06-27 | 2015-12-31 | International Business Machines Corporation | Accurate tracking of transactional read and write sets with speculation |
US20160070573A1 (en) * | 2014-09-10 | 2016-03-10 | International Business Machines Corporation | Condition code generation |
TW201614551A (en) * | 2014-06-02 | 2016-04-16 | Yottamine Analytics Llc | Digital event profile filters based on cost sensitive support vector machine for fraud detection, risk rating or electronic transaction classification |
US20160378815A1 (en) * | 2015-06-26 | 2016-12-29 | Vmware, Inc. | Abortable transactions using versioned tuple cache |
-
2017
- 2017-01-19 TW TW106101941A patent/TWI725110B/zh active
Patent Citations (17)
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 |
CN1829964A (zh) * | 2003-08-02 | 2006-09-06 | 国际商业机器公司 | 用于处理消息队列的方法、设备和计算机程序 |
US20060004998A1 (en) * | 2004-06-30 | 2006-01-05 | Intel Corporation | Method and apparatus for speculative execution of uncontended lock instructions |
US20070198750A1 (en) * | 2005-12-13 | 2007-08-23 | Moilanen Jacob L | Input/output workload fingerprinting for input/output schedulers |
US20090254774A1 (en) * | 2007-08-27 | 2009-10-08 | Kickfire, Inc. | Methods and systems for run-time scheduling database operations that are executed in hardware |
US20090187534A1 (en) * | 2008-01-21 | 2009-07-23 | International Business Machines Corporation | Transaction prediction modeling method |
CN101587447A (zh) * | 2008-05-23 | 2009-11-25 | 国际商业机器公司 | 支持事务存储的系统及基于预测的事务执行方法 |
CN101625699A (zh) * | 2009-07-28 | 2010-01-13 | 大连新中连软件集团有限公司 | 基于业务组件化的应用软件进行业务控制的方法和系统 |
TW201142632A (en) * | 2010-01-18 | 2011-12-01 | Microsoft Corp | Database engine throttling |
CN102203779A (zh) * | 2011-05-03 | 2011-09-28 | 华为技术有限公司 | 更新数据的方法和控制装置 |
US20140214880A1 (en) * | 2013-01-29 | 2014-07-31 | Nec Laboratories America, Inc. | System and methods for Predicting Query Execution Time for Concurrent and Dynamic Database Workloads |
US20150149725A1 (en) * | 2013-11-25 | 2015-05-28 | Ashish Mathur | Multi-threaded system for performing atomic binary translations |
TW201614551A (en) * | 2014-06-02 | 2016-04-16 | Yottamine Analytics Llc | Digital event profile filters based on cost sensitive support vector machine for fraud detection, risk rating or electronic transaction classification |
CN105204923A (zh) * | 2014-06-27 | 2015-12-30 | 国际商业机器公司 | 用于资源预配置的方法和装置 |
US20150378739A1 (en) * | 2014-06-27 | 2015-12-31 | International Business Machines Corporation | Accurate tracking of transactional read and write sets with speculation |
US20160070573A1 (en) * | 2014-09-10 | 2016-03-10 | International Business Machines Corporation | Condition code generation |
US20160378815A1 (en) * | 2015-06-26 | 2016-12-29 | Vmware, Inc. | Abortable transactions using versioned tuple cache |
Non-Patent Citations (5)
Also Published As
Publication number | Publication date |
---|---|
TW201828164A (zh) | 2018-08-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3446242B1 (en) | Query plan generation and execution in a relational database management system with a temporal-relational database | |
US11397722B2 (en) | Applications of automated discovery of template patterns based on received requests | |
Olston et al. | Automatic optimization of parallel dataflow programs | |
WO2017041639A1 (zh) | 数据库操作方法及装置 | |
CN106471489B (zh) | 管理具有灵活模式的数据 | |
WO2017107811A1 (zh) | 数据库操作方法及装置 | |
TWI774643B (zh) | 資料庫操作方法及裝置 | |
EP3396542B1 (en) | Database operating method and device | |
Zhang et al. | CDBTune+: An efficient deep reinforcement learning-based automatic cloud database tuning system | |
CN116108057B (zh) | 一种分布式数据库访问方法、装置、设备及存储介质 | |
WO2017041637A1 (zh) | 数据库操作方法及装置 | |
CN112970011A (zh) | 记录查询优化中的谱系 | |
US11934927B2 (en) | Handling system-characteristics drift in machine learning applications | |
TWI725110B (zh) | 資料庫操作方法及裝置 | |
TWI735512B (zh) | 資料庫操作方法及裝置 | |
TWI805544B (zh) | 資料庫操作方法及裝置 | |
TWI790991B (zh) | 資料庫操作方法及裝置 | |
Laptev et al. | Smarter Warehouse | |
Munir | Storage format selection and optimization for materialized intermediate results in data-intensive flows | |
US20230418819A1 (en) | Query set optimization in a data analytics pipeline | |
CN118012849A (zh) | 一种智能数据迁移方法及系统 | |
KR20240044232A (ko) | 키-밸류 데이터베이스 기반 데이터 고속 처리 장치 및 방법 | |
KR20240044230A (ko) | 블록체인 기반 데이터 고속 처리 장치 및 방법 |