一種基于數(shù)據(jù)分組的內(nèi)存數(shù)據(jù)組織查詢方法
【專利摘要】本發(fā)明公開一種基于數(shù)據(jù)分組的內(nèi)存數(shù)據(jù)組織查詢方法,其步驟包括:將數(shù)據(jù)分成多個分組,在每個分組設(shè)立獨(dú)立的插入任務(wù)隊列、插入線程和查詢線程;分組選擇線程為待插入數(shù)據(jù)選擇一個分組并將該數(shù)據(jù)插入到該分組的插入任務(wù)隊列中;每個插入線程輪詢其所屬分組的插入任務(wù)隊列,并將其中數(shù)據(jù)插入到該分組中;查詢?nèi)蝿?wù)分發(fā)線程將查詢?nèi)蝿?wù)分發(fā)給各分組的查詢線程,各查詢線程進(jìn)行分組內(nèi)部的數(shù)據(jù)查詢并將查詢結(jié)果反饋至查詢?nèi)蝿?wù)分發(fā)線程;查詢?nèi)蝿?wù)分發(fā)線程對各分組的查詢結(jié)果進(jìn)行匯總。本發(fā)明既能保證批量數(shù)據(jù)的快速的插入,又能有保證范圍查詢的快速的結(jié)果反饋,有效地提高了數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)查詢性能。
【專利說明】一種基于數(shù)據(jù)分組的內(nèi)存數(shù)據(jù)組織查詢方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及信息處理【技術(shù)領(lǐng)域】,尤其涉及到數(shù)據(jù)庫管理系統(tǒng)內(nèi)存數(shù)據(jù)的組織與查詢方法。該方法可以使用于任何關(guān)系數(shù)據(jù)庫使用的數(shù)據(jù)管理領(lǐng)域,尤其是范圍查詢比較多的數(shù)據(jù)分析領(lǐng)域。
【背景技術(shù)】
[0002]在數(shù)據(jù)庫的應(yīng)用領(lǐng)域,數(shù)據(jù)的查詢性能是數(shù)據(jù)庫最重要的指標(biāo)之一。為了提高數(shù)據(jù)庫的查詢性能,許多數(shù)據(jù)的組織管理方法被提出,如hash、B+樹、CSB+樹等索引結(jié)構(gòu)。這些方法,旨在提高數(shù)據(jù)的查詢的性能。
[0003]近年來,隨著應(yīng)用的發(fā)展,數(shù)據(jù)的分析應(yīng)用越來越多。如在金融領(lǐng)域,分析交易趨勢以及統(tǒng)計交易量;在制造業(yè),統(tǒng)計加工量、加工效率;在車輛監(jiān)控領(lǐng)域,統(tǒng)計某個時間區(qū)段的車輛流量等。這些應(yīng)用中,范圍查詢是最重要的查詢類型之一。在數(shù)據(jù)的管理查詢中,范圍查詢在數(shù)據(jù)的分析應(yīng)用領(lǐng)域占有重要的作用。如,給定一個時間區(qū)段,查詢該時間段內(nèi)的交易量或給定一個地區(qū),查詢該區(qū)域內(nèi)的交易總量等,都是金融領(lǐng)域里面重要的范圍查詢。
[0004]和精確查詢不同,范圍查詢除了搜索到對應(yīng)范圍需要消耗時間之外,對結(jié)果的遍歷獲取也同樣需要大量的時間消耗,尤其是當(dāng)查詢結(jié)果比較大的時候,結(jié)果獲取所需要的時間甚至要大于范圍搜索所需要的時間。傳統(tǒng)的數(shù)據(jù)管理方法中的查詢優(yōu)化,往往是針對搜索過程中的性能的優(yōu)化,而忽略了結(jié)果集獲取的優(yōu)化,因此,對范圍查詢的性能的提高有限。
[0005]同時,隨著硬件的發(fā)展,現(xiàn)代的多核處理器、GPU等提供了更多的并行處理的能力,因此使得在進(jìn)行數(shù)據(jù)管理以及更新、查詢處理的時候,可以通過更多的并行化來提高處理的性能。
[0006]本發(fā)明將面向數(shù)據(jù)的內(nèi)存管理,尤其是分析應(yīng)用領(lǐng)域中的范圍查詢的數(shù)據(jù)的管理,并利用現(xiàn)代處理器高并行處理能力的特點(diǎn),提出了基于數(shù)據(jù)分組的內(nèi)存數(shù)據(jù)組織和查詢優(yōu)化方法,并在此基礎(chǔ)之上,給出了改數(shù)據(jù)管理方法的并行的數(shù)據(jù)插入方法和并行的數(shù)據(jù)查詢方法,從而提高數(shù)據(jù)查詢、尤其是范圍查詢的性能。
【發(fā)明內(nèi)容】
[0007]傳統(tǒng)的內(nèi)存數(shù)據(jù)的管理和查詢優(yōu)化方法,主要是針對精確查找的查找過程的優(yōu)化,而范圍查找除了查找過程中的消耗之外,結(jié)果的遍歷獲取過程也是范圍查找的重要消耗之一。為此,本發(fā)明方案利用現(xiàn)代處理器高并發(fā)的特點(diǎn),面向數(shù)據(jù)分析應(yīng)用領(lǐng)域中的范圍查詢,提出了一種基于數(shù)據(jù)分組的內(nèi)存數(shù)據(jù)組織和查詢優(yōu)化方法,通過提高查詢過程中的并行度,有效地提高了范圍查詢的性能。
[0008]為實現(xiàn)上述目的,本發(fā)明采用如下技術(shù)方案:
[0009]一種基于數(shù)據(jù)分組的內(nèi)存數(shù)據(jù)組織查詢方法,其特征在于:[0010]1)將數(shù)據(jù)分成多個具有互相獨(dú)立的數(shù)據(jù)組織結(jié)構(gòu)的分組,在每個分組設(shè)立獨(dú)立的插入任務(wù)隊列、插入線程和查詢線程;
[0011]2)通過分組選擇線程為待插入數(shù)據(jù)選擇一個分組,并將該數(shù)據(jù)插入到該分組的插入任務(wù)隊列中;
[0012]3)每個插入線程輪詢其所屬分組的插入任務(wù)隊列,并將插入任務(wù)隊列中存在的數(shù)據(jù)插入到該所屬分組內(nèi)部的數(shù)據(jù)組織結(jié)構(gòu)中;
[0013]4)通過查詢?nèi)蝿?wù)分發(fā)線程將查詢?nèi)蝿?wù)分發(fā)給各分組的查詢線程,各查詢線程根據(jù)其所屬分組內(nèi)部的數(shù)據(jù)組織結(jié)構(gòu)進(jìn)行分組內(nèi)部的數(shù)據(jù)查詢;
[0014]5)將各分組的查詢結(jié)果返回至查詢客戶端。
[0015]進(jìn)一步地,步驟2)采用基本分組選擇的方式,或者采用基本分組選擇和輪詢相結(jié)合的動態(tài)分組選擇方法。所述基本分組選擇的方式可以是按照順序選擇數(shù)據(jù)分組、隨機(jī)選擇數(shù)據(jù)分組、根據(jù)待插入的值對分組數(shù)目進(jìn)行取余選擇分組等。為了防止過度的分組輪詢導(dǎo)致系統(tǒng)繁忙,可以為輪詢的循環(huán)次數(shù)限定一閾值,比如設(shè)為100次,若達(dá)到閾值次數(shù)的輪詢之后未選擇到分組,則分組選擇線程進(jìn)入等待狀態(tài),直到初始選擇分組的任務(wù)隊列有空閑。。
[0016]進(jìn)一步地,每個分組可以根據(jù)需求創(chuàng)建獨(dú)立的分組內(nèi)部的數(shù)據(jù)組織結(jié)構(gòu),如hash、B+樹等,所有已有的索引結(jié)構(gòu)都可以用作分組內(nèi)部的數(shù)據(jù)組織結(jié)構(gòu)。每個分組的數(shù)據(jù)組織結(jié)構(gòu)相同或者不同。
[0017]進(jìn)一步地,為每一個分組的查詢線程設(shè)置獨(dú)立的結(jié)果集緩存,分組完成內(nèi)部的查找并返回結(jié)果后,由分組的查詢線程直接將對應(yīng)的緩存輸出返回給查詢客戶端。
[0018]本發(fā)明具有的優(yōu)點(diǎn)和有益效果如下:
[0019]1、通過并行處理批量連續(xù)的數(shù)據(jù)插入操作,能夠有效的提高數(shù)據(jù)插入的性能;動態(tài)的分組選擇算法,平衡了各個分組數(shù)據(jù)之間實際的處理負(fù)荷,進(jìn)一步提高了批量插入的?生倉泛;
[0020]2、通過數(shù)據(jù)分組,減少了每個分組內(nèi)部的數(shù)據(jù),提高了分組處理的性能,同時,通過并行的分組查詢線程,能夠有效地減少整體查詢的時間,提高查詢性能;
[0021]3、在每個分組中,分組內(nèi)部的數(shù)據(jù)組織相互獨(dú)立,同時分組內(nèi)部的數(shù)據(jù)組織可以進(jìn)一步根據(jù)應(yīng)用需求采用已有的數(shù)據(jù)組織管理和查詢優(yōu)化技術(shù),可以很好的繼承已有的技術(shù)。
【專利附圖】
【附圖說明】
[0022]圖1為本發(fā)明的基于數(shù)據(jù)分組的內(nèi)存數(shù)據(jù)組織查詢方法的流程圖。
[0023]圖2為實施例中動態(tài)的分組選擇方法流程圖。
[0024]圖3為實施例中并行的批量數(shù)據(jù)插入的流程圖。
[0025]圖4為實施例中并行的范圍查詢的流程圖。
具體實施方案
[0026]下面通過具體實施例,并配合附圖,對本發(fā)明做詳細(xì)的說明。
[0027]本發(fā)明提出的基于數(shù)據(jù)分組的內(nèi)存數(shù)據(jù)組織查詢優(yōu)化方法,其總體流程如圖1所示,具體說明如下:
[0028]首先,所有的數(shù)據(jù)被分成不同的數(shù)據(jù)分組,每個分組建立獨(dú)立的分組數(shù)據(jù)組織結(jié)構(gòu),數(shù)據(jù)組織結(jié)構(gòu)可以是hash、B+樹等常用的經(jīng)典的內(nèi)存數(shù)據(jù)結(jié)構(gòu)。每個分組擁有自己獨(dú)立的插入線程、分組選擇線程和插入任務(wù)隊列。
[0029]如圖3所示,當(dāng)有一個新的數(shù)據(jù)要進(jìn)入系統(tǒng),分組選擇線程為該數(shù)據(jù)選擇一個唯一的分組。分組的確定可以根據(jù)不同的情況選擇不同的方法:如按照順序選擇數(shù)據(jù)分組、隨機(jī)選擇數(shù)據(jù)分組、或者根據(jù)要插入的值對分組數(shù)目進(jìn)行取余選擇分組等方法。
[0030]當(dāng)分組選擇線程為數(shù)據(jù)選擇確定的分組之后,將該數(shù)據(jù)插入到分組對應(yīng)的插入任務(wù)隊列中,即圖1中的“插入緩沖區(qū)”中,其中vi_l?Vn_n表示各插入緩沖區(qū)的數(shù)據(jù)。插入任務(wù)隊列是一個以該分組待插入值構(gòu)成的隊列。
[0031]每個分組的分組插入線程輪詢分組對應(yīng)的插入任務(wù)隊列,當(dāng)發(fā)現(xiàn)插入任務(wù)隊列不為空的時候,即存在待插入的值時,由分組插入線程根據(jù)每個分組內(nèi)部實際的數(shù)據(jù)組織結(jié)構(gòu)將數(shù)據(jù)插入到對應(yīng)分組內(nèi)部的數(shù)據(jù)組織結(jié)構(gòu)中。
[0032]當(dāng)批量連續(xù)的數(shù)據(jù)進(jìn)入系統(tǒng)中,由于不同分組處理速度不同,可能導(dǎo)致有的分組可能處于空閑狀態(tài),有的分組則出于繁忙的狀態(tài)。為了提高批量插入時的性能,本發(fā)明還進(jìn)一步提出了動態(tài)的分組選擇方法。
[0033]如圖2所示,動態(tài)的分組選擇方法采用基本分組選擇和輪詢相結(jié)合的方式。在動態(tài)的分組選擇方法中,當(dāng)有新的值要進(jìn)入系統(tǒng),先根據(jù)基本的分組選擇方法(順序選擇、隨機(jī)選擇等)為該值選擇初始的分組,如果初始的分組插入任務(wù)隊列有空閑,則直接將該值插入到該分組的任務(wù)隊列中,結(jié)束分組選擇。如果初始的分組插入任務(wù)隊列無空閑,則進(jìn)入輪詢狀態(tài)。輪詢從初始選擇的分組的開始,順序判斷每個分組的任務(wù)隊列是否有空閑,直到找到一個任務(wù)隊列有空閑的分組,將待插入的值插入到該分組的任務(wù)隊列中,完成分組選擇。為了防止過度的分組輪詢導(dǎo)致系統(tǒng)繁忙,為輪詢的循環(huán)次數(shù)限定了一個閾值(如100),在進(jìn)行了達(dá)到閾值次數(shù)的輪詢之后還沒有選擇到分組,則分組選擇線程進(jìn)入等待狀態(tài),直到初始選擇的分組的任務(wù)隊列有空閑后,將待插入的值插入到初始分組的任務(wù)隊列中,完成分組選擇。
[0034]圖3為并行的批量數(shù)據(jù)插入的整體流程圖。其中圖3(a)為分組選擇線程進(jìn)行動態(tài)分組的流程圖;圖3(13)為插入線程進(jìn)行分組內(nèi)部的數(shù)據(jù)插入的流程圖。如圖3(a)所示,首先,根據(jù)動態(tài)的分組選擇方法為待插入的值選擇一個分組,然后分組選擇線程進(jìn)入等待狀態(tài)等待分配下一個待插入的值。如圖3(b)所示,首先,分組插入線程輪詢分組插入隊列,當(dāng)分組插入隊列存在待插入的值,則分組插入線程進(jìn)行分組內(nèi)部的插入操作,然后再度輪詢插入隊列,直到有新的待插入的值。
[0035]本發(fā)明提出的數(shù)據(jù)組織及查詢優(yōu)化方法還創(chuàng)建獨(dú)立的查詢?nèi)蝿?wù)分發(fā)線程。如圖4所示,當(dāng)有新的查詢,查詢?nèi)蝿?wù)的分發(fā)線程將查詢?nèi)蝿?wù)分發(fā)給所有分組的查詢線程。同時查詢?nèi)蝿?wù)分發(fā)線程進(jìn)入等待狀態(tài)。分組的查詢線程獲取到查詢?nèi)蝿?wù)分發(fā)線程發(fā)送的查詢之后,根據(jù)每個分組內(nèi)部的數(shù)據(jù)組織結(jié)構(gòu)進(jìn)行各自分組內(nèi)部的數(shù)據(jù)的查詢,當(dāng)分組查詢線程完成當(dāng)前分組的查詢之后,將結(jié)果反饋給查詢?nèi)蝿?wù)分發(fā)線程,同時分組查詢線程進(jìn)入等待狀態(tài),等待新的查詢的到來。當(dāng)所有分組的分組線程都完成本分組的查詢之后,各分組將查詢結(jié)果直接反饋至查詢客戶端(這樣可以有更高的查詢效率),也可以通過查詢?nèi)蝿?wù)分發(fā)線程匯總各分組的查詢結(jié)果并返回至查詢客戶端。
[0036]下面提供一個具體應(yīng)用實例。本實例以要管理的數(shù)據(jù)為1-1000000之間的數(shù)據(jù)、分組內(nèi)部的數(shù)據(jù)組織管理結(jié)構(gòu)為B+樹,分組的數(shù)目為4為例子,介紹本發(fā)明提出的基于數(shù)據(jù)分組的內(nèi)存數(shù)據(jù)組織管理方法的具體實施方案。
[0037]在系統(tǒng)初始化的時候,為每個分組創(chuàng)建一個空的B+樹結(jié)構(gòu)、數(shù)據(jù)插入線程和數(shù)據(jù)查詢線程,每個數(shù)據(jù)創(chuàng)建一個插入任務(wù)隊列。插入任務(wù)隊列是一個長度為η的循環(huán)隊列,在本實施方案中η取10,每個位置進(jìn)行1-10的編號,每個隊列維護(hù)隊列頭head和隊列尾tail的編號,head表示第一個需要進(jìn)行插入的值,tail表示第一個可以插入新的插入值的位置,當(dāng)head和tail相等時,表示隊列為空,初始head和tail的編號均為I。同時創(chuàng)建獨(dú)立的分組選擇線程和查詢?nèi)蝿?wù)分發(fā)線程。每個分組按1-4進(jìn)行編號。
[0038]當(dāng)有輸入要進(jìn)入系統(tǒng),如值I。分組選擇線程按照動態(tài)的分組選擇方法為分組進(jìn)行選擇分組。初始分組的選擇方法選擇按值取模加I。則值I根據(jù)分組數(shù)4取模加I得到的結(jié)果是2,因此,值I的初始分組為2。此時,由于分組2的插入任務(wù)隊列為空,則直接將該值插入到tail指示的位置I中,然后將tail的序號設(shè)置為tail+Ι,即2。
[0039]分組的插入線程輪詢對應(yīng)分組的插入任務(wù)隊列,判斷head和tail的值,當(dāng)head和tail不一致時,則從隊列的head位置中取出對應(yīng)的值進(jìn)行處理,同時將head值設(shè)置為head+Ι。在I被插入之后,分組2的插入線程則從I的位置取出待插入的值1,并將head值設(shè)置為2,之后進(jìn)行分組內(nèi)部數(shù)據(jù)的B+樹的值的插入的操作。
[0040]在插入隊列中,為了區(qū)分空隊列和滿隊列,在隊列使用過程中預(yù)留一個空閑的位置,即當(dāng)(tail+l)%10=head時,就表示隊列已滿。對于n=10的隊列,最多智能存放9個待插入的值。
[0041 ] 當(dāng)有輸入如1000要進(jìn)入系統(tǒng)時,先計算的1000的初始選擇的分組為1000%4+1=1,即初始分組為分組I,如果此時分組的狀態(tài)為head為I, tail為10時,表示分組I對應(yīng)的任務(wù)隊列已經(jīng)沒有空閑。此時,分組選擇線程,進(jìn)入輪詢狀態(tài)。分組選擇線程按順序循環(huán)判斷分組2、分組3、分組4、分組1、分組2....分組4的狀態(tài),假若發(fā)現(xiàn)分組3的狀態(tài)為head為3,tail為9,則表示分組3有空閑,則將1000加入到分組3任務(wù)隊列中編號為9的位置,tail設(shè)置為10。
[0042]重復(fù)上述過程,直到所有的數(shù)據(jù)都被加入到系統(tǒng)的分組中。
[0043]在查詢的操作中,如需要查詢[10,1000]范圍的數(shù)據(jù),則查詢?nèi)蝿?wù)分發(fā)線程將該查詢?nèi)蝿?wù)發(fā)送給4個分組各自的查詢線程,然后進(jìn)入等待狀態(tài)。每個查詢線程在各自分組的B+樹中按照B+樹查詢的方法,先查找到10所對應(yīng)的位置,然后遍歷B+樹的葉節(jié)點(diǎn)獲取所有在范圍[10,1000]中的結(jié)果。
[0044]在實施過程中,為了減少數(shù)據(jù)合并或者對同一緩存空間的互斥的延遲,為每一個分組的查詢線程設(shè)置獨(dú)立的結(jié)果集緩存,當(dāng)分組完成內(nèi)部的查找并返回結(jié)果,由分組的查詢線程直接將對應(yīng)的緩存輸出返回給進(jìn)行查詢的客戶端。即客戶端程序?qū)⒉樵儌鬟f給查詢?nèi)蝿?wù)分發(fā)線程,任務(wù)分發(fā)線程將任務(wù)分發(fā)給分組查詢線程,每個分組查詢線程直接返回當(dāng)前分組的查詢結(jié)果由客戶端(查詢提供程序)使用。
[0045]以上實施例僅用以說明本發(fā)明的技術(shù)方案而非對其進(jìn)行限制,本領(lǐng)域的普通技術(shù)人員可以對本發(fā)明的技術(shù)方案進(jìn)行修改或者等同替換,而不脫離本發(fā)明的精神和范圍,本發(fā)明的保護(hù)范圍應(yīng)以權(quán)利要求書所述為準(zhǔn)。
【權(quán)利要求】
1.一種基于數(shù)據(jù)分組的內(nèi)存數(shù)據(jù)組織查詢方法,其步驟包括: 1)將數(shù)據(jù)分成多個具有互相獨(dú)立的數(shù)據(jù)組織結(jié)構(gòu)的分組,在每個分組設(shè)立獨(dú)立的插入任務(wù)隊列、插入線程和查詢線程; 2)通過分組選擇線程為待插入數(shù)據(jù)選擇一個分組,并將該數(shù)據(jù)插入到該分組的插入任務(wù)隊列中; 3)每個插入線程輪詢其所屬分組的插入任務(wù)隊列,并將插入任務(wù)隊列中存在的數(shù)據(jù)插入到該所屬分組內(nèi)部的數(shù)據(jù)組織結(jié)構(gòu)中; 4)通過查詢?nèi)蝿?wù)分發(fā)線程將查詢?nèi)蝿?wù)分發(fā)給各分組的查詢線程,各查詢線程根據(jù)其所屬分組內(nèi)部的數(shù)據(jù)組織結(jié)構(gòu)進(jìn)行分組內(nèi)部的數(shù)據(jù)查詢; 5)將各分組的查詢結(jié)果返回至查詢客戶端。
2.如權(quán)利要求1所述的方法,其特征在于,步驟2)采用基本分組選擇方法,包括如下方式:按照順序選擇數(shù)據(jù)分組、隨機(jī)選擇數(shù)據(jù)分組、根據(jù)待插入的值對分組數(shù)目進(jìn)行取模選擇分組。
3.如權(quán)利要求1所述的方法,其特征在于:步驟2)采用基本分組選擇和輪詢相結(jié)合的動態(tài)分組選擇方法處理批量數(shù)據(jù)的插入。
4.如權(quán)利要求3所述的方法,其特征在于:在輪詢之前根據(jù)所述基本的分組選擇方法選擇初始分組,如果初始分組的插入任務(wù)隊列有空閑,則直接將待插入數(shù)據(jù)插入到該分組的任務(wù)隊列中,并結(jié)束分組選擇;如果初始分組的插入任務(wù)隊列無空閑,則進(jìn)入輪詢狀態(tài)。
5.如權(quán)利要求4所述的方法,其特征在于:為所述輪詢的循環(huán)次數(shù)限定一閾值,若達(dá)到閾值次數(shù)的輪詢之后未選擇到分組,則分組選擇線程進(jìn)入等待狀態(tài),直到初始選擇分組的任務(wù)隊列有空閑。
6.如權(quán)利要求5所述的方法,其特征在于:所述閾值為100次。
7.如權(quán)利要求1至5中任一項所述的方法,其特征在于:每個分組根據(jù)需求創(chuàng)建獨(dú)立的內(nèi)部的數(shù)據(jù)組織結(jié)構(gòu),每個分組的數(shù)據(jù)組織結(jié)構(gòu)相同或者不同。
8.如權(quán)利要求7所述的方法,其特征在于,所述數(shù)據(jù)組織結(jié)構(gòu)的種類包括:hash、B+樹。
9.如權(quán)利要求1至5中任一項所述的方法,其特征在于:步驟5)中各分組的查詢結(jié)果直接返回至所述查詢客戶端,或者通過查詢?nèi)蝿?wù)分發(fā)線程匯總各分組的查詢結(jié)果,然后返回至查詢客戶端。
10.如權(quán)利要求9所述的方法,其特征在于:為每一個分組的查詢線程設(shè)置獨(dú)立的結(jié)果集緩存,分組完成內(nèi)部的查找并返回結(jié)果后,由分組的查詢線程直接將對應(yīng)的緩存輸出返回給查詢客戶端。
【文檔編號】G06F17/30GK103810223SQ201210461154
【公開日】2014年5月21日 申請日期:2012年11月15日 優(yōu)先權(quán)日:2012年11月15日
【發(fā)明者】郭超, 李坤, 王永炎, 羅雄飛, 王宏安 申請人:中國科學(xué)院軟件研究所