一種索引數(shù)據(jù)插入方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明涉及信息管理領域,公開了一種索引數(shù)據(jù)插入方法及系統(tǒng)。本發(fā)明首先獲取大小達到第一設定閾值的目標子索引;然后將所述目標子索引融合到所述主索引中。本發(fā)明通過將子索引整體性插入主索引,大大減少了數(shù)據(jù)結(jié)構(gòu)的破壞,便于數(shù)據(jù)的查詢和其他操作;從子索引的最低節(jié)點層中的最小節(jié)點向最大節(jié)點掃描,能夠保證子索引中的索引數(shù)據(jù)的完整性,同時也能提高數(shù)據(jù)查詢效率,保證將子索引融合到主索引后不破壞主索引的架構(gòu)。
【專利說明】一種索引數(shù)據(jù)插入方法及系統(tǒng)
【技術(shù)領域】
[0001]本發(fā)明涉及信息管理【技術(shù)領域】,特別涉及一種索引數(shù)據(jù)插入方法及系統(tǒng)。
【背景技術(shù)】
[0002]平衡樹(b+tree)是關(guān)系數(shù)據(jù)庫最常用的索引數(shù)據(jù)結(jié)構(gòu),它的優(yōu)點非常明顯:非常短的查詢路徑;很小的讀寫磁盤;可提供范圍查找。但是在數(shù)據(jù)量很大的時候,平衡樹往往變得低效。
[0003]數(shù)據(jù)量大我們很直觀的一個理解可以是內(nèi)存和數(shù)據(jù)總量的比值很小,由于平衡樹通常以一個頁面(4-8k)為一個節(jié)點,該節(jié)點內(nèi)部可容納指向下一級節(jié)點的指針的數(shù)目非常大,所以通常來說平衡樹的層數(shù)是很低的。假設一個值和指針占用的空間為4+4=8byte來估算,頁面為8k的平衡樹的一個中間節(jié)點可以指向近1000個下一級的節(jié)點,更直觀的來說如果平衡樹的葉節(jié)點的總大小有U,那么所有中間節(jié)點的大小約等于1.llg。也就是說平衡樹的葉節(jié)點的數(shù)目(大小)要遠遠大于中間節(jié)點的數(shù)目(大小)。
[0004]根據(jù)平衡樹隨機查詢的特點,我們可以認為:由于平衡樹的中間節(jié)點被重復訪問的幾率是很大的,并且數(shù)據(jù)量不像葉節(jié)點那么大,所以我們認為大部分的中間節(jié)點可以常駐于內(nèi)存中,大部分的葉節(jié)點被重復訪問的幾率小于中間節(jié)點,所以我們可以認為大部分的葉節(jié)點都在磁盤上。根據(jù)平衡樹的查詢路徑的特點:從根節(jié)點經(jīng)過每一層的一個中間節(jié)點達到葉節(jié)點后,根據(jù)查找的范圍,沿著葉節(jié)點之間的指針往一個方向遍歷。由于葉節(jié)點大部分存在于磁盤上,在葉節(jié)點鏈表上的遍歷產(chǎn)生的大量的讀寫磁盤,這種讀寫磁盤是不可避免的,為了提高讀寫磁盤的效率,我們只能保證葉節(jié)點的讀寫磁盤盡可能為順序讀寫磁盤。
[0005]根據(jù)平衡樹構(gòu)建的算法,一個平衡樹在建立的初期,葉節(jié)點有著很好的物理連續(xù)性。但是平衡樹在經(jīng)歷了大量而且隨機的插入和更新后,中間節(jié)點大量分裂后,數(shù)據(jù)的物理連續(xù)性遭到了很大的破壞。大大影響了數(shù)據(jù)的查詢效率。
[0006]同時數(shù)據(jù)量越來越大的時候,平衡樹的層次也變得越來越深,插入的時候會涉及到很多層次節(jié)點的層級分裂,插入的性能也變的越來越慢。
【發(fā)明內(nèi)容】
[0007]本發(fā)明提供一種索引數(shù)據(jù)插入方法及系統(tǒng),用以解決現(xiàn)有索引數(shù)據(jù)插入方法在大量隨機插入和更新后出現(xiàn)的數(shù)據(jù)結(jié)構(gòu)破壞、查詢效率低等不足。
[0008]為解決上述技術(shù)問題,本發(fā)明提供了一種索引數(shù)據(jù)插入方法,應用于包含主索引的平衡樹狀的數(shù)據(jù)結(jié)構(gòu),所述索引數(shù)據(jù)插入方法包括以下步驟:
[0009]獲取大小達到第一設定閾值的目標子索引;
[0010]將所述目標子索引融合到所述主索引中。
[0011]進一步地,所述目標子索引的構(gòu)造方法為:
[0012]在所述主索引的大小達到第二設定閾值時構(gòu)造所述目標子索引,并將待添加的索引數(shù)據(jù)插入所述目標子索引。
[0013]進一步地,所述構(gòu)造所述目標子索引,并將待添加的索引數(shù)據(jù)插入所述目標子索引具體為:
[0014]構(gòu)造含有設定個節(jié)點層的目標子索引;
[0015]將被查詢的頻率最高的待添加的索引數(shù)據(jù)放入所述目標子索引的最高節(jié)點層的節(jié)點中;將被查詢的頻率最低的待添加的索引數(shù)據(jù)放入所述目標子索引的最低節(jié)點層的節(jié)點中,將被查詢的頻率介于最高頻率和最低頻率之間的待添加的索引數(shù)據(jù)按被查詢的頻率的大小放入所述最高節(jié)點層和所述最低節(jié)點層之間的節(jié)點層的節(jié)點中。
[0016]進一步地,所述將所述目標子索引融合到所述主索引中具體為:
[0017]從所述達到所述第一設定閾值的所述目標子索引的最低節(jié)點層中的最小節(jié)點向最大節(jié)點掃描,復制掃描到的所述最小節(jié)點到所述最大節(jié)點的路徑上的待添加的索引數(shù)據(jù),按設定方法將所述路徑上的待添加的索引數(shù)據(jù)融合到所述主索引中。
[0018]進一步地,所述設定方法為平衡樹數(shù)據(jù)插入法。
[0019]進一步地,所述按設定方法將所述路徑上的待添加的索引數(shù)據(jù)融合到所述主索引中之后還包括:
[0020]刪除所述達到所述第一設定閾值的所述目標子索引。
[0021]進一步地,所述融合操作的隔離級別為可反復讀操作。
[0022]進一步地,所述索引數(shù)據(jù)插入方法還包括:
[0023]若所述主索引的大小沒有達到所述第二設定閾值,則將待添加的索引數(shù)據(jù)插入所述主索引。
[0024]進一步地,所述索引數(shù)據(jù)插入方法還包括:
[0025]若所述目標子索引的大小沒有達到所述第一設定閾值,則將索引數(shù)據(jù)插入所述子索引。
[0026]本發(fā)明還提供了一種索引數(shù)據(jù)插入系統(tǒng),應用于包含主索引的平衡樹狀的數(shù)據(jù)結(jié)構(gòu),所述索引數(shù)據(jù)插入系統(tǒng)包括:
[0027]目標子索引獲取單元,用于獲取大小達到第一設定閾值的目標子索引;
[0028]索引融合單元,用于將所述目標子索引融合到所述主索引中。
[0029]進一步地,所述目標子索引獲取單元包括:
[0030]第一目標子索引構(gòu)建單元,用于在所述主索引的大小達到第二設定閾值時構(gòu)造所述目標子索引,并將待添加的索引數(shù)據(jù)插入所述目標子索引。
[0031]進一步地,還包括:
[0032]第二目標子索引構(gòu)建單元,用于在所述目標子索引的大小達到第一設定閾值時,構(gòu)造下一個目標子索引。
[0033]進一步地,還包括:
[0034]閾值查詢單元,用于查詢所述主索引的大小是否達到第二設定閾值或查詢所述目標子索引的大小是否達到第一設定閾值,并將查詢結(jié)果發(fā)送給所述第一目標子索引構(gòu)建單元、所述第二目標子索引構(gòu)建單元或所述索引融合單元。
[0035]和現(xiàn)有技術(shù)相比,本發(fā)明的上述技術(shù)方案的有益效果如下:
[0036]上述技術(shù)方案中,通過將子索引整體性插入主索引,大大減少了對數(shù)據(jù)結(jié)構(gòu)的破壞,便于數(shù)據(jù)的查詢和其他操作;保證了主索引的層次固定和結(jié)構(gòu)穩(wěn)定。
【專利附圖】
【附圖說明】
[0037]圖1表示本發(fā)明實施例1的流程圖;
[0038]圖2表示本發(fā)明實施例2的結(jié)構(gòu)圖;
[0039]圖3表示本發(fā)明實施例3的結(jié)構(gòu)圖;
[0040]圖4表示本發(fā)明實施例4的結(jié)構(gòu)圖。
【具體實施方式】
[0041]下面結(jié)合附圖和實施例,對本發(fā)明的【具體實施方式】作進一步詳細描述。以下實施例用于說明本發(fā)明,但不用來限制本發(fā)明的范圍。
[0042]為了解決現(xiàn)有索引數(shù)據(jù)插入方法在大量隨機插入和更新后出現(xiàn)的數(shù)據(jù)結(jié)構(gòu)破壞、查詢效率低等不足,本發(fā)明提供了索引數(shù)據(jù)插入方法及系統(tǒng)。
[0043]實施例1
[0044]本發(fā)明提供了一種索引數(shù)據(jù)插入方法,該方法應用各種數(shù)據(jù)管理系統(tǒng),如oracle、DB2、sybase、informix、SQL Server等。更確切地,是應用于包含主索引的平衡樹狀的數(shù)據(jù)結(jié)構(gòu)。對于新增加的數(shù)據(jù),多數(shù)現(xiàn)有方法是直接在主索引中進行插入操作,當需要刪除數(shù)據(jù)時,直接從主索引中刪除。經(jīng)過大量的插入和刪除操作后,使得數(shù)據(jù)的連貫性遭到破壞。使得對數(shù)據(jù)進行的插入、刪除、查詢或其他操作越來越慢,甚至出現(xiàn)操作無法實現(xiàn)對應的功能。為此,所以本發(fā)明提出了一種數(shù)據(jù)插入方法,該方法包括以下步驟:
[0045]S1:獲取大小達到第一設定閾值的目標子索引;
[0046]S2:將所述目標子索引融合到所述主索引中。本發(fā)明通過將目標子索引整體性插入主索引,大大減少了數(shù)據(jù)結(jié)構(gòu)的破壞,便于數(shù)據(jù)的查詢和其他操作。本實施例的流程圖如圖1所示。
[0047]為了實現(xiàn)上述步驟,首先要考慮的是如何構(gòu)建目標子索引。目標子索引是為了對要插入的待添加的索引數(shù)據(jù)進行緩沖的,即,將要插入的待添加的索引數(shù)據(jù)先插入目標子索引,然后再將目標子索引融入主索引。這樣就減少了插入主索引的次數(shù),保證了主索引的結(jié)構(gòu)穩(wěn)定。
[0048]因此,步驟SI具體包括:
[0049]Sll:在所述主索引的大小達到第二設定閾值時構(gòu)造所述目標子索引,并將待添加的索引數(shù)據(jù)插入所述目標子索引。若所述主索引的大小沒有達到所述第二設定閾值,則將待添加的索引數(shù)據(jù)插入所述主索引。
[0050]本發(fā)明首先判斷所述主索引的大小,優(yōu)先保證主索引的層次固定和結(jié)構(gòu)穩(wěn)定。在所述主索引的大小達到第二設定閾值時才構(gòu)建目標子索引,既保證了所述主索引的結(jié)構(gòu),又能使新增加的數(shù)據(jù)進行有序的平衡樹狀排列。若主索引沒有到達第二設定閾值,則直接將數(shù)據(jù)插入主索引,這時插入數(shù)據(jù)不影響主索引的結(jié)構(gòu),同時能夠避免構(gòu)建不必要的目標子索引,減少了待添加的索引數(shù)據(jù)的插入過程。
[0051]另外,目標子索引一定要比主索引小,以保證目標子索引插入主索引不破壞主索引的結(jié)構(gòu)。所以,構(gòu)建目標子索引先要設定目標子索引的大小,然后要考慮目標子索引的結(jié)構(gòu)。為了方便起見,將目標子索引的結(jié)構(gòu)設置為和主索引相同的結(jié)構(gòu)。本發(fā)明構(gòu)造所述目標子索引,并將待添加的索引數(shù)據(jù)插入所述目標子索引具體為:
[0052]構(gòu)造含有設定個節(jié)點層的目標子索引,將被查詢的頻率最高的待添加的索引數(shù)據(jù)放入所述目標子索引的最高節(jié)點層的節(jié)點中;將被查詢的頻率最低的待添加的索引數(shù)據(jù)放入所述目標子索引的最低節(jié)點層的節(jié)點中,將被查詢的頻率介于最高頻率和最低頻率之間的待添加的索引數(shù)據(jù)按被查詢的頻率的大小放入所述最高節(jié)點層和所述最低節(jié)點層之間的節(jié)點層的節(jié)點中,目標子索引含有設定個節(jié)點層,待添加的索引數(shù)據(jù)按被查詢的頻率高低放入節(jié)點層的節(jié)點中,使得目標子索引具有完整的數(shù)據(jù)查詢功能。
[0053]可見,目標子索引和主索引同為平衡樹狀的數(shù)據(jù)結(jié)構(gòu),便于融合操縱及數(shù)據(jù)的連貫性。
[0054]當目標子索引的大小達到第一設定閾值時,就要考慮如何將目標子索引融合到主索引。將所述目標子索引融入主索引有多種方式,考慮到主索引的結(jié)構(gòu)穩(wěn)定等因素,本發(fā)明采用如下方法:
[0055]S12:將所述目標子索引融合到所述主索引中的方式包括:
[0056](I)在所述目標子索引的大小達到所述第一設定閾值時,將所述目標子索引融合到所述主索引;
[0057](2)將設定數(shù)量的達到所述第一設定閾值的所述目標子索引同時融合到所述主索引。
[0058]由上述描述可知,將達到第一設定閾值的所述目標子索引融入主索引,保證了主索引結(jié)構(gòu)的穩(wěn)定,減少了融入主索引的次數(shù),還能使得融入的數(shù)據(jù)保證連貫性。將一個目標子索引單獨融合到主索引中能減少目標子索引占用的空間,降低了對硬件的要求,使得每次融入操作的數(shù)據(jù)處理量小,降低了硬件負荷,不影響系統(tǒng)的運行;將一定數(shù)量的目標子索引整體融合到主索引中可以進一步保證主索引的結(jié)構(gòu)穩(wěn)定。
[0059]此外,若所述目標子索引的大小沒有達到所述第一設定閾值,則繼續(xù)將待添加的索引數(shù)據(jù)插入所述目標子索引,直到目標子索引達到第一設定閾值后才建立新的目標子索弓丨,并將數(shù)據(jù)插入新的目標子索引。這樣就保證了目標子索引的大小固定,便于目標子索引融合到主索引時融合過程的穩(wěn)定流暢。
[0060]上述完成了目標子索引的構(gòu)建和融合方式的確定問題,然后要考慮的就是具體的融合待添加的索引數(shù)據(jù)的問題。由上述可知,主索引和目標子索引都采用了平衡樹狀的數(shù)據(jù)結(jié)構(gòu)。該結(jié)構(gòu)有自身的特點,就是能夠找到一條數(shù)據(jù)路徑,使得最低節(jié)點層的節(jié)點和最高節(jié)點層的節(jié)點聯(lián)系起來成為一條數(shù)據(jù)鏈。因此,本發(fā)明融合過程如下:
[0061]步驟S2中,所述將所述目標子索引融合到所述主索引中具體為:
[0062]從所述達到所述第一設定閾值的所述目標子索引的最低節(jié)點層中的最小節(jié)點向最大節(jié)點掃描,復制掃描到的所述最小節(jié)點到所述最大節(jié)點的路徑上的待添加的索引數(shù)據(jù),按設定方法將所述路徑上的待添加的索引數(shù)據(jù)融合到所述主索引中,能夠保證目標子索引中的待添加的索引數(shù)據(jù)的完整性,同時也能提高數(shù)據(jù)查詢效率,保證將目標子索引融合到主索引后不破壞主索引的架構(gòu)。
[0063]本步驟的所述設定方法為平衡樹數(shù)據(jù)插入法,該方法能夠最大限度地利用了目標子索引和主索引的數(shù)據(jù)特性,保證了融合過程的成功和有效。
[0064]在完成目標子索引融入主索引的操作后,還要刪除達到所述第一設定閾值的所述目標子索引,這樣既節(jié)省了空間,又減少了數(shù)據(jù)出錯的可能性。
[0065]另外,本發(fā)明的融合操作的隔離級別為可反復讀操作。可反復讀操作能夠保證同一條數(shù)據(jù)被合并操作和用戶操作同時訪問時,不會導致用戶操作的等待。
[0066]實施例2
[0067]對應實施例1,本實施例提供了一種索引數(shù)據(jù)插入系統(tǒng),應用于包含主索引的平衡樹狀的數(shù)據(jù)結(jié)構(gòu),所述索引數(shù)據(jù)插入系統(tǒng)包括:
[0068](I)目標子索引獲取單元,用于獲取大小達到第一設定閾值的目標子索引;
[0069](2)閾值查詢單元,用于查詢所述主索引的大小是否達到第二設定閾值或查詢所述目標子索引的大小是否達到第一設定閾值,并將查詢結(jié)果發(fā)送給所述第一目標子索引構(gòu)建單元、所述第二目標子索引構(gòu)建單元或所述索引融合單元。
[0070]其中,目標子索引獲取單元又包括:
[0071](11)第一目標子索引構(gòu)建單元,用于在所述主索引的大小達到第二設定閾值時構(gòu)造所述目標子索引,并將待添加的索引數(shù)據(jù)插入所述目標子索引。
[0072](12)索引融合單元,用于將所述目標子索引融合到所述主索引中。
[0073]本實施例的結(jié)構(gòu)圖如圖2所示。索引數(shù)據(jù)插入系統(tǒng)的具體運行過程如下:
[0074]首先,通過閾值查詢單元查詢主索引的大小,若所述主索引的大小沒有達到所述第二設定閾值,則將待添加的索引數(shù)據(jù)插入所述主索引,能夠避免構(gòu)建不必要的目標子索弓丨,減少了待添加的索引數(shù)據(jù)的插入過程。
[0075]當查詢結(jié)果顯示主索引的大小達到第二設定閾值時,通過第一目標子索引構(gòu)建單元構(gòu)造含有設定個節(jié)點層的目標子索引,將被查詢的頻率最高的待添加的索引數(shù)據(jù)放入所述目標子索引的最高節(jié)點層的節(jié)點中;將被查詢的頻率最低的待添加的索引數(shù)據(jù)放入所述目標子索引的最低節(jié)點層的節(jié)點中,將被查詢的頻率介于最高頻率和最低頻率之間的待添加的索引數(shù)據(jù)按被查詢的頻率的大小放入所述最高節(jié)點層和所述最低節(jié)點層之間的節(jié)點層的節(jié)點中,目標子索引含有設定個節(jié)點層,待添加的索引數(shù)據(jù)按被查詢的頻率高低放入節(jié)點層的節(jié)點中,使得目標子索引具有完整的數(shù)據(jù)查詢功能。
[0076]上述待添加的索引數(shù)據(jù)在放入目標子索引之前,都要經(jīng)閾值查詢單元查看當前目標子索引的大小是否達到第一設定閾值。若所述目標子索引的大小沒有達到所述第一設定閾值,則繼續(xù)將待添加的索引數(shù)據(jù)插入所述目標子索引,保證了目標子索引的大小固定,便于目標子索引融合到主索引時融合過程的穩(wěn)定流暢。當目標子索引的大小達到第一設定閾值時,將目標子索引直接通過所述索引融合單元融合到主索引中,然后刪除該目標子索引,通過第一目標子索引構(gòu)建單元重新構(gòu)建一個新的目標子索引,目標子索引的結(jié)構(gòu)和放入數(shù)據(jù)的方式和上述相同。將一個目標子索引單獨融合到主索引中能夠減少目標子索引占用的空間。
[0077]最后,索引融合單元融合過程中,從所述達到所述第一設定閾值的所述目標子索引的最低節(jié)點層中的最小節(jié)點向最大節(jié)點掃描,復制掃描到的所述最小節(jié)點到所述最大節(jié)點的路徑上的待添加的索引數(shù)據(jù),按平衡樹數(shù)據(jù)插入法將所述路徑上的待添加的索引數(shù)據(jù)融合到所述主索引中,能夠保證目標子索引中的待添加的索引數(shù)據(jù)的完整性,同時也能提高數(shù)據(jù)查詢效率,保證將目標子索引融合到主索引后不破壞主索引的架構(gòu)。
[0078]融合操作的隔離級別為可反復讀操作,能夠保證同一條待添加的索引數(shù)據(jù)被合并操作和用戶操作同時訪問時,不會導致用戶操作的等待。在融合操作完成后,需要刪除目標子索引,這樣既節(jié)省了空間,又減少了數(shù)據(jù)出錯的可能性。
[0079]實施例3
[0080]本實施例與實施例2基于同一發(fā)明構(gòu)思,主要區(qū)別在于多提供了第二子索引構(gòu)建單元,以改變子索引融入主索引的方式。本實施例包括:
[0081](I)目標子索引獲取單元,用于獲取大小達到第一設定閾值的目標子索引;
[0082](2)閾值查詢單元,用于查詢所述主索引的大小是否達到第二設定閾值或查詢所述目標子索引的大小是否達到第一設定閾值,并將查詢結(jié)果發(fā)送給所述第一目標子索引構(gòu)建單元、所述第二目標子索引構(gòu)建單元或所述索引融合單元。
[0083]其中,目標子索引獲取單元又包括:
[0084](11)第一目標子索引構(gòu)建單元,用于在所述主索引的大小達到第二設定閾值時構(gòu)造所述目標子索引,并將待添加的索引數(shù)據(jù)插入所述目標子索引。
[0085](12)第二目標子索引構(gòu)建單元,用于在所述目標子索引的大小達到第一設定閾值時,構(gòu)造下一個目標子索引。
[0086](13)索引融合單元,用于將所述目標子索引融合到所述主索引中。本實施例的結(jié)構(gòu)圖如圖3所示。索引數(shù)據(jù)插入系統(tǒng)的具體運行過程如下:
[0087]首先,通過閾值查詢單元查詢主索引的大小,若所述主索引的大小沒有達到所述第二設定閾值,則將待添加的索引數(shù)據(jù)插入所述主索引,能夠避免構(gòu)建不必要的目標子索弓丨,減少了待添加的索引數(shù)據(jù)的插入過程。
[0088]當查詢結(jié)果顯示主索引的大小達到第二設定閾值時,通過第一目標子索引構(gòu)建單元構(gòu)造含有設定個節(jié)點層的目標子索引,將被查詢的頻率最高的待添加的索引數(shù)據(jù)放入所述目標子索引的最高節(jié)點層的節(jié)點中;將被查詢的頻率最低的待添加的索引數(shù)據(jù)放入所述目標子索引的最低節(jié)點層的節(jié)點中,將被查詢的頻率介于最高頻率和最低頻率之間的待添加的索引數(shù)據(jù)按被查詢的頻率的大小放入所述最高節(jié)點層和所述最低節(jié)點層之間的節(jié)點層的節(jié)點中,目標子索引含有設定個節(jié)點層,待添加的索引數(shù)據(jù)按被查詢的頻率高低放入節(jié)點層的節(jié)點中,使得目標子索引具有完整的數(shù)據(jù)查詢功能。
[0089]上述待添加的索引數(shù)據(jù)在放入目標子索引之前,都要經(jīng)閾值查詢單元查看當前目標子索引的大小是否達到第一設定閾值。若所述目標子索引的大小沒有達到所述第一設定閾值,則繼續(xù)將待添加的索引數(shù)據(jù)插入所述目標子索引,保證了目標子索引的大小固定,便于目標子索引融合到主索引時融合過程的穩(wěn)定流暢。當目標子索引的大小達到第一設定閾值時,先不把目標子索引直接通過所述索引融合單元融合到主索引中;而是通過第二目標子索引構(gòu)建單元構(gòu)造下一個目標子索引,等達到第一設定閾值的目標子索引夠一定數(shù)量后整體性融合到主索引中,將一定數(shù)量的目標子索引整體融合到主索引中可以進一步保證主索引的結(jié)構(gòu)穩(wěn)定。
[0090]最后,索引融合單元融合過程中,從所述達到所述第一設定閾值的所述目標子索引的最低節(jié)點層中的最小節(jié)點向最大節(jié)點掃描,復制掃描到的所述最小節(jié)點到所述最大節(jié)點的路徑上的待添加的索引數(shù)據(jù),按平衡樹數(shù)據(jù)插入法將所述路徑上的待添加的索引數(shù)據(jù)融合到所述主索引中,能夠保證目標子索引中的待添加的索引數(shù)據(jù)的完整性,同時也能提高數(shù)據(jù)查詢效率,保證將目標子索引融合到主索引后不破壞主索引的架構(gòu)。
[0091]融合操作的隔離級別為可反復讀操作,能夠保證同一條待添加的索引數(shù)據(jù)被合并操作和用戶操作同時訪問時,不會導致用戶操作的等待。在融合操作完成后,需要刪除目標子索引,這樣既節(jié)省了空間,又減少了數(shù)據(jù)出錯的可能性。
[0092]實施例4
[0093]以下通過一個具體的場景對本發(fā)明進行說明。本實施例的結(jié)構(gòu)圖如圖4所示。
[0094]數(shù)據(jù)插入是要插入“堆”數(shù)據(jù),“堆”數(shù)據(jù)包括基礎數(shù)據(jù)3和增量數(shù)據(jù)4兩部分。基礎數(shù)據(jù)3對應主索引I ;增量數(shù)據(jù)4對應目標子索引2。
[0095]插入時,首先通過閾值查詢單元查詢主索引I是否達到第二設定閾值,閾值可以設定為IG ;若沒有達到第二設定閾值,則將數(shù)據(jù)直接插入主索引I中;若達到第二設定閾值,則通過第一目標子索引構(gòu)建單元在一塊數(shù)據(jù)空白區(qū)構(gòu)建一個目標子索引2,目標子索引2的大小為設定值(如8M)。目標子索引2應含有設定個節(jié)點層,將被查詢的頻率最高的待添加的索引數(shù)據(jù)放入所述目標子索引2的最高節(jié)點層的節(jié)點中;將被查詢的頻率最低的待添加的索引數(shù)據(jù)放入所述目標子索引2的最低節(jié)點層的節(jié)點中,將被查詢的頻率介于最高頻率和最低頻率之間的待添加的索引數(shù)據(jù)按被查詢的頻率的大小放入所述最高節(jié)點層和所述最低節(jié)點層之間的節(jié)點層的節(jié)點中,目標子索引2含有設定個節(jié)點層,待添加的索引數(shù)據(jù)按被查詢的頻率高低放入節(jié)點層的節(jié)點中,使得目標子索引2具有完整的數(shù)據(jù)查詢功倉泛。
[0096]當目標子索引2的大小達到第一設定閾值時,可以將達到第一設定閾值的目標子索引2通過索引融合單元直接融合到主索引I中;也可以繼續(xù)通過第二目標子索引構(gòu)建單元構(gòu)造下一個目標子索引2,等達到第一設定閾值的目標子索引2夠一定數(shù)量后,再一起通過索引融合單元直接融合到主索引I中。融合時,是先復制要融合的目標子索引2中的待添加的索引數(shù)據(jù),然后將復制的待添加的索引數(shù)據(jù)插入主索引1,之后,要將融合后的目標子索引2刪除,以節(jié)約空間。
[0097]索引融合單元融合過程中,從所述達到所述第一設定閾值的所述目標子索引2的最低節(jié)點層中的最小節(jié)點向最大節(jié)點掃描,復制掃描到的所述最小節(jié)點到所述最大節(jié)點的路徑上的待添加的索引數(shù)據(jù),按平衡樹數(shù)據(jù)插入法將所述路徑上的待添加的索引數(shù)據(jù)融合到所述主索引I中,能夠保證目標子索引2中的待添加的索引數(shù)據(jù)的完整性,同時也能提高數(shù)據(jù)查詢效率,保證將目標子索引2融合到主索引I后不破壞主索引I的架構(gòu)。
[0098]融合操作的隔離級別為可反復讀操作,能夠保證同一條數(shù)據(jù)被合并操作和用戶操作同時訪問時,不會導致用戶操作的等待。在融合操作完成后,需要刪除目標子索引2,這樣既節(jié)省了空間,又減少了數(shù)據(jù)出錯的可能性。
[0099]此外,通過上述待添加的索引數(shù)據(jù)的插入,還配有相應的其他數(shù)據(jù)處理方式,如:
[0100]1、數(shù)據(jù)查詢:
[0101]數(shù)據(jù)查詢要依次掃描主索引I和所有的目標子索引2,將返回滿足數(shù)據(jù)查詢要求的查詢結(jié)果,數(shù)據(jù)查詢采用的是快照技術(shù)。
[0102]2、數(shù)據(jù)更新:
[0103]數(shù)據(jù)更新時,首先要進行數(shù)據(jù)查詢,查到要插入的數(shù)據(jù)位置后,通過存儲引擎的多版本并發(fā)控制方式將數(shù)據(jù)插入到所述數(shù)據(jù)位置。
[0104]3、數(shù)據(jù)刪除:
[0105]首先通過數(shù)據(jù)查詢步驟找到指定數(shù)據(jù),然后標記刪除的過程,最后將數(shù)據(jù)刪除。
[0106]4、定時融合
[0107]除了上述融合過程提到的單個融合和批量融合方式外,還可以定時將目標子索引2融合到主索引I中。每隔設定的時間間隔,將達到第一設定閾值的目標子索引2融合到主索引I中。此時,若在融合時刻沒有達到第一設定閾值的目標子索引2,則等待下一間隔到來時繼續(xù)融合操作;若有達到第一設定閾值的目標子索引2,則不論目標子索引2的數(shù)量有多少,通過索引融合單元將全部都融合到主索引I中。若融合某個目標子索引2的過程中出現(xiàn)拋出異常,則先不融合該目標子索引2,繼續(xù)融合其他目標子索引2,等下一輪融合過程來臨時繼續(xù)融合該目標子索引2。
[0108]本領域普通技術(shù)人員將會理解,本發(fā)明的各個方面、或各個方面的可能實現(xiàn)方式可以被具體實施為系統(tǒng)、方法或者計算機程序產(chǎn)品。因此,本發(fā)明的各方面、或各個方面的可能實現(xiàn)方式可以采用完全硬件實施例、完全軟件實施例(包括固件、駐留軟件等等),或者組合軟件和硬件方面的實施例的形式,在這里都統(tǒng)稱為“電路”、“模塊”或者“系統(tǒng)”。此夕卜,本發(fā)明的各方面、或各個方面的可能實現(xiàn)方式可以采用計算機程序產(chǎn)品的形式,計算機程序產(chǎn)品是指存儲在計算機可讀介質(zhì)中的計算機可讀程序代碼。
[0109]計算機可讀介質(zhì)可以是計算機可讀信號介質(zhì)或者計算機可讀存儲介質(zhì)。計算機可讀存儲介質(zhì)包含但不限于電子、磁性、光學、電磁、紅外或半導體系統(tǒng)、設備或者裝置,或者前述的任意適當組合,如隨機存取存儲器(RAM)、只讀存儲器(ROM)、可擦除可編程只讀存儲器(EPROM或者快閃存儲器)、光纖、便攜式只讀存儲器(CD-ROM)。
[0110]計算機中的處理器讀取存儲在計算機可讀介質(zhì)中的計算機可讀程序代碼,使得處理器能夠執(zhí)行在流程圖中每個步驟、或各步驟的組合中規(guī)定的功能動作;生成實施在框圖的每一塊、或各塊的組合中規(guī)定的功能動作的裝置。
[0111]計算機可讀程序代碼可以完全在用戶的計算機上執(zhí)行、部分在用戶的計算機上執(zhí)行、作為單獨的軟件包、部分在用戶的計算機上并且部分在遠程計算機上,或者完全在遠程計算機或者服務器上執(zhí)行。也應該注意,在某些替代實施方案中,在流程圖中各步驟、或框圖中各塊所注明的功能可能不按圖中注明的順序發(fā)生。例如,依賴于所涉及的功能,接連示出的兩個步驟、或兩個塊實際上可能被大致同時執(zhí)行,或者這些塊有時候可能被以相反順序執(zhí)行。
[0112]以上所述僅是本發(fā)明的優(yōu)選實施方式,應當指出,對于本【技術(shù)領域】的普通技術(shù)人員來說,在不脫離本發(fā)明技術(shù)原理的前提下,還可以做出若干改進和替換,這些改進和替換也應視為本發(fā)明的保護范圍。
【權(quán)利要求】
1.一種索引數(shù)據(jù)插入方法,應用于包含主索引的平衡樹狀的數(shù)據(jù)結(jié)構(gòu),其特征在于,所述索引數(shù)據(jù)插入方法包括以下步驟: 獲取大小達到第一設定閾值的目標子索引; 將所述目標子索引融合到所述主索引中。
2.如權(quán)利要求1所述的索引數(shù)據(jù)插入方法,其特征在于,所述目標子索引的構(gòu)造方法為: 在所述主索引的大小達到第二設定閾值時構(gòu)造所述目標子索引,并將待添加的索引數(shù)據(jù)插入所述目標子索引。
3.如權(quán)利要求2所述的索引數(shù)據(jù)插入方法,其特征在于,所述構(gòu)造所述目標子索引,并將待添加的索引數(shù)據(jù)插入所述目標子索引具體為: 構(gòu)造含有設定個節(jié)點層的目標子索引; 將被查詢的頻率最高的待添加的索引數(shù)據(jù)放入所述目標子索引的最高節(jié)點層的節(jié)點中;將被查詢的頻率最低的待添加的索引數(shù)據(jù)放入所述目標子索引的最低節(jié)點層的節(jié)點中,將被查詢的頻率介于最高頻率和最低頻率之間的待添加的索引數(shù)據(jù)按被查詢的頻率的大小放入所述最高節(jié)點層和所述最低節(jié)點層之間的節(jié)點層的節(jié)點中。
4.如權(quán)利要求3所述的索引數(shù)據(jù)插入方法,其特征在于,所述將所述目標子索引融合到所述主索引中具體為: 從所述達到所述第一設定閾值的所述目標子索引的最低節(jié)點層中的最小節(jié)點向最大節(jié)點掃描,復制掃描到的所述最小節(jié)點到所述最大節(jié)點的路徑上的待添加的索引數(shù)據(jù),按設定方法將所述路徑上的待添加的索引數(shù)據(jù)融合到所述主索引中。
5.如權(quán)利要求4所述的索引數(shù)據(jù)插入方法,其特征在于,所述設定方法為平衡樹數(shù)據(jù)插入法。
6.如權(quán)利要求4所述的索引數(shù)據(jù)插入方法,其特征在于,所述按設定方法將所述路徑上的待添加的索引數(shù)據(jù)融合到所述主索引中之后還包括: 刪除所述達到所述第一設定閾值的所述目標子索引。
7.如權(quán)利要求1所述的索引數(shù)據(jù)插入方法,其特征在于,所述融合操作的隔離級別為可反復讀操作。
8.如權(quán)利要求2所述的索引數(shù)據(jù)插入方法,其特征在于,所述索引數(shù)據(jù)插入方法還包括: 若所述主索引的大小沒有達到所述第二設定閾值,則將待添加的索引數(shù)據(jù)插入所述主索引。
9.如權(quán)利要求1所述的索引數(shù)據(jù)插入方法,其特征在于,所述索引數(shù)據(jù)插入方法還包括: 若所述目標子索引的大小沒有達到所述第一設定閾值,則將待添加的索引數(shù)據(jù)插入所述子索引。
10.一種索引數(shù)據(jù)插入系統(tǒng),應用于包含主索引的平衡樹狀的數(shù)據(jù)結(jié)構(gòu),其特征在于,所述索引數(shù)據(jù)插入系統(tǒng)包括: 目標子索引獲取單元,用于獲取大小達到第一設定閾值的目標子索引; 索引融合單元,用于將所述目標子索引融合到所述主索引中。
11.如權(quán)利要求10所述的索引數(shù)據(jù)插入系統(tǒng),其特征在于,所述目標子索引獲取單元包括: 第一目標子索引構(gòu)建單元,用于在所述主索引的大小達到第二設定閾值時構(gòu)造所述目標子索引,并將待添加的索引數(shù)據(jù)插入所述目標子索引。
12.如權(quán)利要求10所述的索引數(shù)據(jù)插入系統(tǒng),其特征在于,還包括: 第二目標子索引構(gòu)建單元,用于在所述目標子索引的大小達到第一設定閾值時,構(gòu)造下一個目標子索引。
13.如權(quán)利要求10所述的索引數(shù)據(jù)插入系統(tǒng),其特征在于,還包括: 閾值查詢單元,用于查詢所述主索引的大小是否達到第二設定閾值或查詢所述目標子索引的大小是否達到第一設定閾值,并將查詢結(jié)果發(fā)送給所述第一目標子索引構(gòu)建單元、所述第二目標子索引構(gòu)建單元或所述索引融合單元。
【文檔編號】G06F17/30GK104424267SQ201310385039
【公開日】2015年3月18日 申請日期:2013年8月29日 優(yōu)先權(quán)日:2013年8月29日
【發(fā)明者】鄭程光, 孫偉豐, 羅正海, 李 浩, 何奇, 劉慧娟, 王浩, 郭春庭 申請人:北大方正集團有限公司, 方正信息產(chǎn)業(yè)控股有限公司, 上海方正數(shù)字出版技術(shù)有限公司