專利名稱::數(shù)據(jù)庫分區(qū)方法與系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明總體上涉及數(shù)據(jù)庫分區(qū)方法與系統(tǒng),特別的本發(fā)明涉及一種動態(tài)的數(shù)據(jù)庫分區(qū)方法與系統(tǒng)。
背景技術(shù):
:現(xiàn)有的數(shù)據(jù)庫系統(tǒng)中,當(dāng)用戶應(yīng)用(application)的數(shù)據(jù)被裝載以后,隨著用戶業(yè)務(wù)的不斷擴(kuò)大,數(shù)據(jù)庫中的數(shù)據(jù)可能會變的異常龐大。舉個簡單例子一個包含十年發(fā)票記錄的表可能占據(jù)幾百萬行的數(shù)據(jù)空間,查詢(query)這樣一個表所耗費(fèi)的時間完全無法滿足用戶的需要。為了提高查詢的速度和效率,數(shù)據(jù)庫分區(qū)技術(shù)應(yīng)運(yùn)而生。具體而言,數(shù)據(jù)庫在一個非共享的環(huán)境中被分解為獨(dú)立的分區(qū),每個分區(qū)都具有自己的資源。數(shù)據(jù)通過哈希Hash算法均允地散列到不同的分區(qū)內(nèi),每個分區(qū)只負(fù)責(zé)處理自己的數(shù)據(jù)。當(dāng)用戶發(fā)出數(shù)據(jù)庫查詢語句SQL操作后,被連接的分區(qū)負(fù)責(zé)處理用戶的請求。數(shù)據(jù)庫分區(qū)的主要目的是為了提高數(shù)據(jù)并行處理性能,以及在特定的數(shù)據(jù)庫查詢操作中減少數(shù)據(jù)讀寫的總量以縮減響應(yīng)時間。數(shù)據(jù)庫分區(qū)可以是物理分區(qū)也可以是邏輯分區(qū)。在一臺物理機(jī)器上部署的一個分區(qū),被稱為物理分區(qū),如果是在一臺多處理系統(tǒng)(SymmetricMultiProcessing,簡稱SMP)機(jī)器上部署多個分區(qū),這些分區(qū)被稱為邏輯分區(qū)。數(shù)據(jù)庫可以選擇物理分區(qū),也可以選擇邏輯分區(qū)。通常,如果決定采用大的SMP機(jī)器,有更多的CPU、內(nèi)存及硬盤,數(shù)據(jù)庫會采用邏輯分區(qū);如果決定采用多臺物理機(jī)器,數(shù)據(jù)庫會通過非共享的體系結(jié)構(gòu)采用物理分區(qū);如果決定采用多臺SMP機(jī)器,數(shù)據(jù)庫則會采用物理分區(qū)和邏輯分區(qū)結(jié)合的方式。數(shù)據(jù)庫分區(qū)技術(shù)可以具備兩大優(yōu)點(diǎn),其一是帶來數(shù)據(jù)庫性能的提升(Increasedperformance),繼續(xù)上面的例子,一個占據(jù)了幾百萬行的數(shù)據(jù)的發(fā)票記錄,利用數(shù)據(jù)庫分區(qū)技術(shù),可以被分為十個不同的分區(qū),每個分區(qū)包含的是其中一年的記錄。百萬行的表劃分為10個分區(qū),每個分區(qū)就包含十萬行數(shù)據(jù),那么查詢分區(qū)需要的時間僅僅是全表掃描的十分之一了。其二,數(shù)據(jù)庫分區(qū)技術(shù)可以實(shí)現(xiàn)對數(shù)據(jù)管理的簡化(Simplifieddatamanagement),分區(qū)技術(shù)可以讓數(shù)據(jù)庫的管理員利用其豐富的數(shù)據(jù)庫管理經(jīng)驗(yàn)提升數(shù)據(jù)的管理能力。通過優(yōu)良的分區(qū),管理員可以簡化特定數(shù)據(jù)操作的執(zhí)行方式。對一個數(shù)據(jù)庫應(yīng)用的管理員而言,只要數(shù)據(jù)庫供應(yīng)商劃分了分區(qū),或者在初始配置時,由數(shù)據(jù)庫應(yīng)用的開發(fā)人員按照數(shù)據(jù)庫應(yīng)用的管理員的指示進(jìn)行了分區(qū),數(shù)據(jù)庫應(yīng)用的管理員在后續(xù)的數(shù)據(jù)庫操作時往往沒有能力對數(shù)據(jù)分區(qū)規(guī)則進(jìn)行主動修改。數(shù)據(jù)庫供應(yīng)商所提供的初始化分區(qū)方法往往僅支持基于哈希表的分區(qū),這樣的分區(qū)方案與應(yīng)用數(shù)據(jù)完全無關(guān)——比如,無法實(shí)現(xiàn)上文的例子中的按年的分區(qū)方按,缺少分區(qū)的靈活度。所以很多數(shù)據(jù)庫使用者更傾向于在數(shù)據(jù)庫初始化分區(qū)時,編寫應(yīng)用程序代碼,以實(shí)現(xiàn)數(shù)據(jù)庫分區(qū)。然而通過編寫程序代碼實(shí)現(xiàn)數(shù)據(jù)分區(qū)修改起來比較復(fù)雜,數(shù)據(jù)庫的使用者往往需要通過應(yīng)用程序的開發(fā)人員來修改代碼才能修改其分區(qū)方案。但是基于業(yè)務(wù)的應(yīng)用(transactionbasedapplications)越來越普及。對于大多數(shù)數(shù)據(jù)庫應(yīng)用而言,管理員很可能無法在一開始設(shè)計(jì)出有利的初始化分區(qū)方案。其結(jié)果是,隨著業(yè)務(wù)的不斷發(fā)展和數(shù)據(jù)量的不斷提升,數(shù)據(jù)庫系統(tǒng)的響應(yīng)時間將會越來越慢,用戶體驗(yàn)難以令人接受。在一些實(shí)際應(yīng)用中,近期數(shù)據(jù)的查詢率可能會遠(yuǎn)遠(yuǎn)高于歷史數(shù)據(jù)的查詢率。數(shù)據(jù)庫管理員在一開始設(shè)定的分區(qū)規(guī)則——比如2009年以后的數(shù)據(jù)和2009年以前的數(shù)據(jù)被放置在不同的兩個分區(qū)上——隨著時間的改變也需要加以更新——比如一年以后將分界年由2009年修改為2010年,即2010年以后的數(shù)據(jù)和2010年以前的數(shù)據(jù)被放置在不同的兩個分區(qū)上。可見,現(xiàn)有技術(shù)雖然提供了數(shù)據(jù)庫分區(qū)技術(shù),但是很難在不改變應(yīng)用程序代碼的情況下,實(shí)現(xiàn)靈活的數(shù)據(jù)分區(qū)。
發(fā)明內(nèi)容為了解決現(xiàn)有技術(shù)中的問題,本發(fā)明提供了一種靈活、動態(tài)的數(shù)據(jù)庫分區(qū)技術(shù)。本發(fā)明主要利用在數(shù)據(jù)庫的數(shù)據(jù)表中插入數(shù)據(jù)分區(qū)鍵值的方法,以將符合特定數(shù)據(jù)分區(qū)規(guī)則的數(shù)據(jù)條目存儲到特定的分區(qū)上,從而實(shí)現(xiàn)可更新,可隨意定制的數(shù)據(jù)庫分區(qū)方案。通過本發(fā)明,數(shù)據(jù)庫使用者可以在不改變應(yīng)用程序代碼的前提下,動態(tài)的對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行分區(qū)或者重新分區(qū)。這樣,數(shù)據(jù)庫使用者可以以最低的成本實(shí)現(xiàn)靈活的數(shù)據(jù)管理,同時大大提升數(shù)據(jù)庫的查詢速度和效率。需要說明的是,本發(fā)明并不特別限定分區(qū)的方式是邏輯分區(qū)還是物理分區(qū),實(shí)際上本發(fā)明既適用于邏輯分區(qū)的數(shù)據(jù)庫也適用于物理分區(qū)的數(shù)據(jù)庫。具體而言,本發(fā)明提供了一種對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行分區(qū)的方法,所述方法包括獲取數(shù)據(jù)分區(qū)規(guī)則,所述數(shù)據(jù)分區(qū)規(guī)則用于指示數(shù)據(jù)分區(qū)條件與分區(qū)的對應(yīng)關(guān)系;基于所述數(shù)據(jù)分區(qū)規(guī)則以及分區(qū)與數(shù)據(jù)分區(qū)鍵值的對應(yīng)關(guān)系,建立數(shù)據(jù)分區(qū)條件與數(shù)據(jù)分區(qū)鍵值的對應(yīng)關(guān)系;按照數(shù)據(jù)分區(qū)條件與數(shù)據(jù)分區(qū)鍵值的對應(yīng)關(guān)系對數(shù)據(jù)庫中的數(shù)據(jù)條目添加對應(yīng)的數(shù)據(jù)分區(qū)鍵值;以及根據(jù)數(shù)據(jù)條目的數(shù)據(jù)分區(qū)鍵值將數(shù)據(jù)條目存儲到數(shù)據(jù)庫中的對應(yīng)分區(qū)。本發(fā)明還提供了一種數(shù)據(jù)庫查詢方法,所述數(shù)據(jù)庫中的數(shù)據(jù)已經(jīng)按照上述在數(shù)據(jù)庫中進(jìn)行分區(qū)的方法進(jìn)行了分區(qū),該數(shù)據(jù)庫查詢方法包括獲得數(shù)據(jù)查詢請求;解析數(shù)據(jù)查詢請求;判斷所述數(shù)據(jù)查詢請求是否與至少一個分區(qū)相匹配;響應(yīng)于所述數(shù)據(jù)查詢請求與至少一個分區(qū)相匹配的判斷,查找與該數(shù)據(jù)查詢請求對應(yīng)的分區(qū)鍵值;對數(shù)據(jù)查詢請求進(jìn)行處理以將將該分區(qū)鍵值添加到所述數(shù)據(jù)查詢請求中;以及向數(shù)據(jù)庫發(fā)送處理過的數(shù)據(jù)查詢請求。本發(fā)明還提供了一種對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行分區(qū)的系統(tǒng),所述系統(tǒng)包括獲取數(shù)據(jù)分區(qū)規(guī)則的裝置,所述數(shù)據(jù)分區(qū)規(guī)則用于指示數(shù)據(jù)分區(qū)條件與分區(qū)的對應(yīng)關(guān)系;基于所述數(shù)據(jù)分區(qū)規(guī)則以及分區(qū)與數(shù)據(jù)分區(qū)鍵值的對應(yīng)關(guān)系,建立數(shù)據(jù)分區(qū)條件與數(shù)據(jù)分區(qū)鍵值的對應(yīng)關(guān)系的裝置;按照數(shù)據(jù)分區(qū)條件與數(shù)據(jù)分區(qū)鍵值的對應(yīng)關(guān)系對數(shù)據(jù)庫中的數(shù)據(jù)條目添加對應(yīng)的數(shù)據(jù)分區(qū)鍵值的裝置;以及根據(jù)數(shù)據(jù)條目的數(shù)據(jù)分區(qū)鍵值,將數(shù)據(jù)條目存儲到數(shù)據(jù)庫中的對應(yīng)分區(qū)的裝置。。本發(fā)明還提供了一種數(shù)據(jù)庫查詢系統(tǒng),所述數(shù)據(jù)庫中的數(shù)據(jù)由上述在數(shù)據(jù)庫中進(jìn)行數(shù)據(jù)分區(qū)的系統(tǒng)進(jìn)行了分區(qū),所述數(shù)據(jù)庫查詢系統(tǒng)包括獲得數(shù)據(jù)查詢請求的裝置;解析數(shù)據(jù)查詢請求;判斷所述數(shù)據(jù)查詢請求是否與至少一個分區(qū)相匹配的裝置;響應(yīng)于所述數(shù)據(jù)查詢請求與至少一個分區(qū)相匹配的判斷,查找與該數(shù)據(jù)查詢請求對應(yīng)的分區(qū)鍵值的裝置;對數(shù)據(jù)查詢請求進(jìn)行處理以將將該分區(qū)鍵值添加到所述數(shù)據(jù)查詢請求中的裝置;以及向數(shù)據(jù)庫發(fā)送處理過的數(shù)據(jù)查詢請求的裝置。上述描述大致列舉了本發(fā)明的優(yōu)越之處,通過結(jié)合附圖與本發(fā)明最佳實(shí)施例的詳細(xì)說明,本發(fā)明的這些以及其它優(yōu)點(diǎn)將更加明顯。本說明中所參考的附圖只用于示例本發(fā)明的典型實(shí)施例,不應(yīng)該認(rèn)為是對本發(fā)明范圍的限制。圖1是對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行分區(qū)的方法流程圖。圖2是為支持?jǐn)?shù)據(jù)分區(qū)的數(shù)據(jù)庫預(yù)先計(jì)算與分區(qū)對應(yīng)的數(shù)據(jù)分區(qū)鍵值的流程圖。圖3是為不支持?jǐn)?shù)據(jù)分區(qū)的數(shù)據(jù)庫定義數(shù)據(jù)分區(qū)鍵值的流程圖。圖4是批量添加分區(qū)鍵值的流程圖。圖5是逐個添加分區(qū)鍵值的流程圖。圖6是對數(shù)據(jù)庫中的數(shù)據(jù)條目進(jìn)行處理的流程圖。圖7是基于動態(tài)的數(shù)據(jù)庫分區(qū)技術(shù),進(jìn)行數(shù)據(jù)庫查詢的流程圖。圖8是在數(shù)據(jù)庫中對數(shù)據(jù)進(jìn)行分區(qū)的系統(tǒng)框圖。圖9是基于動態(tài)的數(shù)據(jù)庫分區(qū)技術(shù),進(jìn)行數(shù)據(jù)庫查詢的數(shù)據(jù)庫查詢系統(tǒng)的系統(tǒng)框圖。具體實(shí)施例方式下列討論中,提供大量具體的細(xì)節(jié)以幫助徹底了解本發(fā)明。然而,很顯然對于本領(lǐng)域技術(shù)人員來說,即使沒有這些具體細(xì)節(jié),并不影響對本發(fā)明的理解。并且應(yīng)該認(rèn)識到,使用如下的任何具體術(shù)語僅僅是為了方便描述,因此,本發(fā)明不應(yīng)當(dāng)局限于只用在這樣的術(shù)語所標(biāo)識和/或暗示的任何特定應(yīng)用中。除非另有說明,本發(fā)明所述的功能可用硬件或軟件或它們的結(jié)合來運(yùn)行。然而,在一優(yōu)選實(shí)施列中,除非另有說明,這些功能是由處理器,如計(jì)算機(jī)或電子數(shù)據(jù)處理器,按照編碼,如計(jì)算機(jī)程序編碼,的集成電路來執(zhí)行的。一般來說,為了實(shí)現(xiàn)本發(fā)明的實(shí)施例而執(zhí)行的方法可以是操作系統(tǒng)或特定應(yīng)用程序的一部分、程序、模塊、對象或指令序列。本發(fā)明的軟件通常包括將由本地計(jì)算機(jī)呈現(xiàn)成機(jī)器可讀格式的眾多指令,因此是可執(zhí)行指令。此外,程序包括相對于程序來說駐留在本地或在存儲器中找到的變量和數(shù)據(jù)結(jié)構(gòu)。另外,下文描述的各種程序可以根據(jù)在本發(fā)明的特定實(shí)施例中實(shí)現(xiàn)它們的應(yīng)用方法來識別。當(dāng)攜帶指向本發(fā)明的功能的計(jì)算機(jī)可讀指令時,這樣的信號承載媒體代表本發(fā)明的實(shí)施例。圖1是對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行分區(qū)的方法流程圖。在步驟101中獲取數(shù)據(jù)分區(qū)規(guī)則,所述數(shù)據(jù)分區(qū)規(guī)則用于指示數(shù)據(jù)分區(qū)條件與數(shù)據(jù)分區(qū)的對應(yīng)關(guān)系。按照本發(fā)明的一個實(shí)施例,所述數(shù)據(jù)分區(qū)規(guī)則按照數(shù)據(jù)庫中數(shù)據(jù)的查詢頻率進(jìn)行定義,即把經(jīng)常會被查詢的數(shù)據(jù)放到一個數(shù)據(jù)分區(qū)上,并且把不經(jīng)常被查詢的歷史數(shù)據(jù)放到其它的數(shù)據(jù)分區(qū)上。數(shù)據(jù)分區(qū)規(guī)則可以是數(shù)據(jù)庫應(yīng)用的系統(tǒng)管理員根據(jù)自己對于數(shù)據(jù)查詢的經(jīng)驗(yàn)和對于數(shù)據(jù)分區(qū)的了解而定義的,也可以是根據(jù)一定的反饋機(jī)制自動定義的(關(guān)于反饋機(jī)制將在后文中進(jìn)行更加詳細(xì)的描述)。下面以一個簡單的例子進(jìn)行說明。如下面表1所示,假設(shè)一個數(shù)據(jù)庫應(yīng)用中僅存儲了一張名為Sales^rder的表,該表反映了產(chǎn)品的銷售狀況。該表中的列值包括Id,Custermer_id,Product,Year,Status。其中Status所表示的數(shù)據(jù)值包括三種running,finished,以及canceled。表1系統(tǒng)管理員對數(shù)據(jù)庫中的數(shù)據(jù)的查詢狀態(tài)具備一定的經(jīng)驗(yàn),他知道最經(jīng)常被查詢的數(shù)據(jù)是當(dāng)年的數(shù)據(jù),即2009年以后的數(shù)據(jù)或者雖然該數(shù)據(jù)在2009年以前產(chǎn)生,但是其Status值還處于Running狀態(tài)。正如上文中提到的,系統(tǒng)管理員在一開始未必能夠定義出最合適的數(shù)據(jù)分區(qū)規(guī)則,隨著數(shù)據(jù)查詢量的增長,系統(tǒng)管理員可以逐步優(yōu)化其數(shù)據(jù)分區(qū)規(guī)則。假設(shè)系統(tǒng)管理員希望將數(shù)據(jù)分為三個分區(qū)P0,P1和P2。在一種實(shí)施例中,系統(tǒng)管理員需要創(chuàng)建三個分區(qū)(圖中未示出),比如在新數(shù)據(jù)裝載時,創(chuàng)建三個新的分區(qū);在另一種實(shí)施例中,系統(tǒng)管理員需要對已有分區(qū)進(jìn)行更新,比如已有兩個分區(qū)PO和P1,系統(tǒng)管理員需要增加一個新的分區(qū)P2;當(dāng)然,在一種實(shí)施例中,系統(tǒng)管理員可以不對數(shù)據(jù)分區(qū)進(jìn)行改變,比如已有的分區(qū)就是P0,P1和P2,系統(tǒng)管理員并不打算修改已有的分區(qū),而是希望修改已有的數(shù)據(jù)分區(qū)規(guī)則,使得數(shù)據(jù)庫中的數(shù)據(jù)條目按照新的分區(qū)規(guī)則在三個分區(qū)中重新進(jìn)行分配。在表2中,系統(tǒng)管理員將相關(guān)分區(qū)條件和具體分區(qū)進(jìn)行對應(yīng),從而形成分區(qū)規(guī)則。需要說明的是本發(fā)明并不試圖保護(hù)任何具體的分區(qū)策略,因?yàn)檫@些策略完全取決于數(shù)據(jù)庫應(yīng)用本身的特性。本發(fā)明對此進(jìn)行描述僅僅是為了說明本發(fā)明的應(yīng)用場景。表2回到附圖1,字母A表示本發(fā)明中可選的獲得每個分區(qū)對應(yīng)的數(shù)據(jù)分區(qū)鍵值的具體步驟將在后文中進(jìn)行更加詳細(xì)的說明。在步驟103,基于所述數(shù)據(jù)分區(qū)規(guī)則以及分區(qū)與數(shù)據(jù)分區(qū)鍵值的對應(yīng)關(guān)系,建立數(shù)據(jù)分區(qū)規(guī)則與數(shù)據(jù)分區(qū)鍵值(PK)的對應(yīng)關(guān)系。所述對應(yīng)關(guān)系可以被記錄在匹配表中。本領(lǐng)域的普通技術(shù)人員理解,對于支持分區(qū)的數(shù)據(jù)庫而言,每一個分區(qū)都對應(yīng)至少一個數(shù)據(jù)分區(qū)鍵值。數(shù)據(jù)分區(qū)鍵值可以靈活地控制將數(shù)據(jù)存儲在分區(qū)中的哪個位置。本步驟利用數(shù)據(jù)分區(qū)鍵值標(biāo)識對應(yīng)的分區(qū),從而通過數(shù)據(jù)分區(qū)鍵值將數(shù)據(jù)分區(qū)規(guī)則與相關(guān)分區(qū)相對應(yīng)。有關(guān)數(shù)據(jù)分區(qū)鍵值的取得過程將在下文中進(jìn)行更加詳細(xì)的描述。在本發(fā)明的一個實(shí)施例中P0對應(yīng)的PK為3690,P1對應(yīng)的PK為3712,P2對應(yīng)的PK為2730。表3示出了記錄數(shù)據(jù)分區(qū)條件與數(shù)據(jù)分區(qū)鍵值的對應(yīng)關(guān)系的匹配表。具體而言,表3可以被實(shí)現(xiàn)為表3-1或表3-2。其中表3-1用取值范圍表示各個參數(shù),而表3-2使用更詳細(xì)的列舉的方式表示各個參數(shù)。在本發(fā)明的一個實(shí)施例中,一個PK僅與一個分區(qū)相對應(yīng)。而本領(lǐng)域的普通技術(shù)人員理解,實(shí)際上也可由多個PK對應(yīng)一個分區(qū)。表3-1表3-2回到附圖1,字母B表示可選的對數(shù)據(jù)庫中的數(shù)據(jù)條目進(jìn)行處理的流程將在后文中進(jìn)行詳細(xì)的描述。接下來,在步驟105,按照數(shù)據(jù)分區(qū)規(guī)則對數(shù)據(jù)庫中的數(shù)據(jù)條目添加對應(yīng)的數(shù)據(jù)分區(qū)鍵值。添加數(shù)據(jù)分區(qū)鍵值可以通過在數(shù)據(jù)庫的表中添加新的一列值來完成。具體的步驟將在下文中進(jìn)行更加詳細(xì)的描述。表4示出了添加了對應(yīng)的分區(qū)鍵值的數(shù)據(jù)條目的表。表4附圖1中,與步驟105相關(guān)聯(lián)的字母C表示添加數(shù)據(jù)分區(qū)鍵值的具體步驟將在后文中進(jìn)行詳細(xì)的描述。在步驟107中,根據(jù)數(shù)據(jù)條目的數(shù)據(jù)分區(qū)鍵值將數(shù)據(jù)條目存儲到數(shù)據(jù)庫中的對應(yīng)分區(qū)。比如,對于表4中Id為1的數(shù)據(jù)條目,由于添加了數(shù)據(jù)分區(qū)鍵值2730,所述數(shù)據(jù)條目將被存儲到分區(qū)P2中。相似的,Id為2的數(shù)據(jù)條目也將被存儲到分區(qū)P2中,Id為3的數(shù)據(jù)條目將被存儲到分區(qū)P0中,Id為4的數(shù)據(jù)條目將被存儲到分區(qū)P1中,以此類推,直到所有的數(shù)據(jù)條目都遷移到指定的分區(qū)。當(dāng)新的數(shù)據(jù)條目要被加入到數(shù)據(jù)庫中時,可以按照步驟105中的方法,對其添加PK值,從而將其定位到指定的分區(qū)。因此,雖然上文中以對已經(jīng)裝載的數(shù)據(jù)進(jìn)行數(shù)據(jù)遷移為例進(jìn)行說明,但是本發(fā)明并非僅限于現(xiàn)存數(shù)據(jù)的數(shù)據(jù)遷移,本發(fā)明同樣可以適用于按照數(shù)據(jù)分區(qū)規(guī)則裝載新的數(shù)據(jù)。圖2是為支持?jǐn)?shù)據(jù)分區(qū)的數(shù)據(jù)庫預(yù)先計(jì)算與分區(qū)對應(yīng)的數(shù)據(jù)分區(qū)鍵值的流程圖。現(xiàn)有技術(shù)中的數(shù)據(jù)庫分區(qū)技術(shù)通常都是通過Hash算法將數(shù)據(jù)均允地散列到不同的分區(qū)內(nèi),每個分區(qū)只負(fù)責(zé)處理自己的數(shù)據(jù)。然而,對于大部分?jǐn)?shù)據(jù)庫而言,由于Hash算法并不公開,所以數(shù)據(jù)庫應(yīng)用的用戶并不知道某個分區(qū)所對應(yīng)的數(shù)據(jù)分區(qū)鍵值是多少,例如,用戶并不知道具體使用什么數(shù)據(jù)分區(qū)鍵值可以把某條數(shù)據(jù)分配到P0上。因此需要對與各個分區(qū)對應(yīng)的數(shù)據(jù)分區(qū)鍵值進(jìn)行預(yù)先計(jì)算。具體而言,在步驟203,在數(shù)據(jù)庫中創(chuàng)建一張表。所述表為一張空表,其列值用于存儲數(shù)據(jù)分區(qū)鍵值。創(chuàng)建所述空表可以通過下述語句實(shí)現(xiàn)Createtabletablel(collBIGINT)DISTRIBUTEBYHASH(coll)該語句表示在空表tablel中有一個列coll,其用于存儲整形數(shù)據(jù)。在步驟205,將至少一個數(shù)據(jù)分區(qū)鍵值插入到所述表中。所述數(shù)據(jù)分區(qū)鍵值可以是一個隨機(jī)數(shù),比如任意一個1000-9999的整數(shù),如3690。在空表中插入隨機(jī)數(shù)的目的就是為了測試該隨機(jī)數(shù)所對應(yīng)的分區(qū)。將分區(qū)鍵值插入到所述空表中可以通過下述語句實(shí)現(xiàn)Insertintotable1values(3690);Insertintotablelvalues(3712);Insertintotablelvalues(2730)該語句表示向空表中插入各個值。在步驟207,查詢與所述數(shù)據(jù)分區(qū)鍵值(3690,3712,2730)對應(yīng)的分區(qū)號,以確定所述數(shù)據(jù)分區(qū)鍵值與所述分區(qū)號的對應(yīng)關(guān)系。具體而言,該步驟通過查詢含有特定數(shù)據(jù)分區(qū)鍵值(如之前任意挑選的隨機(jī)數(shù))的記錄會被分配到哪一個分區(qū)中來確定所述數(shù)據(jù)分區(qū)鍵值與所述分區(qū)號的對應(yīng)關(guān)系。該步驟可以通過下述語句實(shí)現(xiàn)Selectcoll,dbpartitionnum(coll)fromtablelwherecoll=2730該語句表示返回tablel中數(shù)據(jù)分區(qū)鍵值為2730所對應(yīng)的分區(qū)號。相似的,該步驟也可以通過查詢插入的所有數(shù)據(jù)分區(qū)鍵值分別對應(yīng)的分區(qū)號來實(shí)現(xiàn)。實(shí)現(xiàn)語句如下Selectcoll,dbpartitionnum(coll)fromtablel該語句表示返回tablel中所有數(shù)據(jù)分區(qū)鍵值所對應(yīng)的分區(qū)號。按照上面的實(shí)施例,插入3690作為分區(qū)鍵值后,得到的分區(qū)號為0,插入3712作為分區(qū)號后,得到的分區(qū)號為1,插入2730后得到的分區(qū)號為2。由于插入隨機(jī)數(shù)后,并不確定將會返回哪一個分區(qū)號,有可能連續(xù)插入多個隨機(jī)數(shù)后,都返回同一個分區(qū)號。所以,在本發(fā)明的一種實(shí)施例中,需要重復(fù)上述步驟205和207直到得到所有分區(qū)所對應(yīng)的至少一個數(shù)據(jù)分區(qū)鍵值(圖中未示出),也就是說至少找到一個與PO對應(yīng)的數(shù)據(jù)分區(qū)鍵值,一個與Pl對應(yīng)的數(shù)據(jù)分區(qū)鍵值,一個與P2對應(yīng)的數(shù)據(jù)分區(qū)鍵值,從而建立如表5所示的分區(qū)與數(shù)據(jù)分區(qū)鍵值映射表(圖中未示出)。表5需要說明的是,利用2中的方法,可能找到多個與同一分區(qū)號對應(yīng)的分區(qū)鍵值,如分區(qū)鍵值4623也對應(yīng)于分區(qū)號0。按照本發(fā)明的一個實(shí)施例,僅僅使用對應(yīng)于某一分區(qū)號的一個分區(qū)鍵值就可以了。與圖2中描述的不同,圖3是為不支持?jǐn)?shù)據(jù)分區(qū)的數(shù)據(jù)庫定義數(shù)據(jù)分區(qū)鍵值的流程圖。目前市場上大型的數(shù)據(jù)庫產(chǎn)品大都支持?jǐn)?shù)據(jù)分區(qū),比如DB2,Oracle,以及MySQL的高于5.1的版本。然而仍然存在一部分小型數(shù)據(jù)庫產(chǎn)品并不提供分區(qū)功能,當(dāng)然其也不允許通過數(shù)據(jù)分區(qū)鍵值,控制數(shù)據(jù)存儲的分區(qū)。為了在不支持?jǐn)?shù)據(jù)分區(qū)的數(shù)據(jù)庫上實(shí)現(xiàn)本發(fā)明的數(shù)據(jù)分區(qū)功能,可以將每個不支持分區(qū)的數(shù)據(jù)庫看成一個分區(qū),從而進(jìn)行數(shù)據(jù)分區(qū)。具體而言,在步驟301,為多個數(shù)據(jù)庫定義多個分區(qū)號,以將一個數(shù)據(jù)庫作為一個分區(qū)。在步驟303,定義數(shù)據(jù)分區(qū)鍵值,使得所述每一個數(shù)據(jù)分區(qū)鍵值與一個分區(qū)號相對應(yīng),從而構(gòu)建如表6所示的分區(qū)與數(shù)據(jù)分區(qū)鍵值映射表(圖中未示出)。在一種簡單的實(shí)施例中,數(shù)據(jù)分區(qū)鍵值與分區(qū)號相同。表6圖1示意性的將圖2或圖3中所示的技術(shù)方案布置在步驟101“獲取數(shù)據(jù)分區(qū)規(guī)則”之后。本領(lǐng)域的普通技術(shù)人員理解,建立分區(qū)與數(shù)據(jù)分區(qū)鍵值映射表,只要在建立數(shù)據(jù)分區(qū)規(guī)則與數(shù)據(jù)分區(qū)鍵值的對應(yīng)關(guān)系之前進(jìn)行就可以,而不必一定安排在“獲取數(shù)據(jù)分區(qū)規(guī)則”之后。圖4是批量添加數(shù)據(jù)分區(qū)鍵值的流程圖。在步驟401中,按照數(shù)據(jù)分區(qū)條件制定數(shù)據(jù)查詢語句。比如按照數(shù)據(jù)分區(qū)規(guī)則R1查詢所有符合分區(qū)條件“Year<2009andStatus=finished”的數(shù)據(jù)條目。在步驟403中獲得與該數(shù)據(jù)分區(qū)條件對應(yīng)的所有數(shù)據(jù)條目。在步驟405中,查詢匹配表(表3)以獲得該數(shù)據(jù)分區(qū)條件對應(yīng)的數(shù)據(jù)分區(qū)鍵值,比如R1對應(yīng)的數(shù)據(jù)分區(qū)鍵值3690。在步驟407對所獲得的與該數(shù)據(jù)分區(qū)條件對應(yīng)的所有數(shù)據(jù)條目統(tǒng)一添加數(shù)據(jù)分區(qū)鍵值,添加了數(shù)據(jù)分區(qū)鍵值的數(shù)據(jù)庫中的表可參見下述表7。在步驟409,返回到圖1中的步驟105。表7-1分區(qū)P0中的數(shù)據(jù)表表7-2分區(qū)P1中的數(shù)據(jù)表表7-3分區(qū)P2中的數(shù)據(jù)表作為本發(fā)明的另外一種實(shí)施方式,圖5是逐個添加數(shù)據(jù)分區(qū)鍵值的流程圖。在步驟501逐一讀取數(shù)據(jù)庫中的數(shù)據(jù)條目。在步驟503分析所述數(shù)據(jù)條目所對應(yīng)的數(shù)據(jù)分區(qū)條件。在步驟505查詢匹配表以獲得所述數(shù)據(jù)條目對應(yīng)的數(shù)據(jù)分區(qū)鍵值。在步驟507,將所述數(shù)據(jù)分區(qū)鍵值添加到數(shù)據(jù)條目中,從而形成如表7中的各個數(shù)據(jù)表。在步驟509,返回到圖1中的步驟105。高速緩存cache是一個高速小容量的臨時存儲器,可以用高速的靜態(tài)存儲器芯片實(shí)現(xiàn),或者集成到CPU芯片內(nèi)部,存儲CPU最經(jīng)常訪問的指令或者操作數(shù)據(jù)。Cache中的內(nèi)容隨命中率的降低需要經(jīng)常替換新的內(nèi)容。按照本發(fā)明中的一個實(shí)施例,可以借助cache保存匹配表以提高后續(xù)數(shù)據(jù)查找的速度。數(shù)據(jù)庫中的數(shù)據(jù)條目的列值可能與數(shù)據(jù)分區(qū)條件的參數(shù)的數(shù)據(jù)格式一致。從而匹配表中的參數(shù)可以直接用于判斷某個數(shù)據(jù)條目是否符合某一分區(qū)規(guī)則。然而,數(shù)據(jù)庫中的數(shù)據(jù)條目的列值并不總是與數(shù)據(jù)分區(qū)條件的參數(shù)的數(shù)據(jù)格式一致。舉一個簡單的例子,在數(shù)據(jù)分區(qū)規(guī)則中,分區(qū)條件的一個參數(shù)為年,如“2002”,而在實(shí)際的數(shù)據(jù)庫表中,可能存儲著更為詳細(xì)的日期數(shù)據(jù)作為列值,如“2002.10.1”。這樣數(shù)據(jù)庫中數(shù)據(jù)條目的列值就與分區(qū)條件的參數(shù)的數(shù)據(jù)格式存在一定的不一致性。這時需要對數(shù)據(jù)條目進(jìn)行一定的處理。圖6是對數(shù)據(jù)庫中的數(shù)據(jù)條目進(jìn)行處理的流程圖。在步驟601中,首先掃描數(shù)據(jù)條目的列值。在步驟603,判斷所述列值中存儲的數(shù)據(jù)格式是否與數(shù)據(jù)分區(qū)條件中對應(yīng)參數(shù)的數(shù)據(jù)格式一致。當(dāng)格式一致時,在步驟607返回。當(dāng)格式不一致時,在步驟605對所述數(shù)據(jù)條目的列值進(jìn)行處理以標(biāo)識其與數(shù)據(jù)分區(qū)條件中對應(yīng)參數(shù)一致的數(shù)據(jù)格式,比如對“2002.10.1”進(jìn)行處理,以標(biāo)識其相應(yīng)的Year值為“2002”,并在步驟607返回??梢灾苯永媒?jīng)處理的數(shù)據(jù)條目所標(biāo)識的Year值在后續(xù)的步驟中判斷應(yīng)該對該數(shù)據(jù)條目添加哪個分區(qū)鍵值。圖7是基于動態(tài)的數(shù)據(jù)庫分區(qū)技術(shù),進(jìn)行數(shù)據(jù)庫查詢的流程圖。在步驟701中,獲得數(shù)據(jù)查詢請求,例如數(shù)據(jù)查詢請求1為Select^fromSales_orderwhereYear=2005andStatus='Finished'數(shù)據(jù)查詢請求1在步驟703中,解析數(shù)據(jù)查詢請求。所述解析用于確定數(shù)據(jù)查詢請求中的列值。例如數(shù)據(jù)查詢請求1的列值為Year=2005以及Status=,F(xiàn)inished,。在步驟705,判斷所述數(shù)據(jù)查詢請求是否與至少一個分區(qū)相匹配?數(shù)據(jù)查詢請求與一個分區(qū)相匹配就意味著查詢請求可以通過僅查詢一個分區(qū)而進(jìn)行。很顯然,數(shù)據(jù)查詢請求1符合數(shù)據(jù)分區(qū)規(guī)則R1,因此與分區(qū)P0相匹配。但是在實(shí)際情況中,并非所有的數(shù)據(jù)查詢請求都能與一個分區(qū)相匹配,例如下面的數(shù)據(jù)查詢請求2就無法與任何分區(qū)相匹配Select^fromSales_orderwhereProduct=‘電視’數(shù)據(jù)查詢請求2在實(shí)際數(shù)據(jù)查詢中,數(shù)據(jù)查詢請求也并非只能與一個數(shù)據(jù)分區(qū)相匹配,例如下面的數(shù)據(jù)查詢請求就與P0和P2都匹配Select^fromSales_orderwhereYear>2005andStatus='Finished'數(shù)據(jù)查詢請求3數(shù)據(jù)查詢請求3由于可以被看作1)Year>=2009和2)Year<2009,year>2005并且Status=,F(xiàn)inished'兩部分的集合,因此其可以與R4和R1兩個分區(qū)規(guī)則所中的分區(qū)P2和P0相匹配。本領(lǐng)域的普通技術(shù)人員理解,當(dāng)數(shù)據(jù)查詢請求所匹配的分區(qū)為所有數(shù)據(jù)庫中的分區(qū)時,也就相當(dāng)于數(shù)據(jù)查詢請求無法與任何一個分區(qū)相匹配,例如下面的數(shù)據(jù)查詢請求Select^fromSales_orderwhereYear>2005數(shù)據(jù)查詢請求4在步驟707,響應(yīng)于所述數(shù)據(jù)查詢請求與至少一個分區(qū)相匹配的判斷,查找與該數(shù)據(jù)查詢請求對應(yīng)的數(shù)據(jù)分區(qū)鍵值。該步驟可以通過查詢上述匹配表(表3)進(jìn)行。例如,查找到上述數(shù)據(jù)查詢請求1的數(shù)據(jù)分區(qū)鍵值應(yīng)當(dāng)是3690,上述數(shù)據(jù)查詢請求3的數(shù)據(jù)分區(qū)鍵值應(yīng)當(dāng)是3690和2730。在步驟709,對數(shù)據(jù)查詢請求進(jìn)行處理以將該數(shù)據(jù)分區(qū)鍵值添加到所述數(shù)據(jù)查詢請求中。例如,將數(shù)據(jù)查詢請求1修改為Select氺fromSales_orderwhereYear=2005andStatus=jFinihsec^andPK=3690將數(shù)據(jù)查詢請求3修改為Select氺fromSales_orderwhereYear>2005andStatus=jFinishec^andPK=3690,2730在步驟711,向數(shù)據(jù)庫發(fā)送數(shù)據(jù)查詢請求。對于查詢請求與至少一個數(shù)據(jù)分區(qū)相匹配的情形,向數(shù)據(jù)庫發(fā)送的數(shù)據(jù)查詢請求是添加了數(shù)據(jù)分區(qū)鍵值的查詢請求。這樣數(shù)據(jù)庫僅需要在相應(yīng)的匹配的分區(qū)中進(jìn)行檢索,而不必對所有分區(qū)進(jìn)行檢索。對于查詢請求與任何一個數(shù)據(jù)分區(qū)都不相匹配的情形,向數(shù)據(jù)庫發(fā)送的數(shù)據(jù)查詢請求是沒有添加分區(qū)鍵值的查詢請求,即原始的查詢請求。這樣數(shù)據(jù)庫需要對所有的分區(qū)進(jìn)行檢索??蛇x的,在步驟713,記錄數(shù)據(jù)庫查詢的相關(guān)信息作為反饋信息。反饋信息可以有助于判斷當(dāng)前設(shè)置的數(shù)據(jù)分區(qū)規(guī)則是否合理,并且可以用于推薦合理的數(shù)據(jù)分區(qū)規(guī)則以優(yōu)化數(shù)據(jù)庫查詢性能。在實(shí)際中,一般的數(shù)據(jù)庫應(yīng)用,如果沒有在設(shè)計(jì)的時候仔細(xì)考慮,系統(tǒng)管理員是比較難于直接確定出最理想的數(shù)據(jù)分區(qū)規(guī)則的。因此,反饋信息可以幫助系統(tǒng)管理員校正其初始的分區(qū)規(guī)則設(shè)計(jì)。具體而言,所述反饋信息至少包含下列各項(xiàng)之一數(shù)據(jù)查詢語句中的數(shù)據(jù)查詢條件,如whereYear=2005andStatus=,F(xiàn)inished,,按照該查詢條件從數(shù)據(jù)庫返回的數(shù)據(jù)條目的數(shù)量,返回所述數(shù)據(jù)條目的響應(yīng)時間,以及實(shí)際查詢的分區(qū)。可以根據(jù)反饋信息了解哪些是經(jīng)常被查詢的數(shù)據(jù),哪些是不經(jīng)常被查詢的數(shù)據(jù)。在步驟713,對所述反饋信息進(jìn)行統(tǒng)計(jì)。所述統(tǒng)計(jì)至少包含下列各項(xiàng)之一統(tǒng)計(jì)相同數(shù)據(jù)查詢條件的數(shù)據(jù)查詢語句,統(tǒng)計(jì)各個數(shù)據(jù)查詢條件所命中的數(shù)據(jù)條目,統(tǒng)計(jì)各個數(shù)據(jù)查詢條件所命中的數(shù)據(jù)條目的響應(yīng)時間,統(tǒng)計(jì)各個分區(qū)被實(shí)際查詢的次數(shù)。圖8是在數(shù)據(jù)庫中對數(shù)據(jù)進(jìn)行分區(qū)的系統(tǒng)框圖。在數(shù)據(jù)庫中進(jìn)行數(shù)據(jù)分區(qū)的系統(tǒng)801包括數(shù)據(jù)分區(qū)規(guī)則獲取裝置803,數(shù)據(jù)分區(qū)規(guī)則與數(shù)據(jù)分區(qū)鍵值對應(yīng)關(guān)系建立裝置805,數(shù)據(jù)條目的數(shù)據(jù)分區(qū)鍵值添加裝置807,數(shù)據(jù)條目存儲裝置809。具體而言,數(shù)據(jù)分區(qū)規(guī)則獲取裝置803用于獲取數(shù)據(jù)分區(qū)規(guī)則,所述數(shù)據(jù)分區(qū)規(guī)則的結(jié)構(gòu)可以參見上述表2??蛇x的,裝置803可以從手動輸入裝置815獲取人為定制的數(shù)據(jù)分區(qū)規(guī)則,或者也可以從反饋信息統(tǒng)計(jì)裝置817處獲得數(shù)據(jù)分區(qū)規(guī)則。反饋信息統(tǒng)計(jì)裝置817將對數(shù)據(jù)庫查詢的反饋信息進(jìn)行統(tǒng)計(jì),并且可以更新或創(chuàng)建數(shù)據(jù)分區(qū)規(guī)則。數(shù)據(jù)分區(qū)規(guī)則與數(shù)據(jù)分區(qū)鍵值對應(yīng)關(guān)系建立裝置805用于基于所述數(shù)據(jù)分區(qū)規(guī)則以及分區(qū)與數(shù)據(jù)分區(qū)鍵值的對應(yīng)關(guān)系,建立數(shù)據(jù)分區(qū)規(guī)則與數(shù)據(jù)分區(qū)鍵值對應(yīng)關(guān)系。所述對應(yīng)關(guān)系可以被記錄在匹配表中,所述匹配表被存儲在元數(shù)據(jù)存儲器811中。具體而言,通過確定如上述表5或表6中的數(shù)據(jù)分區(qū)鍵值與分區(qū)的對應(yīng)關(guān)系,以及如上述表2中的數(shù)據(jù)分區(qū)規(guī)則與分區(qū)的對應(yīng)關(guān)系,可以建立如上述表3中的數(shù)據(jù)分區(qū)規(guī)則與數(shù)據(jù)分區(qū)鍵值的關(guān)系,進(jìn)而通過數(shù)據(jù)分區(qū)鍵值確定符合特定條件的數(shù)據(jù)應(yīng)當(dāng)被存儲的分區(qū)。數(shù)據(jù)條目的數(shù)據(jù)分區(qū)鍵值添加裝置807用于按照數(shù)據(jù)分區(qū)規(guī)則對數(shù)據(jù)庫中的數(shù)據(jù)條目添加對應(yīng)的數(shù)據(jù)分區(qū)鍵值。所述數(shù)據(jù)分區(qū)鍵值可以作為新的列值從而對數(shù)據(jù)庫中的表進(jìn)行擴(kuò)展。數(shù)據(jù)條目存儲裝置809用于根據(jù)數(shù)據(jù)條目的數(shù)據(jù)分區(qū)鍵值將數(shù)據(jù)條目存儲到數(shù)據(jù)庫813中的對應(yīng)分區(qū)位置。所存儲的添加了數(shù)據(jù)分區(qū)鍵值的數(shù)據(jù)條目可以參見上述表7。可選的,本發(fā)明中的數(shù)據(jù)庫813中的分區(qū)可以配置不同的物理資源。給予某些分區(qū)更為優(yōu)惠的物理資源可以進(jìn)一步提高該分區(qū)上的查詢效率。比如本發(fā)明中,很少被查詢的歷史數(shù)據(jù)被存儲在P0和P1兩個分區(qū)上,而近期的或經(jīng)常有可能被查詢的數(shù)據(jù)被存儲在P2上,因此,可以為P2配置更優(yōu)的物理資源,如cpu、磁盤、內(nèi)存等,使其具有相對于其它分區(qū)而言,具有更快的I/O速度和更快的處理能力,從而進(jìn)一步提高P2上的查詢效率。圖9是基于動態(tài)的數(shù)據(jù)庫分區(qū)技術(shù),進(jìn)行數(shù)據(jù)庫查詢的數(shù)據(jù)庫查詢系統(tǒng)的系統(tǒng)框圖。所述數(shù)據(jù)庫查詢系統(tǒng)901包括數(shù)據(jù)查詢請求獲得裝置903,數(shù)據(jù)查詢請求解析裝置905,數(shù)據(jù)查詢請求與數(shù)據(jù)分區(qū)的匹配判斷裝置907,數(shù)據(jù)分區(qū)鍵值查找裝置909,數(shù)據(jù)查詢請求的數(shù)據(jù)分區(qū)鍵值添加裝置911,數(shù)據(jù)查詢請求發(fā)送裝置913??蛇x的,本發(fā)明還包括反饋信息記錄裝置915,反饋信息統(tǒng)計(jì)裝置917。具體而言,數(shù)據(jù)查詢請求獲得裝置903用于通過用戶界面獲得用戶所輸入的數(shù)據(jù)查詢請求。數(shù)據(jù)查詢請求解析裝置905用于對數(shù)據(jù)查詢請求進(jìn)行解析,獲取其中的列值。查詢請求與數(shù)據(jù)分區(qū)的匹配判斷裝置907用于通過解析到的數(shù)據(jù)查詢請求的列值,以及數(shù)據(jù)分區(qū)規(guī)則判斷所述數(shù)據(jù)查詢請求是否與至少一個分區(qū)相匹配,也就是所述數(shù)據(jù)查詢請求是否可以通過查詢至少一個分區(qū)而非所有分區(qū)而得到。數(shù)據(jù)分區(qū)鍵值查找裝置909響應(yīng)于所述判斷裝置做出數(shù)據(jù)查詢請求與至少一個分區(qū)相匹配的判斷,查找與該數(shù)據(jù)查詢請求對應(yīng)的數(shù)據(jù)分區(qū)鍵值,具體而言所述查找裝置909可以通過查找存儲在元數(shù)據(jù)存儲器919中的匹配表(表3)從而獲得對應(yīng)的數(shù)據(jù)分區(qū)鍵值。數(shù)據(jù)查詢請求的數(shù)據(jù)分區(qū)鍵值添加裝置911用于將查找到的數(shù)據(jù)分區(qū)鍵值添加到所述數(shù)據(jù)查詢請求中。數(shù)據(jù)查詢請求發(fā)送裝置913用于向數(shù)據(jù)庫921發(fā)送數(shù)據(jù)查詢請求,對于數(shù)據(jù)查詢請求與至少一個分區(qū)相匹配的情形,所述發(fā)送裝置913用于向數(shù)據(jù)庫發(fā)送添加了數(shù)據(jù)分區(qū)鍵值的數(shù)據(jù)查詢請求。這樣數(shù)據(jù)庫僅需要在相應(yīng)的匹配的分區(qū)中進(jìn)行檢索,而不必對所有分區(qū)進(jìn)行檢索。對于數(shù)據(jù)查詢請求與任何一個分區(qū)都不相匹配的情形,即響應(yīng)于上述判斷裝置907做出數(shù)據(jù)查詢請求與任何一個分區(qū)都不匹配的判斷,發(fā)送裝置913向數(shù)據(jù)庫發(fā)送的數(shù)據(jù)查詢請求是沒有添加數(shù)據(jù)分區(qū)鍵值的查詢請求,即原始的查詢請求。這樣數(shù)據(jù)庫可能在所有的分區(qū)進(jìn)行檢索。反饋信息記錄裝置915用于記錄數(shù)據(jù)庫查詢的反饋信息。反饋信息統(tǒng)計(jì)裝置917用于對所述反饋信息進(jìn)行統(tǒng)計(jì)。本領(lǐng)域的普通技術(shù)人員理解,上述各個操作過程可以由存儲在計(jì)算機(jī)程序產(chǎn)品中的可執(zhí)行程序?qū)崿F(xiàn)。該程序產(chǎn)品定義各實(shí)施例的功能,并承載各種信號,包括(但不局限于)1)永久存儲在不可擦寫存儲媒體上的信息;2)存儲在可擦寫存儲媒體上的信息;或3)通過包括無線通信在內(nèi)的通信媒體(如,通過計(jì)算機(jī)網(wǎng)絡(luò)或電話網(wǎng)絡(luò))傳送到計(jì)算機(jī)上的信息,特別是包括從因特網(wǎng)和其它網(wǎng)絡(luò)下載的信息。本發(fā)明的各種實(shí)施例可以提供許多優(yōu)點(diǎn),包括已經(jīng)在
發(fā)明內(nèi)容中列舉的,和能夠從技術(shù)方案本身推導(dǎo)出來的。但是無論一個實(shí)施例是否取得全部優(yōu)點(diǎn),并且也無論這樣的優(yōu)點(diǎn)是否被認(rèn)為是取得實(shí)質(zhì)性提高,都不應(yīng)構(gòu)成對本發(fā)明的限制。同時,上文中提到的各種實(shí)施方式,僅僅是出于說明的目的,本領(lǐng)域的普通技術(shù)人員可以對上述實(shí)施方式做出各種修改和變更,而不偏離本發(fā)明的實(shí)質(zhì)。本發(fā)明的范圍完全由所附權(quán)利要求書限定。權(quán)利要求一種對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行分區(qū)的方法,所述方法包括獲取數(shù)據(jù)分區(qū)規(guī)則,所述數(shù)據(jù)分區(qū)規(guī)則用于指示數(shù)據(jù)分區(qū)條件與分區(qū)的對應(yīng)關(guān)系;基于所述數(shù)據(jù)分區(qū)規(guī)則以及分區(qū)與數(shù)據(jù)分區(qū)鍵值的對應(yīng)關(guān)系,建立數(shù)據(jù)分區(qū)條件與數(shù)據(jù)分區(qū)鍵值的對應(yīng)關(guān)系;按照數(shù)據(jù)分區(qū)條件與數(shù)據(jù)分區(qū)鍵值的對應(yīng)關(guān)系對數(shù)據(jù)庫中的數(shù)據(jù)條目添加對應(yīng)的數(shù)據(jù)分區(qū)鍵值;以及根據(jù)數(shù)據(jù)條目的數(shù)據(jù)分區(qū)鍵值將數(shù)據(jù)條目存儲到數(shù)據(jù)庫中的對應(yīng)分區(qū)。2.如前述權(quán)利要求1所述的方法,其中建立數(shù)據(jù)分區(qū)條件與數(shù)據(jù)分區(qū)鍵值的對應(yīng)關(guān)系的步驟進(jìn)一步包括將所述數(shù)據(jù)分區(qū)條件與數(shù)據(jù)分區(qū)鍵值的對應(yīng)關(guān)系記錄在匹配表中。3.如前述權(quán)利要求2所述的方法,其中所述添加對應(yīng)的數(shù)據(jù)分區(qū)鍵值的步驟進(jìn)一步包括按照所述數(shù)據(jù)分區(qū)條件制定數(shù)據(jù)查詢語句;獲得與所述數(shù)據(jù)分區(qū)條件對應(yīng)的數(shù)據(jù)條目;查詢所述匹配表以獲得所述數(shù)據(jù)分區(qū)條件對應(yīng)的數(shù)據(jù)分區(qū)鍵值;以及對所獲得的與所述數(shù)據(jù)分區(qū)條件對應(yīng)的數(shù)據(jù)條目添加數(shù)據(jù)分區(qū)鍵值。4.如前述權(quán)利要求2所述的方法,其中所述添加對應(yīng)的數(shù)據(jù)分區(qū)鍵值的步驟進(jìn)一步包括逐一讀取數(shù)據(jù)庫中的數(shù)據(jù)條目;分析所述數(shù)據(jù)條目所對應(yīng)的數(shù)據(jù)分區(qū)條件;查詢所述匹配表以獲得所述數(shù)據(jù)條目對應(yīng)的數(shù)據(jù)分區(qū)鍵值;以及將所述數(shù)據(jù)分區(qū)鍵值添加到數(shù)據(jù)條目中。5.如前述權(quán)利要求2所述的方法,其中所述匹配表被存儲在高速緩存中。6.如前述權(quán)利要求1-5之一所述的方法,其中所述數(shù)據(jù)庫為支持分區(qū)的數(shù)據(jù)庫,所述方法進(jìn)一步還包括預(yù)先計(jì)算數(shù)據(jù)分區(qū)鍵值,其中每個數(shù)據(jù)分區(qū)鍵值與一個分區(qū)號相對應(yīng),所述預(yù)先計(jì)算數(shù)據(jù)分區(qū)鍵值的步驟進(jìn)一步包括在數(shù)據(jù)庫中創(chuàng)建一張表;將至少一個數(shù)據(jù)分區(qū)鍵值插入到所述表中;查詢與所插入的數(shù)據(jù)分區(qū)鍵值對應(yīng)的分區(qū)號,以確定所述數(shù)據(jù)分區(qū)鍵值與所述分區(qū)號的對應(yīng)關(guān)系。7.如前述權(quán)利要求1-5之一所述的方法,其中所述數(shù)據(jù)庫為不支持分區(qū)的數(shù)據(jù)庫,所述方法還包括為多個數(shù)據(jù)庫定義多個分區(qū)號,以將一個數(shù)據(jù)庫作為一個分區(qū),以及定義數(shù)據(jù)分區(qū)鍵值,使得所述每個數(shù)據(jù)分區(qū)鍵值與一個分區(qū)號相對應(yīng)。8.如前述權(quán)利要求1-7之一所述的方法,還包括獲得新的要被加入到數(shù)據(jù)庫中的數(shù)據(jù)條目;按照數(shù)據(jù)分區(qū)條件對數(shù)據(jù)庫中的數(shù)據(jù)條目添加對應(yīng)的數(shù)據(jù)分區(qū)鍵值;以及將添加了對應(yīng)的數(shù)據(jù)分區(qū)鍵值的數(shù)據(jù)條目存儲到數(shù)據(jù)庫中的對應(yīng)分區(qū)。9.一種數(shù)據(jù)庫查詢方法,所述數(shù)據(jù)庫中的數(shù)據(jù)按照權(quán)利要求1所述的方法進(jìn)行了分區(qū),該數(shù)據(jù)庫查詢方法包括獲得數(shù)據(jù)查詢請求;解析數(shù)據(jù)查詢請求;判斷所述數(shù)據(jù)查詢請求是否與至少一個分區(qū)相匹配;響應(yīng)于所述數(shù)據(jù)查詢請求與至少一個分區(qū)相匹配的判斷,查找與所述數(shù)據(jù)查詢請求對應(yīng)的數(shù)據(jù)分區(qū)鍵值;對數(shù)據(jù)查詢請求進(jìn)行處理以將將該分區(qū)鍵值添加到所述數(shù)據(jù)查詢請求中;以及向數(shù)據(jù)庫發(fā)送處理過的數(shù)據(jù)查詢請求。10.如前述權(quán)利要求9所述的方法,還包括響應(yīng)于所述數(shù)據(jù)查詢請求與任何一個分區(qū)都不相匹配的判斷,向數(shù)據(jù)庫發(fā)送沒有添加數(shù)據(jù)分區(qū)鍵值的數(shù)據(jù)查詢請求。11.如前述權(quán)利要求9或10所述的方法,還包括記錄數(shù)據(jù)庫查詢的相關(guān)信息作為反饋信息,所述反饋信息至少包含下列各項(xiàng)之一數(shù)據(jù)查詢語句中的數(shù)據(jù)查詢條件,按照所述數(shù)據(jù)查詢條件從數(shù)據(jù)庫返回的數(shù)據(jù)條目的數(shù)量,返回所述數(shù)據(jù)條目的響應(yīng)時間,實(shí)際查詢的分區(qū)。12.一種對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行分區(qū)的系統(tǒng),所述系統(tǒng)包括獲取數(shù)據(jù)分區(qū)規(guī)則的裝置,所述數(shù)據(jù)分區(qū)規(guī)則用于指示數(shù)據(jù)分區(qū)條件與分區(qū)的對應(yīng)關(guān)系;基于所述數(shù)據(jù)分區(qū)規(guī)則以及分區(qū)與數(shù)據(jù)分區(qū)鍵值的對應(yīng)關(guān)系,建立數(shù)據(jù)分區(qū)條件與數(shù)據(jù)分區(qū)鍵值的對應(yīng)關(guān)系的裝置;按照數(shù)據(jù)分區(qū)條件與數(shù)據(jù)分區(qū)鍵值的對應(yīng)關(guān)系對數(shù)據(jù)庫中的數(shù)據(jù)條目添加對應(yīng)的數(shù)據(jù)分區(qū)鍵值的裝置;以及根據(jù)數(shù)據(jù)條目的數(shù)據(jù)分區(qū)鍵值,將數(shù)據(jù)條目存儲到數(shù)據(jù)庫中的對應(yīng)分區(qū)的裝置。13.如前述權(quán)利要求12所述的系統(tǒng),其中建立數(shù)據(jù)分區(qū)條件與數(shù)據(jù)分區(qū)鍵值的對應(yīng)關(guān)系的裝置進(jìn)一步將所述數(shù)據(jù)分區(qū)條件與數(shù)據(jù)分區(qū)鍵值的對應(yīng)關(guān)系記錄在匹配表中。14.如前述權(quán)利要求13所述的系統(tǒng),其中所述添加對應(yīng)的數(shù)據(jù)分區(qū)鍵值的裝置進(jìn)一步包括按照所述數(shù)據(jù)分區(qū)條件制定數(shù)據(jù)查詢語句的裝置;獲得與所述數(shù)據(jù)分區(qū)條件對應(yīng)的數(shù)據(jù)條目的裝置;查詢所述匹配表以獲得所述數(shù)據(jù)分區(qū)條件對應(yīng)的數(shù)據(jù)分區(qū)鍵值的裝置;以及對所獲得的與所述數(shù)據(jù)分區(qū)條件對應(yīng)的數(shù)據(jù)條目添加數(shù)據(jù)分區(qū)鍵值的裝置。15.如前述權(quán)利要求13所述的系統(tǒng),其中所述添加對應(yīng)的數(shù)據(jù)分區(qū)鍵值的裝置進(jìn)一步包括逐一讀取數(shù)據(jù)庫中的數(shù)據(jù)條目的裝置;分析所述數(shù)據(jù)條目所對應(yīng)的數(shù)據(jù)分區(qū)條件的裝置;查詢所述匹配表以獲得所述數(shù)據(jù)條目對應(yīng)的數(shù)據(jù)分區(qū)鍵值的裝置;以及將所述數(shù)據(jù)分區(qū)鍵值添加到數(shù)據(jù)條目中的裝置。16.如前述權(quán)利要求13所述的系統(tǒng),其中所述匹配表被存儲在高速緩存中。17.如前述權(quán)利要求12-16之一所述的系統(tǒng),其中所述數(shù)據(jù)庫為支持分區(qū)的數(shù)據(jù)庫,所述系統(tǒng)進(jìn)一步還包括預(yù)先計(jì)算數(shù)據(jù)分區(qū)鍵值的裝置,其中每個數(shù)據(jù)分區(qū)鍵值與一個分區(qū)號相對應(yīng),所述預(yù)先計(jì)算數(shù)據(jù)分區(qū)鍵值的裝置進(jìn)一步包括在數(shù)據(jù)庫中創(chuàng)建一張表的裝置;將至少一個數(shù)據(jù)分區(qū)鍵值插入到所述表中的裝置;查詢與所插入的數(shù)據(jù)分區(qū)鍵值對應(yīng)的分區(qū)號,以確定所述數(shù)據(jù)分區(qū)鍵值與所述分區(qū)號的對應(yīng)關(guān)系的裝置。18.如前述權(quán)利要求12-16之一所述的系統(tǒng),其中所述數(shù)據(jù)庫為不支持分區(qū)的數(shù)據(jù)庫,所述系統(tǒng)還包括為多個數(shù)據(jù)庫定義多個分區(qū)號,以將一個數(shù)據(jù)庫作為一個分區(qū)的裝置,以及定義數(shù)據(jù)分區(qū)鍵值,使得所述每個數(shù)據(jù)分區(qū)鍵值與一個分區(qū)號相對應(yīng)的裝置。19.如前述權(quán)利要求12-18之一所述的系統(tǒng),還包括獲得新的要被加入到數(shù)據(jù)庫中的數(shù)據(jù)條目的裝置;按照數(shù)據(jù)分區(qū)規(guī)則對數(shù)據(jù)庫中的數(shù)據(jù)條目添加對應(yīng)的數(shù)據(jù)分區(qū)鍵值的裝置;以及將添加了對應(yīng)的數(shù)據(jù)分區(qū)鍵值的數(shù)據(jù)條目存儲到數(shù)據(jù)庫中的對應(yīng)分區(qū)的裝置。20.一種數(shù)據(jù)庫查詢系統(tǒng),所述數(shù)據(jù)庫中的數(shù)據(jù)由權(quán)利要求11所述的系統(tǒng)進(jìn)行了分區(qū),所述數(shù)據(jù)庫查詢系統(tǒng)包括獲得數(shù)據(jù)查詢請求的裝置;解析數(shù)據(jù)查詢請求的裝置;判斷所述數(shù)據(jù)查詢請求是否與至少一個分區(qū)相匹配的裝置;響應(yīng)于所述數(shù)據(jù)查詢請求與至少一個分區(qū)相匹配的判斷,查找與該數(shù)據(jù)查詢請求對應(yīng)的數(shù)據(jù)分區(qū)鍵值的裝置;對數(shù)據(jù)查詢請求進(jìn)行處理以將所述分區(qū)鍵值添加到所述數(shù)據(jù)查詢請求中的裝置;以及向數(shù)據(jù)庫發(fā)送處理過的數(shù)據(jù)查詢請求的裝置。21.如權(quán)利要求20所述的系統(tǒng),還包括記錄數(shù)據(jù)庫查詢的相關(guān)信息作為反饋信息的裝置,所述反饋信息至少包含下列各項(xiàng)之?dāng)?shù)據(jù)查詢語句中的數(shù)據(jù)查詢條件,按照所述數(shù)據(jù)查詢條件從數(shù)據(jù)庫返回的數(shù)據(jù)條目的數(shù)量,返回所述數(shù)據(jù)條目的響應(yīng)時間,實(shí)際查詢的分區(qū)。全文摘要本發(fā)明提供了一種靈活、動態(tài)的數(shù)據(jù)庫分區(qū)方法和系統(tǒng)。本發(fā)明主要利用在數(shù)據(jù)庫的數(shù)據(jù)表中插入數(shù)據(jù)分區(qū)鍵值的方法,以將符合特定數(shù)據(jù)分區(qū)規(guī)則的數(shù)據(jù)條目存儲到特定的分區(qū)上,從而實(shí)現(xiàn)可更新,可隨意定制的數(shù)據(jù)庫分區(qū)方案。通過本發(fā)明,數(shù)據(jù)庫使用者可以在不改變應(yīng)用程序代碼的前提下,動態(tài)的對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行分區(qū)或者重新分區(qū)。這樣,數(shù)據(jù)庫使用者可以以最低的成本實(shí)現(xiàn)靈活的數(shù)據(jù)管理,同時大大提升數(shù)據(jù)庫的查詢速度和效率。文檔編號G06F17/30GK101876983SQ200910136968公開日2010年11月3日申請日期2009年4月30日優(yōu)先權(quán)日2009年4月30日發(fā)明者張劍鳴,段寧,郭常杰,高波申請人:國際商業(yè)機(jī)器公司