專利名稱:數(shù)據(jù)庫服務器端結果集緩存的數(shù)據(jù)同步方法及裝置的制作方法
技術領域:
本發(fā)明涉及數(shù)據(jù)庫技術領域,尤其涉及一種數(shù)據(jù)庫服務器端結果集緩存的數(shù)據(jù)同步方法及裝置。
背景技術:
目前,在數(shù)據(jù)庫實際應用環(huán)境中,服務器端為快速響應用戶端的查詢請求,提高用戶體驗,產(chǎn)生了結果集緩存技術,也就是在服務器端的共享緩存中的一塊區(qū)域存放某一條查詢語句執(zhí)行所得到的結果,從而便于下一次用戶端再有相同語句查詢時能夠直接獲取并返回之前緩存的結果集。舉例來說,在網(wǎng)頁服務中相同的網(wǎng)頁會被重復的請求,這樣只要查詢一次,將結果緩存,下次相同查詢請求時,便可直接返回結果,該結果集緩存技術有效解決了只讀和讀操·作占多數(shù)的數(shù)據(jù)的緩存問題。但現(xiàn)有技術方案中,結果集緩存技術也存在著數(shù)據(jù)一致性要求,即當數(shù)據(jù)庫服務器端的數(shù)據(jù)表被修改時,所有涉及此表的結果集直接失效,那么再有相同語句進行查詢時,就需要執(zhí)行傳統(tǒng)流程,然后將獲得的最新結果保存到結果集緩存中,并沒有實現(xiàn)結果集緩存的增量更新,使得結果集的更新時間較長,降低了用戶體驗。
發(fā)明內(nèi)容
本發(fā)明實施例提供了一種數(shù)據(jù)庫服務器端結果集緩存的數(shù)據(jù)同步方法及裝置,能夠有效保證數(shù)據(jù)的一致性,使結果集在相關表被修改時也能繼續(xù)使用,從而大大縮短了修改表時結果集的更新時間,進而提高了用戶體驗。本發(fā)明實施例提供了一種數(shù)據(jù)庫服務器端結果集緩存的數(shù)據(jù)同步方法,所述方法包括在修改數(shù)據(jù)庫服務器端的數(shù)據(jù)表時,記錄被修改的數(shù)據(jù)表的行記錄標識,并在結果集緩存的結果集頭部字段中存儲該數(shù)據(jù)表的表標識,且在所述結果集頭部字段中存儲有查詢語句的類別,所述查詢語句的類別包括單一操作的簡單語句和多操作的復雜語句;當所述結果集緩存中的某一查詢語句被執(zhí)行,且該查詢語句為簡單語句時,在所記錄的被修改的所有行記錄上重新執(zhí)行查詢并得到查詢結果;根據(jù)修改數(shù)據(jù)表的不同操作將所得到的查詢結果與所述結果集緩存中緩存的結果合并,冋步更新結果集緩存。本發(fā)明實施例還提供了一種數(shù)據(jù)庫服務器端結果集緩存的數(shù)據(jù)同步裝置,所述裝置包括修改記錄單元,用于在修改數(shù)據(jù)庫服務器端的數(shù)據(jù)表時,記錄被修改的數(shù)據(jù)表的行記錄標識;頭部字段設置單元,用于在結果集緩存的結果集頭部字段中存儲所修改數(shù)據(jù)表的表標識,且在所述結果集頭部字段中存儲有查詢語句的類別,所述查詢語句的類別包括單一操作的簡單語句和多操作的復雜語句;記錄查詢單元,用于當所述結果集緩存中的某一查詢語句被執(zhí)行,且該查詢語句為簡單語句時,在所記錄的被修改的所有行記錄上重新執(zhí)行查詢并得到查詢結果;同步更新單元,用于根據(jù)修改數(shù)據(jù)表的不同操作將記錄查詢單元所得到的查詢結果與所述結果集緩存中緩存的結果合并,同步更新結果集緩存。由上述所提供的技術方案可以看出,所述方法在修改數(shù)據(jù)庫服務器端的數(shù)據(jù)表時,記錄被修改的數(shù)據(jù)表的行記錄標識,并在結果集緩存的結果集頭部字段中存儲該數(shù)據(jù)表的表標識;當所述結果集緩存中的某一查詢語句被執(zhí)行,且該查詢語句為簡單語句時,在所記錄的被修改的所有行記錄上重新執(zhí)行查詢并得到查詢結果;根據(jù)修改數(shù)據(jù)表的不同操作將所得到的查詢結果與所述結果集緩存中緩存的結果合并,同步更新結果集緩存。通過上述方法實施就能夠有效保證數(shù)據(jù)的一致性,使結果集在相關表被修改時也能繼續(xù)使用,從而大大縮短了修改表時結果集的更新時間,進而提高了用戶體驗。
·圖I為本發(fā)明實施例所提供數(shù)據(jù)庫服務器端結果集緩存的數(shù)據(jù)同步方法流程示意圖;圖2為本發(fā)明所舉具體實例中結果集緩存的結構示意圖;圖3為本發(fā)明實施例所提供數(shù)據(jù)同步裝置的結構示意圖。
具體實施例方式本發(fā)明實施方式提供了一種數(shù)據(jù)庫服務器端結果集緩存的數(shù)據(jù)同步方法及裝置,該方法通過記錄修改數(shù)據(jù)表時被修改的行記錄的Oid(即表內(nèi)每行數(shù)據(jù)的唯一性標識,通過此標識可找到行數(shù)據(jù)),在數(shù)據(jù)表修改后,如果查詢語句在結果集緩存中存在,則在所記錄的被修改的行記錄上重新做查詢,避免全表的查詢,并在得到結果后,將其與之前緩存的結果集進行合并,從而避免修改表時,將對應結果集直接作廢,達到增量更新緩存的效果,該方法有效保證數(shù)據(jù)的一致性,使結果集在相關表被修改時也能繼續(xù)使用,從而大大縮短了修改表時結果集的更新時間,進而提高了用戶體驗。為更好的描述本發(fā)明實施方式,現(xiàn)結合附圖對本發(fā)明的具體實施方式
進行說明,如圖I所示為本發(fā)明實施例所提供數(shù)據(jù)庫服務器端結果集緩存的數(shù)據(jù)同步方法流程示意圖,所述方法包括步驟11 :在修改數(shù)據(jù)庫服務器端的數(shù)據(jù)表時,記錄被修改的數(shù)據(jù)表的行記錄標識,并在結果集緩存的結果集頭部字段中存儲該數(shù)據(jù)表的表標識。在該步驟中,在修改數(shù)據(jù)庫服務器端的數(shù)據(jù)表時,可以通過在所述結果集緩存中設置記錄表來記錄被修改的數(shù)據(jù)表的行記錄標識,并將該數(shù)據(jù)表的表標識存儲在結果集緩存的結果集頭部子段中。步驟12 :當所述結果集緩存中的某一查詢語句被執(zhí)行,判斷該查詢語句是否為簡單語句。在該步驟中,當結果集緩存中的某一查詢語句被執(zhí)行,對該查詢語句的類別進行判斷,具體實現(xiàn)中,在結果集頭部字段中還可以存儲有查詢語句的類別,所述查詢語句的類別包括單一操作的簡單語句和多操作的復雜語句。具體來說,通過對該查詢語句的操作過程進行判斷,若是單一操作的語句,則判斷為簡單語句,并可進一步將結果集頭部字段中所存儲的查詢語句類別設定為簡單語句;若是多操作混合的語句,則判斷為復雜語句,并可進一步將結果集頭部字段中所存儲的查詢語句類別設定為復雜語句。另外,在結果集頭部字段中還可以設置數(shù)據(jù)一致性標志位,當所述結果集緩存中的某一查詢語句被執(zhí)行時,還可以進一步根據(jù)在所述結果集頭部字段中設置的數(shù)據(jù)一致性標志位判斷是否需要進行后繼操作,若所述數(shù)據(jù)一致性標志位為一致,則不需要進行后繼步驟的操作,若所述數(shù)據(jù)一致性標志位為不一致,則繼續(xù)后繼步驟操作。步驟13 :若判斷是簡單語句,則在所記錄的被修改的所有行記錄上重新執(zhí)行查詢并得到查詢結果。在該步驟中,在所記錄的被修改的所有行記錄上重新執(zhí)行查詢并得到查詢結果的·過程具體為根據(jù)所存儲的數(shù)據(jù)表的表標識查找得到該數(shù)據(jù)表的所有行記錄標識,并根據(jù)該所有行記錄標識在被修改的所有行記錄上重新執(zhí)行查詢并得到查詢結果。步驟14 :根據(jù)修改數(shù)據(jù)表的不同操作將所得到的查詢結果與所述結果集緩存中緩存的結果合并,同步更新結果集緩存。在該步驟中,修改數(shù)據(jù)表的不同操作包括插入行記錄,修改行記錄或刪除行記錄,針對不同情況將所得到的查詢結果與所述結果集緩存中緩存的結果合并,具體來說若所述修改數(shù)據(jù)表的操作為插入行記錄,則將查詢結果與所述結果集緩存中緩存的結果合并;若所述修改數(shù)據(jù)表的操作為修改行記錄,則將查詢結果與所述結果集緩存中緩存的結果合并,并將原行記錄刪除;若所述修改數(shù)據(jù)表的操作為刪除行記錄,則在所述結果集緩存中刪除該行記錄。通過上述的操作就實現(xiàn)了同步更新結果集緩存,且縮短了修改表時結果集的更新時間,提聞了用戶體驗。另外,當進行上述步驟12的操作,判斷該查詢語句不是簡單語句,也即為復雜語句時,則進行步驟15的操作,即該復雜語句的緩存失效,重新通過所述數(shù)據(jù)庫服務器端的數(shù)據(jù)表來查詢并得到查詢結果,并更新結果集緩存。具體實現(xiàn)中,通過將查詢語句進行分類,對于包含sortby、groupby、limit、聚集函數(shù)等多操作的復雜語句,在修改表發(fā)生時,直接將其結果集作廢,能夠避免因數(shù)據(jù)同步造成的得不償失的情況,從而保證數(shù)據(jù)同步策略的有效性。另外,所述結果集緩存的結果集頭部中還可進一步包括用于唯一標記結果集緩存的字段,以及用于記錄結果集緩存被訪問次數(shù)的字段,以便更有效的對結果集緩存進行管理。下面以具體的實例來對上述數(shù)據(jù)同步方法進行詳細說明,如圖2所示為本發(fā)明所舉具體實例中結果集緩存的結構示意圖,圖2中結果集緩存包括索引、結果集、記錄表三部分,本實例主要涉及結果集和記錄表,結果集分為頭部和結果數(shù)據(jù)兩部分。圖2中結果集頭部共包括五個字段字段I存放查詢語句用于唯一標記此結果集;字段2存放所修改數(shù)據(jù)表的表標識,表明結果集來自于哪些表;字段3存放數(shù)據(jù)一致性標志位,用于表示該結果集是否與數(shù)據(jù)表的數(shù)據(jù)一致;字段4存放此結果集被訪問的次數(shù),用于緩存管理策略;字段5存放查詢語句的類別,包括操作單一的簡單語句和多操作的復雜語句,該類別可以用I表示簡單語句,2表示復雜語句。圖2中記錄表存放的是修改數(shù)據(jù)庫服務器端的數(shù)據(jù)表時,被修改的行記錄的標識oid,這里只有被修改的數(shù)據(jù)表標識出現(xiàn)在結果集頭部的字段2里面的時候,才記錄它被修改的行記錄的oid到該記錄表中,具體實現(xiàn)中記錄表存放的不限于行記錄的oid,其他可唯一標志行記錄的標識也是可以的。通過上述操作,當數(shù)據(jù)表被修改時,將被修改行的Oid記錄到記錄表,并修改結果集頭部的相應字段,并在下一條相同的查詢語句執(zhí)行時執(zhí)行如下操作Stepl :首先讀取結果集頭部,若字段3 —致性標志位為true,則直接返回結果集給用戶,不進行后繼操作;若字段3為fale,則進行后繼操作。進一步判斷字段5的查詢語句類別,若查詢語句為類別I簡單語句,則進入St印2 ;·若查詢語句為類別2復雜語句,則說明結果集失效,重新通過所述數(shù)據(jù)庫服務器端的數(shù)據(jù)表來查詢并得到查詢結果,并更新結果集緩存。Step2 :根據(jù)字段2中的數(shù)據(jù)表標識查找在記錄表中所記錄的被修改行記錄的oid ;Step3 :對被修改的所有行記錄重新執(zhí)行查詢語句,得到查詢結果;Step4:將所得到的查詢結果與之前結果集緩存的查詢結果合并,更新結果集并設置相應字段,并將最新結果返回給用戶。這里,所述的合并過程具體為對于被插入的行記錄,滿足查詢條件則與緩存的查詢結果合并;對于被修改的行記錄,滿足查詢條件則與緩存的查詢結果合并,若舊記錄在緩存結果中存在將其刪除;對于被刪除的行記錄,若在緩存結果中存在將其刪除。上述的簡單語句在本實例中可以是不包含分類sort by、分組group by、聚集函數(shù)、限定limit等語句的單一操作的語句。上述的復雜語句在本實例中可以是包含sortby、group by、聚集函數(shù)、限定limit等語句的多操作的語句,該復雜語句不適合進行數(shù)據(jù)同步,因為操作較為復雜,耗時較多。通過上述技術方案的實施,就可以有效保證數(shù)據(jù)的一致性,使結果集在相關表被修改時也能繼續(xù)使用,從而大大縮短了修改表時結果集的更新時間,進而提高了用戶體驗。本發(fā)明實施例提供了一種數(shù)據(jù)庫服務器端結果集緩存的數(shù)據(jù)同步裝置,如圖3所示為本發(fā)明實施例所提供數(shù)據(jù)同步裝置的結構示意圖,所述裝置包括修改記錄單元31,用于在修改數(shù)據(jù)庫服務器端的數(shù)據(jù)表時,記錄被修改的數(shù)據(jù)表的行記錄標識;頭部字段設置單元32,用于在結果集緩存的結果集頭部字段中存儲所修改數(shù)據(jù)表的表標識,且在所述結果集頭部字段中存儲有查詢語句的類別,所述查詢語句的類別包括單一操作的簡單語句和多操作的復雜語句;記錄查詢單元33,用于當所述結果集緩存中的某一查詢語句被執(zhí)行,判斷該查詢語句是否為單一操作的簡單語句,若是簡單語句,則在所記錄的被修改的所有行記錄上重新執(zhí)行查詢并得到查詢結果;同步更新單元34,用于根據(jù)修改數(shù)據(jù)表的不同操作將記錄查詢單元所得到的查詢結果與所述結果集緩存中緩存的結果合并,同步更新結果集緩存。具體實現(xiàn)中,上述頭部字段設置單元32還用于在所述結果集頭部字段中設置數(shù)據(jù)一致性標志位,根據(jù)該數(shù)據(jù)一致性標志位判斷是否需要進行后繼操作,若所述數(shù)據(jù)一致性標志位為一致,則不需要進行后繼操作,若所述數(shù)據(jù)一致性標志位為不一致,則繼續(xù)后繼操作。所述頭部字段設置單元32還用于在所述結果集頭部字段中設置用于唯一標記結果集緩存的字段,以及用于記錄結果集緩存被訪問次數(shù)的字段。上述裝置實施例中各單元的具體實現(xiàn)過程可參考上述方法實施例中所述。值得注意的是,上述裝置實施例中,所包括的各個單元只是按照功能邏輯進行劃分的,但并不局限于上述的劃分,只要能夠?qū)崿F(xiàn)相應的功能即可;另外,各功能單元的具體名稱也只是為了便于相互區(qū)分,并不用于限制本發(fā)明的保護范圍。
·
另外,本領域普通技術人員可以理解實現(xiàn)上述實施例方法中的全部或部分步驟是可以通過程序來指令相關的硬件完成,相應的程序可以存儲于一種計算機可讀存儲介質(zhì)中,上述提到的存儲介質(zhì)可以是只讀存儲器,磁盤或光盤等。綜上所述,本發(fā)明實施例能夠有效保證數(shù)據(jù)的一致性,使結果集在相關表被修改時也能繼續(xù)使用,從而大大縮短了修改表時結果集的更新時間,進而提高了用戶體驗。以上所述,僅為本發(fā)明較佳的具體實施方式
,但本發(fā)明的保護范圍并不局限于此,任何熟悉本技術領域的技術人員在本發(fā)明實施例揭露的技術范圍內(nèi),可輕易想到的變化或替換,都應涵蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍應該以權利要求的保護范圍為準。
權利要求
1.一種數(shù)據(jù)庫服務器端結果集緩存的數(shù)據(jù)同步方法,其特征在于,所述方法包括 在修改數(shù)據(jù)庫服務器端的數(shù)據(jù)表時,記錄被修改的數(shù)據(jù)表的行記錄標識,并在結果集緩存的結果集頭部字段中存儲該數(shù)據(jù)表的表標識; 當所述結果集緩存中的某一查詢語句被執(zhí)行,判斷該查詢語句是否為單一操作的簡單語句,若是簡單語句,則在所記錄的被修改的所有行記錄上重新執(zhí)行查詢并得到查詢結果; 根據(jù)修改數(shù)據(jù)表的不同操作將所得到的查詢結果與所述結果集緩存中緩存的結果合并,冋步更新結果集緩存。
2.如權利要求I所述的數(shù)據(jù)同步方法,其特征在于,所述在所記錄的被修改的所有行記錄上重新執(zhí)行查詢并得到查詢結果,具體包括 根據(jù)所存儲的數(shù)據(jù)表的表標識查找得到該數(shù)據(jù)表的所有行記錄標識,并根據(jù)該所有行記錄標識在被修改的所有行記錄上重新執(zhí)行查詢并得到查詢結果。
3.如權利要求I所述的數(shù)據(jù)同步方法,其特征在于,所述方法還包括 當所述結果集緩存中的某一查詢語句被執(zhí)行,若判斷該查詢語句為多操作的復雜語句,則該復雜語句的緩存失效,重新通過所述數(shù)據(jù)庫服務器端的數(shù)據(jù)表來查詢并得到查詢結果,并更新結果集緩存。
4.如權利要求I所述的數(shù)據(jù)同步方法,其特征在于,在所述結果集緩存中的某一查詢語句被執(zhí)行時,所述方法還包括 根據(jù)在所述結果集頭部字段中設置的數(shù)據(jù)一致性標志位判斷是否需要進行后繼操作,若所述數(shù)據(jù)一致性標志位為一致,則不需要進行后繼操作,若所述數(shù)據(jù)一致性標志位為不一致,則繼續(xù)后繼操作。
5.如權利要求I所述的數(shù)據(jù)同步方法,其特征在于,所述記錄被修改的數(shù)據(jù)表的行記錄標識,具體包括 通過在所述結果集緩存中設置記錄表來記錄被修改的數(shù)據(jù)表的行記錄標識。
6.如權利要求I所述的數(shù)據(jù)同步方法,其特征在于,所述結果集緩存的結果集頭部中還包括 用于唯一標記結果集緩存的字段,以及用于記錄結果集緩存被訪問次數(shù)的字段。
7.如權利要求I所述的數(shù)據(jù)同步方法,其特征在于,所述根據(jù)修改數(shù)據(jù)表的不同操作將所得到的查詢結果與所述結果集緩存中緩存的結果合并,具體包括 若所述修改數(shù)據(jù)表的操作為插入行記錄,則將查詢結果與所述結果集緩存中緩存的結果合并; 若所述修改數(shù)據(jù)表的操作為修改行記錄,則將查詢結果與所述結果集緩存中緩存的結果合并,并將原行記錄刪除; 若所述修改數(shù)據(jù)表的操作為刪除行記錄,則在所述結果集緩存中刪除該行記錄。
8.一種數(shù)據(jù)庫服務器端結果集緩存的數(shù)據(jù)同步裝置,其特征在于,所述裝置包括 修改記錄單元,用于在修改數(shù)據(jù)庫服務器端的數(shù)據(jù)表時,記錄被修改的數(shù)據(jù)表的行記錄標識; 頭部字段設置單元,用于在結果集緩存的結果集頭部字段中存儲所修改數(shù)據(jù)表的表標識,且在所述結果集頭部字段中存儲有查詢語句的類別,所述查詢語句的類別包括單一操作的簡單語句和多操作的復雜語句; 記錄查詢單元,用于當所述結果集緩存中的某一查詢語句被執(zhí)行,判斷該查詢語句是否為單一操作的簡單語句,若是簡單語句,則在所記錄的被修改的所有行記錄上重新執(zhí)行查詢并得到查詢結果; 同步更新單元,用于根據(jù)修改數(shù)據(jù)表的不同操作將記錄查詢單元所得到的查詢結果與所述結果集緩存中緩存的結果合并,同步更新結果集緩存。
9.如權利要求8所述的數(shù)據(jù)同步裝置,其特征在于, 所述頭部字段設置單元還用于在所述結果集頭部字段中設置數(shù)據(jù)一致性標志位,根據(jù)該數(shù)據(jù)一致性標志位判斷是否需要進行后繼操作,若所述數(shù)據(jù)一致性標志位為一致,則不需要進行后繼操作,若所述數(shù)據(jù)一致性標志位為不一致,則繼續(xù)后繼操作。
10.如權利要求8所述的數(shù)據(jù)同步裝置,其特征在于, 所述頭部字段設置單元還用于在所述結果集頭部字段中設置用于唯一標記結果集緩存的字段,以及用于記錄結果集緩存被訪問次數(shù)的字段。
全文摘要
本發(fā)明實施例提供了一種數(shù)據(jù)庫服務器端結果集緩存的數(shù)據(jù)同步方法及裝置。所述方法在修改數(shù)據(jù)庫服務器端的數(shù)據(jù)表時,記錄被修改的數(shù)據(jù)表的行記錄標識,并在結果集緩存的結果集頭部字段中存儲該數(shù)據(jù)表的表標識,當所述結果集緩存中的某一查詢語句被執(zhí)行,且該查詢語句為簡單語句時,在所記錄的被修改的所有行記錄上重新執(zhí)行查詢并得到查詢結果;根據(jù)修改數(shù)據(jù)表的不同操作將所得到的查詢結果與所述結果集緩存中緩存的結果合并。通過上述方法實施就能夠有效保證數(shù)據(jù)的一致性,使結果集在相關表被修改時也能繼續(xù)使用,從而大大縮短了修改表時結果集的更新時間,進而提高了用戶體驗。
文檔編號G06F17/30GK102789475SQ20121014017
公開日2012年11月21日 申請日期2012年5月8日 優(yōu)先權日2012年5月8日
發(fā)明者鞏玉旺 申請人:華為技術有限公司