專利名稱::數(shù)據(jù)庫(kù)檢索方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及計(jì)算機(jī)
技術(shù)領(lǐng)域:
,更具體地說(shuō),涉及數(shù)據(jù)檢索
背景技術(shù):
:在數(shù)據(jù)庫(kù)中,一般通過(guò)多個(gè)邏輯上關(guān)聯(lián)的數(shù)據(jù)表存儲(chǔ)數(shù)據(jù)。如下所示的職員個(gè)人信息表<table>tableseeoriginaldocumentpage5</column></row><table>該數(shù)據(jù)表包含多個(gè)域,即上述數(shù)據(jù)表的表頭,例如工號(hào)、姓名、性別、出生日期、4昏否、職務(wù)。在現(xiàn)有技術(shù)的數(shù)據(jù)庫(kù)中,進(jìn)行數(shù)據(jù)存儲(chǔ)時(shí)即對(duì)檢索條件中的域(如工號(hào))建索引(Index),然后在查詢時(shí)直接構(gòu)造SQL(StructuredQueryLanguage,結(jié)構(gòu)化查詢語(yǔ)言)語(yǔ)句進(jìn)行片企索。例如select姓名,性別,職務(wù)from職員個(gè)人信息表where工號(hào)<=002。它表示從職員個(gè)人信息表中查詢工號(hào)小于或等于002的職員的姓名、性別、職務(wù)信息,其中工號(hào)<=002是檢索條件,正常情況下,數(shù)據(jù)庫(kù)將返回張健和李麗的性別、職務(wù)。為了方便描述,定義上述SQL語(yǔ)句中的"姓名、性別、職務(wù)"為查詢域(即需要查詢的信息)、"工號(hào)"為條件域(即過(guò)濾條件)。若該數(shù)據(jù)庫(kù)還需要另夕一個(gè)數(shù)據(jù)表描述職務(wù)與工資的關(guān)系,如下所示<table>tableseeoriginaldocumentpage5</column></row><table>貝'J"職務(wù)"把兩個(gè)數(shù)據(jù)表關(guān)聯(lián)起來(lái),若需要查詢張健的工資,則需要先查詢第一個(gè)數(shù)據(jù)表,得到他的職務(wù)是科員,然后到第二個(gè)表中查詢,得到他的工資是180.00。在現(xiàn)有技術(shù)中,若分兩個(gè)數(shù)據(jù)表存儲(chǔ),無(wú)需對(duì)增加的每個(gè)域建索引,則減少了存儲(chǔ)量,但增加了一次檢索過(guò)程,降低了檢索效率;若把兩個(gè)數(shù)據(jù)表合并,則只需要查詢一次就可以得到張健的工資,但是要對(duì)增加的每個(gè)域建索引,增加了存儲(chǔ)量。這樣就形成了檢索效率和存儲(chǔ)量的矛盾。
發(fā)明內(nèi)容本發(fā)明的目的之一在于提供一種數(shù)據(jù)庫(kù)檢索方法及系統(tǒng),旨在降低數(shù)據(jù)存儲(chǔ)量,并提高檢索效率。為了實(shí)現(xiàn)發(fā)明目的,所述數(shù)據(jù)庫(kù)檢索系統(tǒng)包括數(shù)據(jù)庫(kù)及與其交互的檢索裝置,所述數(shù)據(jù)庫(kù)包括域處理單元,將所述數(shù)據(jù)庫(kù)中的多個(gè)域處理成一合并域,并對(duì)所述合并域中的各子域進(jìn)行操作設(shè)置;^操作單元,根據(jù)各子域的操作設(shè)置向所述各子域存入數(shù)據(jù);所述檢索裝置包括解析單元,對(duì)用戶輸入的查詢語(yǔ)句進(jìn)行解析,得到與所述各子域的操作設(shè)置相關(guān)的運(yùn)算表達(dá)式;檢索單元,利用所述解析單元得到的所述運(yùn)算表達(dá)式在從數(shù)據(jù)庫(kù)導(dǎo)出的合并域中進(jìn)行查找。其中,所述域處理單元包括域合并模塊,將數(shù)據(jù)庫(kù)中的多個(gè)域處理成一合并域,所述合并域包含多個(gè)子域;操作設(shè)置模塊,構(gòu)建與所述各子域具有映射關(guān)系的操作函數(shù)。其中,所述解析單元包括分析模塊,對(duì)用戶輸入的查詢語(yǔ)句進(jìn)行分析,確定與合并域中各子域?qū)?yīng)的運(yùn)算表達(dá)式;設(shè)置關(guān)聯(lián)模塊,將所述各子域的操作函數(shù)關(guān)聯(lián)到所述各子域?qū)?yīng)的運(yùn)算表達(dá)式,得到合并域的運(yùn)算表達(dá)式。其中,所述^^索單元包括數(shù)據(jù)提取模塊,將合并域從數(shù)據(jù)庫(kù)中導(dǎo)出;查詢模塊,利用所述運(yùn)算表達(dá)式在從數(shù)據(jù)庫(kù)導(dǎo)出的合并域中進(jìn)行查找。所述數(shù)據(jù)庫(kù)檢索方法包括A.將數(shù)據(jù)庫(kù)中的多個(gè)域處理成一合并域,并對(duì)所述合并域中的各子域進(jìn)行操作設(shè)置;B.根據(jù)各子域的操作設(shè)置向所述各子域存入數(shù)據(jù);C.對(duì)用戶輸入的查詢語(yǔ)句進(jìn)行解析,得到與合并域中各子域的操作設(shè)置相關(guān)的運(yùn)算表達(dá)式;D.利用所述運(yùn)算表達(dá)式在從數(shù)據(jù)庫(kù)導(dǎo)出的合并域中進(jìn)行查找。其中,所述步驟A中對(duì)各子域進(jìn)行操作設(shè)置的過(guò)程包括構(gòu)建與各子域具有映射關(guān)系的操作函數(shù)。其中,所述操作函數(shù)包括寫(xiě)操作函數(shù)和讀操作函數(shù)。其中,所述寫(xiě)操作函數(shù)包括設(shè)置函數(shù)和清除函數(shù),所述讀操作函數(shù)包括查詢函數(shù)。其中,所述步驟B包括通過(guò)各子域的寫(xiě)操作函數(shù)在數(shù)據(jù)庫(kù)中插入數(shù)據(jù)或更新數(shù)據(jù)。其中,所述步驟C包括C1.對(duì)用戶輸入的查詢語(yǔ)句進(jìn)行分析,確定與合并域中各子域?qū)?yīng)的運(yùn)算表達(dá)式;C2.根據(jù)運(yùn)算表達(dá)式中的子域名得到操作函數(shù)中的讀操作函數(shù);C3.將讀操作函數(shù)關(guān)聯(lián)到各子域的運(yùn)算表達(dá)式,從而生成合并域的運(yùn)算表達(dá)式。其中,所述查詢語(yǔ)句包括結(jié)構(gòu)化查詢語(yǔ)言。其中,所述步驟D包括Dl.從數(shù)據(jù)庫(kù)中導(dǎo)出合并域;D2.調(diào)用合并域的運(yùn)算表達(dá)式,并利用所述運(yùn)算表達(dá)式在合并域中進(jìn)行查找。其中,若查詢記錄M是否存在于數(shù)據(jù)庫(kù)中,則所述步驟D2包括D21.對(duì)從數(shù)據(jù)庫(kù)中導(dǎo)出的合并域進(jìn)行或邏輯操作;D22.利用所述運(yùn)算表達(dá)式在所述合并域的或邏輯操作結(jié)果中查找所述記錄M。其中,所述步驟D2進(jìn)一步包括利用所述運(yùn)算表達(dá)式在每條記錄的合并域中查找記錄M的詳細(xì)內(nèi)容。由上可知,本發(fā)明在進(jìn)行數(shù)據(jù)庫(kù)4企索的過(guò)程中,將多個(gè)域合并為一個(gè)域,然后通過(guò)與合并域中各子域的操作設(shè)置相關(guān)的運(yùn)算表達(dá)式進(jìn)行檢索,不僅降低了數(shù)據(jù)存儲(chǔ)量,并且提高了檢索效率。圖l是本發(fā)明一個(gè)實(shí)施例中數(shù)據(jù)庫(kù)檢索系統(tǒng)結(jié)構(gòu)圖;圖2是本發(fā)明一個(gè)實(shí)施例中域處理單元的結(jié)構(gòu)圖;圖3是本發(fā)明一個(gè)實(shí)施例中進(jìn)行域合并的示意圖;圖4是本發(fā)明一個(gè)實(shí)施例中解析單元的結(jié)構(gòu)圖;圖5是本發(fā)明一個(gè)實(shí)施例中一企索單元的結(jié)構(gòu)圖;圖6是本發(fā)明一個(gè)實(shí)施例中數(shù)據(jù)庫(kù)4企索方法流程圖;圖7是圖6所示實(shí)施例中步驟S51的流程圖;圖8是圖7所示實(shí)施例中步驟S512的流程圖;圖9是圖6所示實(shí)施例中步驟S53的流程圖;圖10是圖6所示實(shí)施例中步驟S54的流程圖。為了使本發(fā)明的上述及其它目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。具體實(shí)施例方式圖1示出了本發(fā)明的一個(gè)實(shí)施例中數(shù)據(jù)庫(kù)檢索系統(tǒng)的結(jié)構(gòu),該系統(tǒng)包括數(shù)據(jù)庫(kù)IO、檢索裝置20。應(yīng)當(dāng)說(shuō)明的是,本發(fā)明所有圖示中各設(shè)備之間的連接關(guān)系是為了說(shuō)明其信息交互及控制過(guò)程的需要,因此應(yīng)當(dāng)視為邏輯上的控制關(guān)系。另外需要說(shuō)明的是,各功能模塊之間的通信方式可以采取多種,本發(fā)明的保護(hù)范圍不應(yīng)限定為某種特定類(lèi)型的通信方式。數(shù)據(jù)庫(kù)10包括域處理單元11和寫(xiě)操作單元12,其中(1)域處理單元ll,將數(shù)據(jù)庫(kù)10中的多個(gè)域處理成一合并域,并對(duì)各子域進(jìn)行操作設(shè)置。(2)寫(xiě)操作單元12,與域處理單元ll相連,根據(jù)各子域的操作設(shè)置向前述的各子域中存入數(shù)據(jù)。檢索裝置20包括解析單元21和檢索單元22,其中(1)解析單元21,對(duì)用戶輸入的查詢語(yǔ)句進(jìn)行解析,得到與合并域中各子域的操作設(shè)置相關(guān)的運(yùn)算表達(dá)式。(2)檢索單元22,與解析單元21相連,利用解析單元21得到的所述運(yùn)算表達(dá)式在從數(shù)據(jù)庫(kù)10導(dǎo)出的合并域中進(jìn)行查找。。圖2示出了本發(fā)明一個(gè)實(shí)施例中域處理單元ll的結(jié)構(gòu),包括域合并模塊111和操作設(shè)置模塊112,其中域合并模塊l11將數(shù)據(jù)庫(kù)10中的多個(gè)域處理成一合并域。目前數(shù)據(jù)庫(kù)支持的域的數(shù)據(jù)類(lèi)型有五種字符型、文本型、數(shù)值型、邏輯型、日期型,實(shí)際應(yīng)用中,它們的表達(dá)能力可能無(wú)法被充分利用,例如用數(shù)值型中的UNSIGNEDINT類(lèi)型來(lái)描述工資時(shí),它的表達(dá)范圍是0-4294967295,實(shí)際上正常使用的范圍可能只是O-IOOOO,則造成了表達(dá)能力和存儲(chǔ)的浪費(fèi)。本發(fā)明通過(guò)域合并模塊lll對(duì)域進(jìn)行合并,實(shí)際上就是進(jìn)行了壓縮存儲(chǔ),主要目的就是為了充分利用數(shù)據(jù)類(lèi)型的表達(dá)能力,避免存儲(chǔ)的浪費(fèi)。在一個(gè)實(shí)例中,進(jìn)行數(shù)據(jù)壓縮后的數(shù)據(jù)表定義如下<table>tableseeoriginaldocumentpage9</column></row><table>在進(jìn)行域合并后的職員信息域中,每個(gè)子域(對(duì)應(yīng)合并前的域)占據(jù)一段存儲(chǔ),x表示一個(gè)bit位,如圖3所示。應(yīng)當(dāng)說(shuō)明的是,實(shí)際上可以將工號(hào)、姓名、出生日期都合并到"職員信息"域中,因?yàn)槿魏晤?lèi)型的數(shù)據(jù)都可以被二進(jìn)制類(lèi)型表示,但工號(hào)單獨(dú)被檢索的可能性較大,而姓名和出生日期作為查詢域的概率遠(yuǎn)大于作為條件域的概率,所以在此實(shí)例中沒(méi)有被合并。另外應(yīng)當(dāng)說(shuō)明的是,除了二進(jìn)制的數(shù)據(jù)類(lèi)型,還可以用其他的數(shù)據(jù)類(lèi)型來(lái)合并表達(dá)多個(gè)域,如定義N個(gè)字符,其中X個(gè)字符表示職員姓名,Y個(gè)字符表示職員的出生日期,JLX+Y<=N。操作設(shè)置模塊112,與域合并模塊lll交互,構(gòu)建與各子域具有映射關(guān)系的操作函數(shù)。在本發(fā)明中,操作設(shè)置模塊112首先定義子域的掩碼,為了方便程序計(jì)算,則進(jìn)一步定義寫(xiě)操作函數(shù)和讀操作函數(shù),最后在各操作函數(shù)和各子域之間建立一個(gè)函數(shù)映射表。在一個(gè)實(shí)例中,該寫(xiě)操作函數(shù)包括設(shè)置函數(shù)和清除函數(shù),該讀操作函數(shù)包括查詢函數(shù),其中設(shè)置、清除函數(shù)在向數(shù)據(jù)庫(kù)10插入、更新記錄時(shí)使用,分別用于設(shè)置對(duì)應(yīng)子域的bit位、清除對(duì)應(yīng)子域的bit位;查詢函數(shù)在向數(shù)據(jù)庫(kù)IO斗企索時(shí)使用,用于查詢對(duì)應(yīng)子域的bit位是否祐:設(shè)置。圖4示出了本發(fā)明一個(gè)實(shí)施例中解析單元21的結(jié)構(gòu),包括分析模塊211,對(duì)用戶輸入的查詢語(yǔ)句進(jìn)行分析,得到與合并域中各子域?qū)?yīng)的運(yùn)算表達(dá)式。本發(fā)明中,用戶輸入的查詢語(yǔ)句可為多種。在一個(gè)實(shí)例中,用戶輸入的查詢語(yǔ)句是SQL查詢語(yǔ)句,其中包含查詢域、條件域等,例如select姓名,性別,職務(wù)from職員個(gè)人信息表where工號(hào)<=002。當(dāng)然,本發(fā)明還可基于其他類(lèi)型的查詢語(yǔ)句進(jìn)行操作。設(shè)置關(guān)聯(lián)模塊212,與分析模塊211交互,將各子域的操作函數(shù)關(guān)聯(lián)到運(yùn)算表達(dá)式,得到合并域的運(yùn)算表達(dá)式。在本發(fā)明中,設(shè)置關(guān)聯(lián)模塊212將操作函數(shù)關(guān)聯(lián)到運(yùn)算表達(dá)式的方式有多種。在一個(gè)實(shí)例中,當(dāng)分析模塊211得到與合并域中各子域?qū)?yīng)的運(yùn)算表達(dá)式之后,設(shè)置關(guān)聯(lián)模塊212則根據(jù)運(yùn)算表達(dá)式里出現(xiàn)的子域名,到前述操作設(shè)置模塊l12所建立的函數(shù)映射表中找到相應(yīng)的查詢函數(shù)指針,替換相應(yīng)的子域名,得到以函數(shù)指針為操作數(shù)的運(yùn)算表達(dá)式,因此得到合并域的運(yùn)算表達(dá)式。圖5示出了本發(fā)明一個(gè)實(shí)施例中檢索單元22的結(jié)構(gòu),包括數(shù)據(jù)提取^^莫塊221,將合并域從數(shù)據(jù)庫(kù)10中導(dǎo)出。在一個(gè)實(shí)例中,數(shù)據(jù)提取模塊221可從數(shù)據(jù)庫(kù)10中導(dǎo)出全部記錄的查詢域、合并域,由于這一步驟沒(méi)有施加任何過(guò)濾條件,所以速度與數(shù)據(jù)庫(kù)10的總數(shù)據(jù)量成類(lèi)似正比的關(guān)系。查詢模塊222,與數(shù)據(jù)提取模塊221進(jìn)行交互,利用運(yùn)算表達(dá)式在從數(shù)據(jù)庫(kù)10導(dǎo)出的合并域中進(jìn)行查找,得到檢索結(jié)果。在本發(fā)明中,查詢模塊222可根據(jù)不同的查詢條件,進(jìn)行各種類(lèi)型的^f全索。在一個(gè)實(shí)例中,若要查詢數(shù)據(jù)庫(kù)10中是否含有符合檢索條件的記錄,則檢索方式是查詢模塊222先對(duì)全部記錄的合并域進(jìn)行或邏輯操作,然后利用含函數(shù)指針的合并域的運(yùn)算表達(dá)式在或邏輯操作的結(jié)果中進(jìn)行查找,根據(jù)結(jié)果判斷是否含有符合條件的記錄。在該實(shí)例中,對(duì)合并域進(jìn)行或邏輯操作的目的,是為了避免對(duì)每條結(jié)果的合并域都進(jìn)行一次函數(shù)運(yùn)算,而是在合并域進(jìn)行了或邏輯操作之后只做一次函數(shù)運(yùn)算,因此可以大大提高檢索效率。在另一實(shí)例中,若要查詢數(shù)據(jù)庫(kù)10中某條記錄的詳細(xì)內(nèi)容,則檢索方式是查詢模塊222利用含函數(shù)指針的合并域的運(yùn)算表達(dá)式在每條記錄的合并域中進(jìn)行查找,從而得到過(guò)濾結(jié)果,也即該條記錄的詳細(xì)內(nèi)容。圖6示出了本發(fā)明一個(gè)實(shí)施例中數(shù)據(jù)庫(kù)檢索方法流程。包括以下步驟在步驟S51中,將數(shù)據(jù)庫(kù)10中的多個(gè)域處理成一合并域,并對(duì)各子域進(jìn)行操作設(shè)置。在步驟S52中,根據(jù)各子域的操作設(shè)置向數(shù)據(jù)庫(kù)10存入數(shù)據(jù)。在步驟S53中,對(duì)用戶輸入的查詢語(yǔ)句進(jìn)行解析,得到與合并域中各子域的操作設(shè)置相關(guān)的運(yùn)算表達(dá)式。在步驟S54中,將運(yùn)算表達(dá)式施加到合并域之上進(jìn)行查找,得到檢索結(jié)果。圖7是圖5所示實(shí)施例中步驟S51的流程圖,包括以下步驟在步驟S511中,將數(shù)據(jù)庫(kù)10中的多個(gè)域處理成一合并域。需要說(shuō)明的是,目前數(shù)據(jù)庫(kù)支持的域的數(shù)據(jù)類(lèi)型有五種字符型、文本型、數(shù)值型、邏輯型、日期型,實(shí)際應(yīng)用中,它們的表達(dá)能力可能無(wú)法被充分利用,例如用數(shù)值型中的UNSIGNEDINT類(lèi)型來(lái)描述工資時(shí),它的表達(dá)范圍是0-4294967295,實(shí)際上正常使用的范圍可能只是O-IOOOO,則造成了表達(dá)能力和存儲(chǔ)的浪費(fèi)。本發(fā)明通過(guò)域合并模塊lll對(duì)域進(jìn)行合并,實(shí)際上就是進(jìn)行了壓縮存儲(chǔ),主要目的就是為了充分利用數(shù)據(jù)類(lèi)型的表達(dá)能力,避免存儲(chǔ)的浪費(fèi)。在一個(gè)實(shí)例中,進(jìn)行數(shù)據(jù)壓縮后的數(shù)據(jù)表定義如下:<table>tableseeoriginaldocumentpage11</column></row><table>進(jìn)行域合并后的職員信息域,每個(gè)子域(對(duì)應(yīng)合并前的域)占據(jù)一段存儲(chǔ),x表示一個(gè)bit位。如圖3所示。應(yīng)當(dāng)說(shuō)明的是,實(shí)際上可以將工號(hào)、姓名、出生日期都合并到"職員信息"域中,因?yàn)槿魏晤?lèi)型的數(shù)據(jù)都可以被二進(jìn)制類(lèi)型表示,但工號(hào)單獨(dú)被檢索的可能性較大,而姓名和出生日期作為查詢域的概率遠(yuǎn)大于作為條件域的概率,所以在此實(shí)例中沒(méi)有被合并。另外應(yīng)當(dāng)說(shuō)明的是,除了二進(jìn)制的數(shù)據(jù)類(lèi)型,還可以用其他的數(shù)據(jù)類(lèi)型來(lái)合并表達(dá)多個(gè)域,如定義N個(gè)字符,其中X個(gè)字符表示職員姓名,Y個(gè)字符表示職員的出生曰期,且X+Y《N。在步驟S512中,構(gòu)建與各子域具有映射關(guān)系的操作函數(shù)。在本發(fā)明中,所稱的操作函數(shù)可包括多種,例如寫(xiě)操作函數(shù)和讀操作函數(shù)。圖8是圖6所示實(shí)施例中步驟S512的流程圖,包括以下步驟在步驟S5121中,定義子域的掩碼,并構(gòu)建各子域的操作函數(shù)。具體過(guò)程是首先利用操作設(shè)置模塊112定義子域的掩碼,為了方便程序計(jì)算,則進(jìn)一步定義寫(xiě)操作函數(shù)和讀操作函數(shù),最后在各操作函數(shù)和各子域之間建立一個(gè)函數(shù)映射表。在該實(shí)施例中,寫(xiě)操作函數(shù)包括設(shè)置函數(shù)和清除函數(shù),該讀操作函數(shù)包括查詢函數(shù),其中設(shè)置、清除函數(shù)在向數(shù)據(jù)庫(kù)10插入、更新記錄時(shí)使用,分別用于設(shè)置對(duì)應(yīng)子域的bit位、清除對(duì)應(yīng)子域的bit位;查詢函數(shù)在向數(shù)據(jù)庫(kù)IO才企索時(shí)使用,用于查詢對(duì)應(yīng)子域的bit位是否被設(shè)置。在步驟S5122中,通過(guò)各子域的寫(xiě)操作函數(shù)在數(shù)據(jù)庫(kù)10中插入數(shù)據(jù)或更新數(shù)據(jù)。此時(shí)則需要利用前述寫(xiě)操作函數(shù)中的設(shè)置函數(shù)設(shè)置子域的bit位,利用清除函數(shù)清除對(duì)應(yīng)子域的bit位。圖9是圖5所示實(shí)施例中步驟S53的流程圖,包括以下步驟在步驟S531中,對(duì)用戶輸入的查詢語(yǔ)句進(jìn)行分析,得到與合并域中各子域?qū)?yīng)的運(yùn)算表達(dá)式。在一個(gè)實(shí)例中,該查詢語(yǔ)句是SQL查詢語(yǔ)句,其中包含查詢域、條件域等,例如select姓名,性別,職務(wù)from職員個(gè)人信息表where工號(hào)<=002。當(dāng)然,本發(fā)明還可基于其他類(lèi)型的查詢語(yǔ)句進(jìn)行操作。在步驟S532中,根據(jù)運(yùn)算表達(dá)式中的子域名得到操作函數(shù)中的讀操作函數(shù)。在一個(gè)實(shí)例中,當(dāng)分析模塊211得到與合并域中各子域?qū)?yīng)的運(yùn)算表達(dá)式之后,設(shè)置關(guān)聯(lián)模塊212根據(jù)運(yùn)算表達(dá)式里出現(xiàn)的子域名,到前述操作設(shè)置模塊112所建立的函數(shù)映射表中找到相應(yīng)的查詢函數(shù)指針。在步驟S533中,將讀操作函數(shù)關(guān)聯(lián)到各子域的運(yùn)算表達(dá)式,從而生成合并域的運(yùn)算表達(dá)式。在一個(gè)實(shí)例中,當(dāng)設(shè)置關(guān)聯(lián)模塊212在函數(shù)映射表中找到查詢函數(shù)指針后,則替換相應(yīng)的子域名,得到以函數(shù)指針為操作數(shù)的運(yùn)算表達(dá)式,因此得到包含函數(shù)指針的合并域的運(yùn)算表達(dá)式。圖10是圖5所示實(shí)施例中步驟S54的流程圖,包括以下步驟在步驟S541中,從數(shù)據(jù)庫(kù)10中導(dǎo)出合并域。在一個(gè)實(shí)例中,數(shù)據(jù)提取模塊221可從數(shù)據(jù)庫(kù)10中導(dǎo)出全部記錄的查詢域、合并域,由于這一步驟沒(méi)有施加任何過(guò)濾條件,所以速度與數(shù)據(jù)庫(kù)10的總數(shù)據(jù)量成類(lèi)似正比的關(guān)系。在步驟S542中,調(diào)用合并域的運(yùn)算表達(dá)式。在一個(gè)實(shí)例中,查詢模塊222從設(shè)置關(guān)聯(lián)模塊212中調(diào)用包含函數(shù)指針的合并域的運(yùn)算表達(dá)式,用于進(jìn)行不同^^索條件下的查詢。若查詢記錄M是否存在于數(shù)據(jù)庫(kù)10中,貝'J:步驟S543,對(duì)從數(shù)據(jù)庫(kù)10中導(dǎo)出的合并域進(jìn)行或邏輯操作。步驟S544,利用運(yùn)算表達(dá)式在該合并域的或邏輯操作結(jié)果中查找記錄M。在該實(shí)例中,對(duì)合并域進(jìn)行或邏輯操作的目的,是為了避免對(duì)每條結(jié)果的合并域都進(jìn)行一次函數(shù)運(yùn)算,而是在合并域進(jìn)行了或邏輯操作之后只做一次函數(shù)運(yùn)算,因此可以大大提高檢索效率。若查詢記錄M的詳細(xì)內(nèi)容,則包括步驟S545,將運(yùn)算表達(dá)式施加于每條記錄的合并域之上,得到過(guò)濾結(jié)果,也即該記錄M的詳細(xì)內(nèi)容。本發(fā)明還提供了一個(gè)實(shí)例。假設(shè)某數(shù)據(jù)庫(kù)表的定義為如下表:<table>tableseeoriginaldocumentpage13</column></row><table>設(shè)該表有N二6斗個(gè)Flag(標(biāo)志),且都是BOOL類(lèi)型的,取值為true或false,是一個(gè)開(kāi)關(guān)型的域。表的記錄條數(shù)為100萬(wàn),ID、Attrl、Attr2、Attr3是查詢域(即經(jīng)常被查詢,但很少作為過(guò)濾條件),F(xiàn)lagl-FlagN經(jīng)常被作為條件域?!┲гO(shè)有一個(gè)檢索請(qǐng)求selectAttrl、Attr2fromSamplewhere(Flagl&&Flag3II(Flag2&&!Flag4)&&!Flag5)&&!(Flag51|Flag6&&!Flag4)...,檢索條件包含的域非常多,與或非的運(yùn)算非常復(fù)雜,那么常規(guī)的檢索方法將耗費(fèi)很長(zhǎng)的時(shí)間;如果對(duì)Flagl-FlagN都建索引,則在大數(shù)據(jù)量的情形下將增加不少存儲(chǔ),即1"更如此,速度仍然比較慢。采用本發(fā)明的方法,具體處理過(guò)程如下所示將Flagl-FlagN合并到一個(gè)域,定義為Flag,使用二進(jìn)制類(lèi)型(或8字節(jié)的長(zhǎng)整數(shù)),寬度為64bit,每個(gè)子域(Flagl-FlagN)占據(jù)一個(gè)bit,0表示False,l表示true。定義每個(gè)子域(Flagl-FlagN)的掩碼寬度為64bit的長(zhǎng)整數(shù)(8字節(jié)),每個(gè)bit代表一個(gè)子域(Flag-FlagN),某個(gè)bit為l(其余bit均為0)的長(zhǎng)整數(shù)即是相應(yīng)的Flag的掩碼,如第一個(gè)bit為l的長(zhǎng)整數(shù)是Flagl的掩碼。為了方便程序運(yùn)算,在掩碼的基礎(chǔ)上,定義一組函數(shù)boolIsSet(char*FlagName)、voidSet(char*FlagName)、voidClear(char*FlagName),分另ll用于判斷某個(gè)Flag是否被設(shè)置、設(shè)置某個(gè)Flag的bit位、清除某個(gè)Flag的bit位,F(xiàn)lagName的取值范圍為Flag1-FlagN。定義Flag到函數(shù)的映射表isset—map〈FlagName,IsSet*>,set—map〈FlagName,Set*〉,clear—map<FlagName,Clear*〉,才艮4居FlagName可以4戈到^f應(yīng)的IsSet、Set、Clear函數(shù)指針。插入、更新記錄時(shí),若某個(gè)Flag需要被設(shè)置,則根據(jù)子域名Flagl-FlagN到seLmap里找到Set函數(shù),若某個(gè)Flag需要清除,則到clea匸map里找到Clear函數(shù),然后將Set或Clear函數(shù)施加到合并域上,即完成對(duì)應(yīng)子域的bit位的設(shè)置或清除。分解檢索請(qǐng)求,為方便描述,只取前6個(gè)Flag,即Flagl-Flag6。得到查詢域Attrl、Attr2,條件域Flagl-Flag6,并得到運(yùn)算表達(dá)式(Flagl&&Flag3II(Flag2&&!Flag4)&&!Flag5)&&!(Flag5||Flag6&&!Flag4)。根據(jù)FlagName到isset—map里找到Flag1-Flag6的IsSet函數(shù),假設(shè)為F1-F6,則表達(dá)式可以被轉(zhuǎn)化為含函數(shù)指針的表達(dá)式(F1&&F3II(F2&&!F4)&&!F5)&&!(F5||F6&&!F4)。從數(shù)據(jù)庫(kù)IO中導(dǎo)出全部記錄的Attrl、Attr2、Flag(合并域)到內(nèi)存,遍歷每一條記錄,對(duì)該記錄的Flag域的值進(jìn)行運(yùn)算(Fl(Flag)&&F3(Flag)II(F2(Flag)&&!F4(Flag))&&!F5(Flag))&&!(F5(Flag)||F6(Flag)&&!F4(Flag)),計(jì)算結(jié)果為0或1,表示該記錄應(yīng)被過(guò)濾或輸出。對(duì)于某些查詢,例如只需要知道數(shù)據(jù)庫(kù)10中是否有符合條件的記錄,而不需要知道具體哪條記錄符合條件時(shí),直接將全部記錄的Flag域進(jìn)行或邏輯操作,得到一個(gè)匯總的Flag,然后將含函數(shù)指針的運(yùn)算表達(dá)式施加在這個(gè)匯總的Flag上,計(jì)算得出l或O,即存在或不存在,這是一個(gè)非??焖俚倪^(guò)程,比常規(guī)方法的效率要高出很多。以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。權(quán)利要求1、一種數(shù)據(jù)庫(kù)檢索系統(tǒng),包括數(shù)據(jù)庫(kù)及與其交互的檢索裝置,其特征在于,所述數(shù)據(jù)庫(kù)包括域處理單元,將所述數(shù)據(jù)庫(kù)中的多個(gè)域處理成一合并域,并對(duì)所述合并域中的各子域進(jìn)行操作設(shè)置;寫(xiě)操作單元,根據(jù)各子域的操作設(shè)置向所述各子域存入數(shù)據(jù);所述檢索裝置包括解析單元,對(duì)用戶輸入的查詢語(yǔ)句進(jìn)行解析,得到與所述各子域的操作設(shè)置相關(guān)的運(yùn)算表達(dá)式;檢索單元,利用所述解析單元得到的所述運(yùn)算表達(dá)式在從數(shù)據(jù)庫(kù)導(dǎo)出的合并域中進(jìn)行查找。2、根據(jù)權(quán)利要求l所述的數(shù)據(jù)庫(kù)檢索系統(tǒng),其特征在于,所述域處理單元包括域合并模塊,將數(shù)據(jù)庫(kù)中的多個(gè)域處理成一合并域,所述合并域包含多個(gè)子域;操作設(shè)置模塊,構(gòu)建與所述各子域具有映射關(guān)系的操作函數(shù)。3、根據(jù)權(quán)利要求2所述的數(shù)據(jù)庫(kù)檢索系統(tǒng),其特征在于,所述解析單元包括分析模塊,對(duì)用戶輸入的查詢語(yǔ)句進(jìn)行分析,確定與合并域中各子域?qū)?yīng)的運(yùn)算表達(dá)式;設(shè)置關(guān)聯(lián)模塊,將所述各子域的操作函數(shù)關(guān)聯(lián)到所述各子域?qū)?yīng)的運(yùn)算表達(dá)式,得到合并域的運(yùn)算表達(dá)式。4、根據(jù)權(quán)利要求3所述的數(shù)據(jù)庫(kù)檢索系統(tǒng),其特征在于,所述檢索單元包括數(shù)據(jù)提取模塊,將合并域從數(shù)據(jù)庫(kù)中導(dǎo)出;查詢模塊,利用所述運(yùn)算表達(dá)式在從數(shù)據(jù)庫(kù)導(dǎo)出的合并域中進(jìn)行查找。5、一種數(shù)據(jù)庫(kù)檢索方法,其特征在于,所述方法包括A.將數(shù)據(jù)庫(kù)中的多個(gè)域處理成一合并域,并對(duì)所述合并域中的各子域進(jìn)行操作設(shè)置;B.根據(jù)各子域的操作設(shè)置向所述各子域存入數(shù)據(jù);C.對(duì)用戶輸入的查詢語(yǔ)句進(jìn)行解析,得到與合并域中各子域的操作設(shè)置相關(guān)的運(yùn)算表達(dá)式;D.利用所述運(yùn)算表達(dá)式在從數(shù)據(jù)庫(kù)導(dǎo)出的合并域中進(jìn)行查找。6、根據(jù)權(quán)利要求5所述的數(shù)據(jù)庫(kù)檢索方法,其特征在于,所述步驟A中對(duì)各子域進(jìn)行操作設(shè)置的過(guò)程包括構(gòu)建與各子域具有映射關(guān)系的操作函數(shù)。7、根據(jù)權(quán)利要求6所述的數(shù)據(jù)庫(kù)檢索方法,其特征在于,所述操作函數(shù)包括寫(xiě)操作函數(shù)和讀操作函數(shù)。8、根據(jù)權(quán)利要求7所述的數(shù)據(jù)庫(kù)檢索方法,其特征在于,所述寫(xiě)操作函數(shù)包括設(shè)置函數(shù)和清除函數(shù),所述讀操作函數(shù)包括查詢函數(shù)。9、根據(jù)權(quán)利要求8所述的數(shù)據(jù)庫(kù)檢索方法,其特征在于,所述步驟B包括通過(guò)各子域的寫(xiě)操作函數(shù)在數(shù)據(jù)庫(kù)中插入數(shù)據(jù)或更新數(shù)據(jù)。10、根據(jù)權(quán)利要求9所述的數(shù)據(jù)庫(kù)檢索方法,其特征在于,所述步驟C包括C1.對(duì)用戶輸入的查詢語(yǔ)句進(jìn)行分析,確定與合并域中各子域?qū)?yīng)的運(yùn)算表達(dá)式;C2.根據(jù)運(yùn)算表達(dá)式中的子域名得到操作函數(shù)中的讀操作函數(shù);C3潛讀操作函數(shù)關(guān)聯(lián)到各子域的運(yùn)算表達(dá)式,從而生成合并域的運(yùn)算表達(dá)式。11、根據(jù)權(quán)利要求10所述的數(shù)據(jù)庫(kù)檢索方法,其特征在于,所述查詢語(yǔ)句包括結(jié)構(gòu)化查詢語(yǔ)言。12、根據(jù)權(quán)利要求ll所述的數(shù)據(jù)庫(kù)檢索方法,其特征在于,所述步驟D包括D1.從數(shù)據(jù)庫(kù)中導(dǎo)出合并域;D2.調(diào)用合并域的運(yùn)算表達(dá)式,并利用所述運(yùn)算表達(dá)式在合并域中進(jìn)行查找。13、根據(jù)權(quán)利要求12所述的數(shù)據(jù)庫(kù)檢索方法,其特征在于,若查詢記錄M是否存在于數(shù)據(jù)庫(kù)中,則所述步驟D2包括D21.對(duì)從數(shù)據(jù)庫(kù)中導(dǎo)出的合并域進(jìn)行或邏輯操作;D22.利用所述運(yùn)算表達(dá)式在所述合并域的或邏輯操作結(jié)果中查找所述記錄M。14、根據(jù)權(quán)利要求12所述的數(shù)據(jù)庫(kù)檢索方法,其特征在于,所述步驟D2進(jìn)一步包括利用所述運(yùn)算表達(dá)式在每條記錄的合并域中查找記錄M的詳細(xì)內(nèi)容。全文摘要本發(fā)明提供了一種數(shù)據(jù)庫(kù)檢索方法及系統(tǒng)。所述方法包括以下步驟A.將數(shù)據(jù)庫(kù)中的多個(gè)域處理成一合并域,并對(duì)各子域進(jìn)行操作設(shè)置;B.根據(jù)各子域的操作設(shè)置向所述各子域存入數(shù)據(jù);C.對(duì)用戶輸入的查詢語(yǔ)句進(jìn)行解析,得到與合并域中各子域的操作設(shè)置相關(guān)的運(yùn)算表達(dá)式;D.利用所述運(yùn)算表達(dá)式在從數(shù)據(jù)庫(kù)導(dǎo)出的合并域中進(jìn)行查找。所述系統(tǒng)包括數(shù)據(jù)庫(kù)和檢索裝置,數(shù)據(jù)庫(kù)包括域處理單元和寫(xiě)操作單元,檢索裝置包括解析單元和檢索單元。本發(fā)明在進(jìn)行數(shù)據(jù)庫(kù)檢索的過(guò)程中,將多個(gè)域合并為一個(gè)域,然后通過(guò)與合并域中各子域的操作設(shè)置相關(guān)的運(yùn)算表達(dá)式進(jìn)行檢索,不僅降低了數(shù)據(jù)存儲(chǔ)量,并且提高了檢索效率。文檔編號(hào)G06F17/30GK101441654SQ20081018666公開(kāi)日2009年5月27日申請(qǐng)日期2008年12月16日優(yōu)先權(quán)日2008年12月16日發(fā)明者禹榮凌申請(qǐng)人:騰訊科技(深圳)有限公司