一種大欄位數據的處理方法及裝置與流程
2023-05-14 16:48:22

本發明實施例涉及資料庫相關技術領域,尤其涉及一種大欄位數據的處理方法及裝置。
背景技術:
大欄位是資料庫中的一種數據類型,以大欄位類型進行存儲的數據稱為大欄位數據。一般地,以大欄位類型存儲的數據可以分為兩類:一類是長文本,普通的文本類型最多只能存儲4000個漢字,而基於大欄位類型存儲的長文本遠可以大於4000字;另一類是二進位信息,如圖片或者文件等。與其他數據類型相比,大欄位需要採用特殊的存儲方式。
因為大欄位數據的大小一般都很大,甚至大於資料庫規定的最大行大小。這就意味著很多大欄位數據無法直接在存儲在資料庫表中行單元中。現有存儲大欄位數據的方法中,通常是為大欄位數據專門定義一種數據頁的類型,稱為大欄位數據頁,以用該類型的數據頁獨立存儲大欄位數據,且在行記錄中只記錄首個大欄位數據頁的頁地址信息。
對於該種簡單的大欄位獨立存儲方法,局限之處在於:對於需要存儲大欄位數據,至少需要一個大欄位數據頁,然而,對於一個大欄位數據頁來說,只能用來存儲一個大欄位數據。但在實際應用中,很多的大欄位數據長度都不會超過數據頁的一半,對於該種情況,大欄位數據頁在存儲一個大欄位數據之後,會剩餘大量的空閒空間,而這些空閒空間也不能再用來存儲其他數據。由此造成了大欄位數據頁的空間浪費;同時,當對大欄位數據進行批量查詢時,也會增加大欄位數據頁的輸入輸出代價,從而降低資料庫的執行效率。
技術實現要素:
本發明的目的是提出一種大欄位數據的處理方法及裝置,以實現對大欄位數據的優化處理。
一方面,本發明實施例提供了一種大欄位數據的處理方法,該處理方法包括:
接收對指定資料庫表的大欄位數據進行處理的處理指令;
如果所述大欄位數據的數據長度小於或等於設定閾值,則根據所述處理指令確定所述大欄位數據所屬的數據頁,並對所述大欄位數據進行相應的處理,其中,所述數據頁記為大欄位記錄頁,所述大欄位記錄頁用於存儲至少兩條大欄位數據的數據信息。
另一方面,本發明實施例還提供了一種大欄位數據的處理裝置,該處理裝置包括:
指令接收模塊,用於接收對指定資料庫表的大欄位數據進行處理的處理指令;
數據處理模塊,用於當所述大欄位數據的數據長度小於或等於設定閾值時,根據所述處理指令確定所述大欄位數據所屬的數據頁,並對所述大欄位數據進行相應的處理,其中,所述數據頁記為大欄位記錄頁,所述大欄位記錄頁用於存儲至少兩條大欄位數據的數據信息。
本發明實施例提供了一種大欄位數據的處理方法及裝置,該處理方法可概括為:首先接收對指定資料庫表的大欄位數據進行處理的處理指令;在確定大欄位數據的數據長度小於或等於設定閾值時,根據接收的處理指令確定大欄位數據所屬的數據頁,並對大欄位數據進行相應的處理。利用該處理方法,由於大欄位數據所屬的數據頁至少存儲兩條大欄位數據的數據信息,能夠節省資料庫的存儲空間,由此降低了存儲空間的資源浪費,此外,還能夠減少大欄位數據處理時的數據頁加載量,由此降低了大欄位數據處理時的輸入輸出代價,從而提高了資料庫的執行效率。
附圖說明
圖1為本發明實施例一提供的一種大欄位數據的處理方法的流程示意圖;
圖2為本發明實施例二提供的一種大欄位數據的處理方法的流程示意圖;
圖3為本發明實施例三提供的一種大欄位數據的處理方法的流程示意圖;
圖4為本發明實施例四提供的一種大欄位數據的處理裝置的結構框圖。
具體實施方式
下面結合附圖並通過具體實施方式來進一步說明本發明的技術方案。可以理解的是,此處所描述的具體實施例僅僅用於解釋本發明,而非對本發明的限定。另外還需要說明的是,為了便於描述,附圖中僅示出了與本發明相關的部分而非全部結構。
實施例一
圖1為本發明實施例一提供的一種大欄位數據的處理方法的流程示意圖。該方法適用於對大欄位數據進行處理的情況,可以由大欄位數據的處理裝置執行,其中該裝置可由軟體和/或硬體實現,並一般集成於資料庫管理系統中。
如圖1所示,本發明實施例一提供的一種大欄位數據的處理方法,具體包括如下操作:
S101、接收對指定資料庫表的大欄位數據進行處理的處理指令。
在本實施例中,所述指定資料庫表具體可理解為創建於資料庫中的,且包含數據類型為大欄位的列的任一基本表。在本實施例中,所述大欄位數據具體可理解為所述指定資料庫表中數據類型為大欄位的列所對應的數據,如長文本、圖片或者文件等,其中,對所述大欄位數據的處理並不直接在所屬列對應的行單元中進行,可以基於本發明實施例提供的大欄位數據的處理方法進行。
一般地,在對所述大欄位數據進行處理時,可以首先進行接收處理所述大欄位數據所需處理指令的操作。具體的,所述處理指令可以包括大欄位數據的存儲指令、修改指令以及刪除指令等。
S102、如果所述大欄位數據的數據長度小於或等於設定閾值,則根據所述處理指令確定所述大欄位數據所屬的數據頁,並對所述大欄位數據進行相應的處理,其中,所述數據頁記為大欄位記錄頁,所述大欄位記錄頁用於存儲至少兩條大欄位數據的數據信息。
一般地,在接收到所述處理指令之後,可以基於所述大欄位數據的數據長度與所述設定閾值的大小關係來確定處理所述大欄位數據所對應的處理方法。通常情況下,在接收到處理指令後,對於數據長度大於設定閾值的大欄位數據而言,所使用的處理方法可以是現有的常規處理方法;對於數據長度小於或等於設定閾值的大欄位數據而言,就可以使用本發明實施例所提供的處理方法來進行處理。
具體的,所述大欄位數據的數據長度具體可指數據類型為大欄位的數據所具有的數據大小,一般以字節為單位來表示。所述設定閾值可人為設定,也可默認設定,其中,所述設定閾值可優選設定為一個數據頁的頁大小的一半或者更小,示例性的,若數據頁的頁大小為4KB,則所述設定閾值可以為2KB或者1.8KB等。
在本實施例中,當所述大欄位數據的數據長度小於或等於設定閾值時,表明所述大欄位數據的數據長度較小,此時可以基於步驟S102實現對所述大欄位數據的處理。具體的,首先根據所述處理指令確定所述大欄位數據所屬的數據頁,然後,再基於處理指令對所述大欄位數據進行相應的處理,其中,基於步驟S102所確定的數據頁與基於現有處理方法確定的數據頁不同,基於S102確定出的數據頁中至少可以存儲兩條大欄位數據的數據信息,為了便於區分,本發明實施例中記所述數據頁為大欄位記錄頁;而基於現有處理方法確定的數據頁僅允許存儲一條大欄位數據。由此可知,基於步驟S102的處理步驟可以節省資料庫的存儲空間,減少存儲空間的浪費。
在本實施例中,基於S102確定出所述大欄位數據所屬的大欄位記錄頁後,還可以基於不同的處理指令對大欄位數據進行不同的處理操作,示例性的,如基於存儲指令對大欄位數據進行存儲操作,或基於修改指令對大欄位數據進行修改操作等。
本發明實施例一提供了一種大欄位數據的處理方法,該處理方法首先接收對指定資料庫表的大欄位數據進行處理的處理指令;在確定大欄位數據的數據長度小於或等於設定閾值時,根據接收的處理指令確定大欄位數據所屬的數據頁,並對大欄位數據進行相應的處理。利用該處理方法,由於大欄位數據所屬的數據頁至少存儲兩條大欄位數據的數據信息,節省了資料庫的存儲空間,由此降低了存儲空間的資源浪費,此外,很大程度減少了大欄位數據處理時的數據頁加載量,由此降低了大欄位數據處理時的輸入輸出代價,從而提高了資料庫的執行效率。
實施例二
圖2為本發明實施例二提供的一種大欄位數據的處理方法的流程示意圖。本發明實施例二以上述實施例為基礎進行優化,在本實施例中,該處理方法還優化包括了:在創建所述指定資料庫表時,如果檢測到所述指定資料庫表中存在數據類型為大欄位的列,則為所述列創建專屬的大欄位數據段,所述大欄位數據段為處理大欄位數據所需的數據環境;在所述大欄位數據段中創建至少一個控制組,並為所述控制組對應分配一個數據頁,記所述數據頁為大欄位控制頁。
如圖2所示,本發明實施例二提供的一種大欄位數據的處理方法,具體包括如下操作:
需要說明的是,由於對大欄位數據的處理不能直接在所屬列對應的行單元中進行,所以在對大欄位數據進行處理操作之前,需要為所述大欄位數據創建處理操作所需的數據環境,下述步驟S201~S203為本發明實施例提出的處理所述大欄位數據所需數據環境的創建過程。
S201、在創建所述指定資料庫表時,檢測所述指定資料庫表中是否存在數據類型為大欄位的列。
具體的,在最初創建所述指定資料庫表時,確定在所述指定資料庫表中要形成的列的數據類型,並確定是否存在數據類型為大欄位的列。示例性的,不同的資料庫對大欄位類型的表示不同,如Oracle資料庫中常見的大欄位類型有二進位大對象(Binary Large Object,BLOB)以及字符大對象(Character Large Object,CLOB)等,又如SQL Server資料庫常見的大欄位類型有text(文本)以及image(圖片)等。
S202、如果存在所述列,則為所述列創建專屬的大欄位數據段,所述大欄位數據段為處理大欄位數據所需的數據環境。
在本實施例中,如果檢測到存在數據類型為大欄位的列,則相應的為所述列創建專屬的大欄位數據段,且所述大欄位數據段用於作為處理大欄位數據所需的數據環境。一般地,所述大欄位數據段可以抽象的看作一個存儲容器,用於存放所分配的數據頁,而存放於所述大欄位數據段中的數據頁一般用來記錄與所述列相關的大欄位數據。
需要說明的是,本發明實施例提供的處理方法,如果想要實現在一個數據頁(記作大欄位記錄頁)中至少記錄兩條大欄位數據的數據信息,就需要創建一個能夠管理所述大欄位記錄頁的控制組,則可以基於步驟S203實現控制組的創建。
S203、在所述大欄位數據段中創建至少一個控制組,並為所述控制組對應分配一個數據頁,記所述數據頁為大欄位控制頁。
在本實施例中,可以在所述大欄位數據段中創建多個控制組,以此提高處理進程並發效率。此外,由於控制組僅是一個邏輯上的名稱,所以需要為每個控制組對應分配一個數據頁(記為大欄位控制頁)來實現控制組對大欄位記錄頁的管理控制。需要說明的是,所述大欄位記錄頁以及大欄位控制頁均為數據頁,在實際操作中,主要基於數據頁的頁頭中記錄的頁類型來區分。
進一步的,所述控制組基於對應的大欄位控制頁中存儲的目錄項信息管理大欄位記錄頁,其中,所述目錄項信息中的一條目錄項對應記錄一個大欄位記錄頁的頁地址以及頁剩餘空間大小。
此外,所述大欄位記錄頁包括頁頭、數據以及數據索引三部分,其中,所述頁頭中記錄有所述大欄位記錄頁所屬控制組的控制組地址;所述控制組地址為與所述控制組對應的大欄位控制頁的頁地址。
在本實施例中,一個控制組可以管理至少一個大欄位記錄頁,對所述大欄位記錄頁的管理主要基於控制組對應大欄位控制頁中存儲的目錄項信息實現;所述目錄項信息中可以存在多條目錄項,每條目錄項對應記錄一個大欄位記錄頁的頁地址以及頁剩餘空間大小。需要說明的是,對於新創建的控制組,其對應的大欄位控制頁中的目錄項信息初始化為空,只有在將大欄位數據記錄到大欄位記錄頁後,才會將所述大欄位記錄頁的目錄項更新至所述控制組對應的大欄位控制頁中。
在本實施例中,所形成的大欄位記錄頁的組成部分與現有的數據頁的組成部分不同,現有的數據頁由頁頭和數據兩部分組成,而所述大欄位記錄頁由頁頭、數據以及數據索引三部分組成,其中,所述頁頭中除了包含原有的頁頭標準信息(如頁地址、頁類型等)外,還記錄了當前大欄位記錄頁中存儲的數據記錄條數、已使用的字節數以及所屬控制組的控制組地址等;所述數據部分可用於記錄至少兩條大欄位數據的數據信息;所述數據索引部分則記錄了已存儲的各大欄位數據的數據ID及其頁內偏移量,可以用於後續對已存儲大欄位數據的查詢定位。在本實施例中,上述大欄位控制頁以及大欄位記錄頁中的信息均會隨著對大欄位數據進行的處理操作而發生相應的更新變化。
S204、接收對所述指定資料庫表的大欄位數據進行處理的處理指令。
S205、如果所述大欄位數據的數據長度小於或等於設定閾值,則根據所述處理指令確定所述大欄位數據所屬的數據頁,並對所述大欄位數據進行相應的處理。
本發明實施例二提供的一種大欄位數據的處理方法,優化增加了創建大欄位數據段的操作,所創建的大欄位數據段為大欄位數據的處理提供了所需的數據環境基礎,使得大欄位數據能夠正常進行處理操作;此外,還優化增加了控制組的創建操作,在大欄位數據段中所創建的控制組則可用來確定大欄位數據具體所屬的數據頁,利用該處理方法,能夠節省資料庫的存儲空間,還能夠降低大欄位數據處理時的輸入輸出代價,進而達到提升資料庫執行效率的目的。
實施例三
圖3為本發明實施例三提供的一種大欄位數據的處理方法的流程示意圖。本發明實施例三以上述實施例為基礎進行優化,在本實施例中,將「根據所述處理指令確定所述大欄位數據所屬的數據頁,並對所述大欄位數據進行相應的處理」具體優化為:當所述處理指令為存儲指令時,確定存儲所述大欄位數據所需的大欄位記錄頁,並對所述大欄位數據進行存儲操作;當所述處理指令為修改指令時,確定所述大欄位數據所屬的大欄位記錄頁,並對所述大欄位數據進行修改操作;當所述處理指令為刪除指令時,確定所述大欄位數據所屬的大欄位記錄頁,並對所述大欄位數據進行刪除操作。
如圖3所示,本發明實施例三提供的一種大欄位數據的處理方法,具體包括如下操作:
S301、在創建所述指定資料庫表時,如果檢測到所述指定資料庫表中存在數據類型為大欄位的列,則為所述列創建專屬的大欄位數據段。
示例性的,所述大欄位數據段可以作為處理大欄位數據所需的數據環境。
S302、在所述大欄位數據段中創建至少一個控制組,並為所述控制組對應分配一個數據頁,記所述數據頁為大欄位控制頁。
示例性的,所述控制組可以基於對應大欄位控制頁中存儲的目錄項信息來控制目錄項信息中存在的大欄位記錄頁,所述大欄位記錄頁用於存儲至少兩條大欄位數據的數據信息。
S303、接收對指定資料庫表的大欄位數據進行處理的處理指令。
S304、如果所述大欄位數據的數據長度小於或等於設定閾值,則基於所接收的處理指令執行步驟S305、步驟S306或步驟S307。
示例性的,如果確定出所述大欄位數據的數據長度小於或等於設定閾值,則可基於本發明實施例提供的處理方法進行處理操作。
S305、當所述處理指令為存儲指令時,確定存儲所述大欄位數據所需的大欄位記錄頁,並對所述大欄位數據進行存儲操作。
在本實施例中,對所述大欄位數據進行存儲操作具體可理解為將大欄位數據存儲至確定的大欄位記錄頁中。
進一步的,所述確定存儲所述大欄位數據所需的大欄位記錄頁,並對所述大欄位數據進行存儲操作,包括:
將所述大欄位數據分配到所述大欄位數據段的任一個未封鎖的控制組中,並封鎖所述控制組;基於所述控制組對應的目錄項信息確定存儲所述大欄位數據所需的大欄位記錄頁;將所述大欄位數據的數據信息寫入所述大欄位記錄頁;更新所述大欄位記錄頁在所述控制組中的目錄項信息,並釋放對所述控制組的封鎖。
在本實施例中,在所述控制組內對大欄位數據進行處理操作之前一般先對控制組進行封鎖,由此避免多個並發處理進程同時對在一個控制組內進行操作。其中,封鎖操作為資料庫中的一個基本操作,這裡不再贅述。
在本實施例中,在將所述大欄位數據寫入所述大欄位記錄頁後,會在所述指定資料庫表的指定行中存儲所述大欄位數據的數據ID以及所述大欄位記錄頁的頁地址,由此形成所述大欄位數據的行記錄信息,以便於後續所述大欄位數據進行索引查詢。
此外,在將所述大欄位數據寫入所述大欄位記錄頁後,還要更新所述大欄位記錄頁在所述控制組中的目錄項信息,以保證控制組對應的目錄項信息與其管理的大欄位記錄頁的信息能夠保持一致。
進一步的,所述基於所述控制組對應的目錄項信息確定存儲所述大欄位數據所需的大欄位記錄頁,包括:如果所述控制組對應的目錄項信息為空,則為所述大欄位數據分配一個新的大欄位記錄頁;否則,確定所述控制組對應的目錄項信息中是否存在滿足設定條件的目錄項,如果存在滿足所述設定條件的目錄項,則確定所述目錄項中頁地址對應的大欄位記錄頁為存儲所述大欄位數據所需的大欄位記錄頁;否則,為所述大欄位數據分配一個新的大欄位記錄頁。其中,所述設定條件為:目錄項的頁剩餘空間大小大於或等於所述大欄位數據的數據長度。
S306、當所述處理指令為修改指令時,確定所述大欄位數據所屬的大欄位記錄頁,並對所述大欄位數據進行修改操作。
在本實施例中,所述對所述大欄位數據進行修改操作具體可理解為對已確定的大欄位記錄頁中存儲的大欄位數據的數據信息進行修改。
進一步的,所述確定所述大欄位數據所屬的大欄位記錄頁,並對所述大欄位數據進行修改操作,包括:
基於所述大欄位數據在所述指定資料庫表中對應的行記錄信息,確定所述大欄位數據所屬數據頁的頁地址;基於所述頁地址在所述大欄位數據段中確定對應的大欄位記錄頁;檢查所述大欄位記錄頁的頁頭中記錄的控制組地址是否為空;如果所述控制組地址不為空,則封鎖所述控制組地址對應的控制組;確定所述大欄位數據修改後的數據長度是否小於或等於所述大欄位記錄頁的頁剩餘空間大小,若是,則直接在所述大欄位記錄頁內修改所述大欄位數據;若否,則將記錄於所述大欄位記錄頁中的大欄位數據複製到緩存區進行修改,並從所述大欄位記錄頁中刪除與所述大欄位數據相關的記錄,對修改後的大欄位數據重新進行存儲操作;如果對所述控制組進行了封鎖,更新所述大欄位記錄頁在所述控制組中的目錄項信息,並釋放對所述控制組的封鎖。
在本實施例中,所述大欄位記錄頁的頁頭中記錄的控制組地址存在為空的情況,在出現該情況時,表明所述大欄位記錄頁的頁剩餘空間已經不多,因此後續不會再考慮將新的大欄位數據存儲進來,由此進行存儲操作時節省了不必要的判定;此外,由於所述大欄位記錄頁不屬於任何控制組,此時也不必再進行控制組的封鎖操作,進而也不必進行控制組目錄信息的更新操作以及相應的封鎖釋放操作,這裡不再詳述。
在本實施例中,如果對修改後的大欄位數據重新進行了存儲操作,則在對修改後的大欄位數據重新進行存儲操作後,會在所述指定資料庫表中的指定行中存儲所述大欄位數據的數據ID以及所述修改後的大欄位數據對應的大欄位記錄頁的頁地址,由此形成所述大欄位數據的新的行記錄信息,以便於後續所述大欄位數據進行正確的索引查詢。
S307、當所述處理指令為刪除指令時,確定所述大欄位數據所屬的大欄位記錄頁,並對所述大欄位數據進行刪除操作。
進一步的,所述確定所述大欄位數據所屬的大欄位記錄頁,並對所述大欄位數據進行刪除操作,包括:
基於所述大欄位數據在所述指定資料庫表中對應的行記錄信息,確定所述大欄位數據所屬數據頁的頁地址;基於所述頁地址在所述大欄位數據段中確定對應的大欄位記錄頁;檢查所述大欄位記錄頁的頁頭中包含的控制組地址是否為空;如果所述控制組地址不為空,則封鎖所述控制組地址對應的控制組;確定所述大欄位數據在所述大欄位記錄頁中的記錄位置,並從所述大欄位記錄頁中刪除與所述大欄位數據相關的記錄;如果對所述控制組進行了封鎖,更新所述大欄位記錄頁在所述控制組中的目錄項信息,並釋放對所述控制組的封鎖。
在本實施例中,在對待刪除的大欄位數據進行刪除操作後,需要將所述大欄位數據在指定資料庫表的指定行中的行記錄信息也相應的刪除,使得所述指定行的行記錄信息為空,由此保證大欄位數據的正確索引查詢。
本發明實施例三提供的一種大欄位數據的處理方法,具體化了基於接收的處理指令的不同進行不同處理操作的過程。利用該處理方法,實現了對大欄位數據在資料庫中的存儲操作、修改操作以及刪除操作,由於存儲大欄位數據的數據頁至少能夠存儲兩條大欄位數據的數據信息,所以與現有的存儲操作相比,很大程度節省了資料庫的存儲空間,由此降低存儲空間的資源浪費,同時,在對存儲於特殊數據頁的大欄位數據據進行修改或刪除操作時,能夠減少大欄位數據的數據頁加載量,由此降低大欄位數據處理時的輸入輸出代價,從而提高了資料庫的執行效率。
在上述實施例的基礎上,本發明實施例三還將「更新所述大欄位記錄頁在所述控制組中的目錄項信息」優化為:a、確定所述大欄位記錄頁的頁地址;b、檢測所述控制組對應的各目錄項中是否存在包含所述頁地址的目錄項,若存在,則執行步驟c;若不存在,則執行步驟f;c、確定所述目錄項中的頁剩餘空間大小是否小於預設的頁空間下限值,若是,則執行步驟d;若否,則執行步驟e;d、從所述控制組的目錄項信息中刪除所述目錄項,並將所述大欄位記錄頁的頁頭中的控制組地址設置為空,結束當前更新操作;e、更新所述目錄項中的頁剩餘空間大小,並結束當前更新操作;f、檢測所述大欄位記錄頁的數據部分是否為空或者所述大欄位記錄頁的頁剩餘空間是否小於預設的頁空間下限值,若是,則執行步驟g;若否,則執行步驟h;g、直接結束當前更新操作;h、如果所述控制組對應的目錄項條數沒有達到預設的上限制,則執行步驟i;否則,執行步驟j;i、添加所述大欄位記錄頁的目錄項到所述控制組對應的目錄項信息中,並在所述大欄位記錄頁的頁頭中記錄所述控制組的控制組地址,結束當前更新操作。j、查找所述控制組對應的目錄項信息中頁剩餘空間最小的目錄項,如果所述目錄項的頁剩餘空間大小大於所述大欄位記錄頁的頁剩餘空間大小,則結束當前操作;否則,則執行步驟k;k、刪除所述目錄項信息中頁剩餘空間最小的目錄項,將所述目錄項對應的數據頁頁頭中的控制頁地址置為空;將所述大欄位記錄頁的目錄項添加到所述控制組對應的目錄項信息中,並在所述大欄位記錄頁的頁頭中記錄所述控制組的控制組地址,結束當前更新操作。
在本實施例中,如果存在所述大欄位記錄頁中的數據部分為空的情況,可以認為是對所述大欄位記錄頁中的大欄位數據進行了刪除或者修改操作而造成的,此時,如果所述控制組的目錄項信息中不存在所述大欄位記錄頁的目錄項記錄,則可以執行上述步驟g的操作。
在本實施例中,上述步驟a至步驟k給出了更新所述大欄位記錄頁在所述控制組中的目錄項信息的具體實現方法,基於上述步驟a至步驟k的更新操作,可以將符合條件的大欄位記錄頁加入至所述控制組中,以便於後續插入新的大欄位數據時,能夠通過控制組的管理將符合條件的大欄位記錄頁分配給新的大欄位數據進行存儲;同時,還可以將不符合條件的大欄位記錄頁目錄項從控制組中的目錄項信息中刪除,以避免後續再將新的大欄位數據存儲其中。由此在保證控制組目錄項信息與其管理的大欄位記錄頁的信息保持一致的同時,還提高了大欄位數據的處理效率。
實施例四
圖4為本發明實施例提供的一種大欄位數據的處理裝置,該處理裝置適用於對大欄位數據進行處理的情況,該處理裝置可由軟體和/或硬體實現,並一般集成於資料庫管理系統中。如圖4所示,該處理裝置包括:指令接收模塊41和數據處理模塊42。
其中,指令接收模塊41,用於接收對指定資料庫表的大欄位數據進行處理的處理指令。
數據處理模塊42,用於當所述大欄位數據的數據長度小於或等於設定閾值時,根據所述處理指令確定所述大欄位數據所屬的數據頁,並對所述大欄位數據進行相應的處理,其中,所述數據頁記為大欄位記錄頁,所述大欄位記錄頁用於存儲至少兩條大欄位數據的數據信息。
在本實施例中,該處理裝置首先通過指令接收模塊41接收對指定資料庫表的大欄位數據進行處理的處理指令;然後通過數據處理模塊42在所述大欄位數據的數據長度小於或等於設定閾值時,根據所述處理指令確定所述大欄位數據所屬的數據頁,並對所述大欄位數據進行相應的處理。
本發明實施例提供的一種大欄位數據的處理裝置,集成在資料庫管理系統中,在指定資料庫表出現需要處理的大欄位數據時,能夠基於該處理裝置的指令接收模塊接收對指定資料庫表的大欄位數據進行處理的處理指令,並能夠通過數據處理模塊在所述大欄位數據的數據長度小於或等於設定閾值時,根據所述處理指令確定所述大欄位數據所屬的數據頁,並對所述大欄位數據進行相應的處理。利用該處理裝置,能夠節省資料庫的存儲空間,降低存儲空間的資源浪費,還能夠很大程度的減少大欄位數據處理的數據頁加載量,降低大欄位數據處理時的輸入輸出代價,從而提高了資料庫的執行效率。
進一步的,該處理裝置,還包括:數據段創建模塊,用於在創建所述指定資料庫表時,如果檢測到所述指定資料庫表中存在數據類型為大欄位的列,則為所述列創建專屬的大欄位數據段,所述大欄位數據段為處理大欄位數據所需的數據環境;控制組創建模塊,用於在所述大欄位數據段中創建至少一個控制組,並為所述控制組對應分配一個數據頁,記所述數據頁為大欄位控制頁。
在上述實施例的基礎上,所述控制組基於對應的大欄位控制頁中存儲的目錄項信息管理大欄位記錄頁,其中,所述目錄項信息中的一條目錄項對應記錄一個大欄位記錄頁的頁地址以及頁剩餘空間大小;所述大欄位記錄頁包括頁頭、數據以及數據索引三部分,其中,所述頁頭中記錄有所述大欄位記錄頁所屬控制組的控制組地址;所述控制組地址為與所述控制組對應的大欄位控制頁的頁地址。
進一步的,所述數據處理模塊42,具體包括:
存儲操作單元,用於當所述大欄位數據的數據長度小於或等於設定閾值且所述處理指令為存儲指令時,確定存儲所述大欄位數據所需的大欄位記錄頁,並對所述大欄位數據進行存儲操作;
修改操作單元,用於當所述大欄位數據的數據長度小於或等於設定閾值且所述處理指令為修改指令時,確定所述大欄位數據所屬的大欄位記錄頁,並對所述大欄位數據進行修改操作;
刪除操作單元,用於當所述大欄位數據的數據長度小於或等於設定閾值且所述處理指令為刪除指令時,確定所述大欄位數據所屬的大欄位記錄頁,並對所述大欄位數據進行刪除操作。
在上述實施例的基礎上,所述存儲操作單元,具體用於:
將所述大欄位數據分配到所述大欄位數據段的任一個未封鎖的控制組中,並封鎖所述控制組;基於所述控制組對應的目錄項信息確定存儲所述大欄位數據所需的大欄位記錄頁;將所述大欄位數據的數據信息寫入所述大欄位記錄頁;更新所述大欄位記錄頁在所述控制組中的目錄項信息,並釋放對所述控制組的封鎖。
在本實施例中,基於存儲操作單元完成所述大欄位數據的存儲操作後,可以在所述指定資料庫表的指定行中存儲所述大欄位數據的數據ID以及所述大欄位記錄頁的頁地址,由此形成所述大欄位數據的行記錄信息,以便於後續所述大欄位數據進行索引查詢。
進一步的,所述基於所述控制組對應的目錄項信息確定存儲所述大欄位數據所需的大欄位記錄頁,包括:如果所述控制組對應的目錄項信息為空,則為所述大欄位數據分配一個新的大欄位記錄頁;否則,確定所述控制組對應的目錄項信息中是否存在滿足設定條件的目錄項,如果存在滿足所述設定條件的目錄項,則確定所述目錄項中頁地址對應的大欄位記錄頁為存儲所述大欄位數據所需的大欄位記錄頁;否則,為所述大欄位數據分配一個新的大欄位記錄頁;其中,所述設定條件為:目錄項的頁剩餘空間大小大於或等於所述大欄位數據的數據長度。
在上述實施例的基礎上,所述修改操作單元,具體用於:
基於所述大欄位數據在所述指定資料庫表中對應的行記錄信息,確定所述大欄位數據所屬數據頁的頁地址;基於所述頁地址在所述大欄位數據段中確定對應的大欄位記錄頁;檢查所述大欄位記錄頁的頁頭中記錄的控制組地址是否為空;如果所述控制組地址不為空,則封鎖所述控制組地址對應的控制組;確定所述大欄位數據修改後的數據長度是否小於或等於所述大欄位記錄頁的頁剩餘空間大小,若是,則直接在所述大欄位記錄頁內修改所述大欄位數據;若否,則將記錄於所述大欄位記錄頁中的大欄位數據複製到緩存區進行修改,並從所述大欄位記錄頁中刪除與所述大欄位數據相關的記錄,對修改後的大欄位數據重新進行存儲操作;如果對所述控制組進行了封鎖,更新所述大欄位記錄頁在所述控制組中的目錄項信息,並釋放對所述控制組的封鎖。
在本實施例中,如果基於修改操作單元進行了大欄位數據的修改,並重新對所述修改後的大欄位數據進行了存儲操作,則可以在所述指定資料庫表中的指定行中存儲所述大欄位數據的數據ID以及所述修改後的大欄位數據對應的大欄位記錄頁的頁地址,由此形成所述大欄位數據的新的行記錄信息,以便於後續所述大欄位數據進行正確的索引查詢。。
在上述實施例的基礎上,所述刪除操作單元,具體用於:
基於所述大欄位數據在所述指定資料庫表中對應的行記錄信息,確定所述大欄位數據所屬數據頁的頁地址;基於所述頁地址在所述大欄位數據段中確定對應的大欄位記錄頁;檢查所述大欄位記錄頁的頁頭中包含的控制組地址是否為空;如果所述控制組地址不為空,則封鎖所述控制組地址對應的控制組;確定所述大欄位數據在所述大欄位記錄頁中的記錄位置,並從所述大欄位記錄頁中刪除與所述大欄位數據相關的記錄;如果對所述控制組進行了封鎖,更新所述大欄位記錄頁在所述控制組中的目錄項信息,並釋放對所述控制組的封鎖。
在本實施例中,在基於刪除操作單元對待刪除的大欄位數據進行刪除操作後,需要將所述大欄位數據在指定資料庫表的指定行中的行記錄信息也相應的刪除,使得所述指定行的行記錄信息為空,由此保證大欄位數據的正確索引查詢。
注意,上述僅為本發明的較佳實施例及所運用技術原理。本領域技術人員會理解,本發明不限於這裡所述的特定實施例,對本領域技術人員來說能夠進行各種明顯的變化、重新調整和替代而不會脫離本發明的保護範圍。因此,雖然通過以上實施例對本發明進行了較為詳細的說明,但是本發明不僅僅限於以上實施例,在不脫離本發明構思的情況下,還可以包括更多其他等效實施例,而本發明的範圍由所附的權利要求範圍決定。