一種非關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)查詢方法和裝置制造方法
【專利摘要】本申請(qǐng)公開(kāi)了一種非關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)查詢方法和裝置,該方法包括:接收條件查詢指令,所述條件查詢指令中攜帶有至少一個(gè)查詢條件以及每個(gè)查詢條件的目標(biāo)查詢字段;根據(jù)所述預(yù)設(shè)轉(zhuǎn)換規(guī)則,對(duì)各查詢條件中的條件值進(jìn)行轉(zhuǎn)換;根據(jù)各查詢條件的目標(biāo)查詢字段對(duì)應(yīng)的各索引表中索引值的排列順序,查詢所述各索引表中符合經(jīng)過(guò)條件值轉(zhuǎn)換后的查詢條件的索引值,確定在所述各索引表中對(duì)應(yīng)的索引值都符合相應(yīng)的查詢條件的實(shí)體表主鍵,并根據(jù)確定出的實(shí)體表主鍵,在所述實(shí)體表中獲取對(duì)應(yīng)的查詢值。采用該方法,可以提高非關(guān)系型數(shù)據(jù)庫(kù)進(jìn)行條件查詢的效率。
【專利說(shuō)明】一種非關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)查詢方法和裝置
【技術(shù)領(lǐng)域】
[0001]本申請(qǐng)涉及計(jì)算機(jī)【技術(shù)領(lǐng)域】,特別是涉及一種非關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)查詢方法和
裝直。
【背景技術(shù)】
[0002]網(wǎng)絡(luò)交易平臺(tái)一般建立有賣家管理系統(tǒng),用于對(duì)賣家信息進(jìn)行存儲(chǔ)和管理。隨著交易規(guī)模的不斷擴(kuò)大,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)已經(jīng)不能滿足賣家管理系統(tǒng)對(duì)高擴(kuò)展性的要求。因此,現(xiàn)有的賣家管理系統(tǒng)通常采用非關(guān)系型數(shù)據(jù)庫(kù)來(lái)實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)。非關(guān)系型數(shù)據(jù)庫(kù)一般采用Key-Value (主鍵和值)的存儲(chǔ)方式,在數(shù)據(jù)查詢的過(guò)程中,一般根據(jù)主鍵查找對(duì)應(yīng)的值。
[0003]在賣家管理系統(tǒng)中,需要對(duì)幾乎賣家的所有信息數(shù)據(jù)進(jìn)行存儲(chǔ)、分類、篩選。因此,要求賣家管理系統(tǒng)的數(shù)據(jù)庫(kù)至少支持一些實(shí)時(shí)的、簡(jiǎn)單的、輕量級(jí)的條件查詢功能,如lesser (小于)、greater (大于)、equal (等于)、not equal (不等于)、in (在范圍內(nèi))、and (和)、or (或)等。
[0004]在實(shí)現(xiàn)本申請(qǐng)的過(guò)程中,發(fā)明人發(fā)現(xiàn),現(xiàn)有技術(shù)至少存在如下問(wèn)題:現(xiàn)有技術(shù)的非關(guān)系型數(shù)據(jù)庫(kù)在進(jìn)行條件查詢的時(shí)候,需要遍歷整個(gè)數(shù)據(jù)庫(kù),讀取所有值,并對(duì)數(shù)據(jù)庫(kù)中每個(gè)值都進(jìn)行相應(yīng)的判斷,以獲取符合查詢條件的結(jié)果,這種查詢方式,其效率非常低下。
【發(fā)明內(nèi)容】
[0005]本申請(qǐng)的目的在于,提供一種非關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)查詢方法和裝置,以提高非關(guān)系型數(shù)據(jù)庫(kù)進(jìn)行條件查詢的效率,為此,本申請(qǐng)實(shí)施例采用如下技術(shù)方案:
[0006]一種非關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)查詢方法,其特征在于,預(yù)先建立實(shí)體表中預(yù)設(shè)的字段對(duì)應(yīng)的索引表,所述索引表中記錄有實(shí)體表中各元組在所述預(yù)設(shè)的字段中的二進(jìn)制存儲(chǔ)值按照預(yù)設(shè)轉(zhuǎn)換規(guī)則轉(zhuǎn)換得到的索引值,以及對(duì)應(yīng)的實(shí)體表主鍵,所述索引表中的各元組按照記錄的索引值的字典順序排列,所述預(yù)設(shè)轉(zhuǎn)換規(guī)則為所述索引值的字典順序和所述二進(jìn)制存儲(chǔ)值對(duì)應(yīng)的實(shí)際值的大小順序一致,該方法包括:
[0007]接收條件查詢指令,所述條件查詢指令中攜帶有至少一個(gè)查詢條件以及每個(gè)查詢條件的目標(biāo)查詢字段;
[0008]根據(jù)所述預(yù)設(shè)轉(zhuǎn)換規(guī)則,對(duì)各查詢條件中的條件值進(jìn)行轉(zhuǎn)換;
[0009]根據(jù)各查詢條件的目標(biāo)查詢字段對(duì)應(yīng)的各索引表中索引值的排列順序,查詢所述各索引表中符合經(jīng)過(guò)條件值轉(zhuǎn)換后的查詢條件的索引值,確定在所述各索引表中對(duì)應(yīng)的索引值都符合相應(yīng)的查詢條件的實(shí)體表主鍵,并根據(jù)確定出的實(shí)體表主鍵,在所述實(shí)體表中獲取對(duì)應(yīng)的查詢值。
[0010]一種非關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)查詢裝置,其特征在于,包括:
[0011]建立模塊,用于預(yù)先建立實(shí)體表中預(yù)設(shè)的字段對(duì)應(yīng)的索引表,所述索引表中記錄有實(shí)體表中各元組在所述預(yù)設(shè)的字段中的二進(jìn)制存儲(chǔ)值按照預(yù)設(shè)轉(zhuǎn)換規(guī)則轉(zhuǎn)換得到的索引值,以及對(duì)應(yīng)的實(shí)體表主鍵,所述索引表中的各元組按照記錄的索引值的字典順序排列,所述預(yù)設(shè)轉(zhuǎn)換規(guī)則為所述索引值的字典順序和所述二進(jìn)制存儲(chǔ)值對(duì)應(yīng)的實(shí)際值的大小順
序一致;
[0012]接收模塊,用于接收條件查詢指令,所述條件查詢指令中攜帶有至少一個(gè)查詢條件以及每個(gè)查詢條件的目標(biāo)查詢字段;
[0013]轉(zhuǎn)換模塊,用于根據(jù)所述預(yù)設(shè)轉(zhuǎn)換規(guī)則,對(duì)各查詢條件中的條件值進(jìn)行轉(zhuǎn)換;
[0014]查詢模塊,用于根據(jù)各查詢條件的目標(biāo)查詢字段對(duì)應(yīng)的各索引表中索引值的排列順序,查詢所述各索引表中符合經(jīng)過(guò)條件值轉(zhuǎn)換后的查詢條件的索引值,確定在所述各索引表中對(duì)應(yīng)的索引值都符合相應(yīng)的查詢條件的實(shí)體表主鍵,并根據(jù)確定出的實(shí)體表主鍵,在所述實(shí)體表中獲取對(duì)應(yīng)的查詢值。
[0015]本申請(qǐng)的實(shí)施例中,預(yù)先建立實(shí)體表中預(yù)設(shè)的字段對(duì)應(yīng)的索引表,所述索引表中記錄有實(shí)體表中各元組在所述預(yù)設(shè)的字段中的二進(jìn)制存儲(chǔ)值按照預(yù)設(shè)轉(zhuǎn)換規(guī)則轉(zhuǎn)換得到的索引值,以及對(duì)應(yīng)的實(shí)體表主鍵,所述索引表中的各元組按照記錄的索引值的字典順序排列,所述預(yù)設(shè)轉(zhuǎn)換規(guī)則為所述索引值的字典順序和所述二進(jìn)制存儲(chǔ)值對(duì)應(yīng)的實(shí)際值的大小順序一致;接收條件查詢指令,所述條件查詢指令中攜帶有至少一個(gè)查詢條件以及每個(gè)查詢條件的目標(biāo)查詢字段;根據(jù)所述預(yù)設(shè)轉(zhuǎn)換規(guī)則,對(duì)各查詢條件中的條件值進(jìn)行轉(zhuǎn)換;根據(jù)各查詢條件的目標(biāo)查詢字段對(duì)應(yīng)的各索引表中索引值的排列順序,查詢所述各索引表中符合經(jīng)過(guò)條件值轉(zhuǎn)換后的查詢條件的索引值,確定在所述各索引表中對(duì)應(yīng)的索引值都符合相應(yīng)的查詢條件的實(shí)體表主鍵,并根據(jù)確定出的實(shí)體表主鍵,在所述實(shí)體表中獲取對(duì)應(yīng)的查詢值。從而,可以提高非關(guān)系型數(shù)據(jù)庫(kù)進(jìn)行條件查詢的效率。當(dāng)然,實(shí)施本申請(qǐng)的實(shí)施例的任一產(chǎn)品并不一定需要同時(shí)達(dá)到以上所述的所有優(yōu)點(diǎn)。
【專利附圖】
【附圖說(shuō)明】
[0016]圖1為本申請(qǐng)實(shí)施例提供的非關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)查詢方法的流程示意圖;
[0017]圖2為本申請(qǐng)實(shí)施例提供的非關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)查詢方法中進(jìn)行數(shù)據(jù)轉(zhuǎn)換和重新排序的不意圖;
[0018]圖3為本申請(qǐng)實(shí)施例提供的非關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)查詢方法中進(jìn)行數(shù)據(jù)轉(zhuǎn)換和重新排序的不意圖;
[0019]圖4為本申請(qǐng)實(shí)施例提供的非關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)查詢方法的流程示意圖;
[0020]圖5為本申請(qǐng)實(shí)施例提供的非關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)查詢方法的流程示意圖;
[0021]圖6為本申請(qǐng)實(shí)施例提供的非關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)查詢方法的流程示意圖;
[0022]圖7為本申請(qǐng)實(shí)施例提供的非關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)查詢方法的流程示意圖;
[0023]圖8為本申請(qǐng)實(shí)施例提供的非關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)查詢裝置的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0024]下面將結(jié)合本申請(qǐng)中的附圖,對(duì)本申請(qǐng)中的技術(shù)方案進(jìn)行清楚、完整的描述,顯然,所描述的實(shí)施例是本申請(qǐng)的一部分實(shí)施例,而不是全部的實(shí)施例。基于本申請(qǐng)中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)的前提下所獲得的所有其他實(shí)施例,都屬于本申請(qǐng)保護(hù)的范圍。[0025]實(shí)施例一
[0026]本申請(qǐng)實(shí)施例提供了一種非關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)查詢方法,在該方法中,系統(tǒng)可以預(yù)先建立實(shí)體表中預(yù)設(shè)的字段對(duì)應(yīng)的索引表,索引表中記錄有實(shí)體表中各元組(即表中的各行)在該預(yù)設(shè)的字段中的二進(jìn)制存儲(chǔ)值的索引值以及對(duì)應(yīng)的實(shí)體表主鍵,該二進(jìn)制存儲(chǔ)值可以按照預(yù)設(shè)轉(zhuǎn)換規(guī)則轉(zhuǎn)換得到對(duì)應(yīng)的索引值,索引表中的各元組可以按照記錄的索引值的字典順序排列,所述按預(yù)設(shè)轉(zhuǎn)換規(guī)則得到的索引值的字典順序與二進(jìn)制存儲(chǔ)值對(duì)應(yīng)的實(shí)際值的大小順序一致。
[0027]本申請(qǐng)實(shí)施例中的索引表是專門建立的用于條件查詢的表,可以對(duì)應(yīng)某個(gè)字段(即表中的某個(gè)列)建立索引表,當(dāng)對(duì)這個(gè)列的數(shù)據(jù)進(jìn)行條件查詢時(shí),則可以應(yīng)用該索引表。此外,也可以對(duì)應(yīng)多個(gè)字段(即表中的多個(gè)列)建立用于多條件查詢的聯(lián)合索引表,索引表的建立流程可以如圖1所示,包括如下步驟:
[0028]步驟101,將實(shí)體表中各元組在預(yù)設(shè)的字段中的二進(jìn)制存儲(chǔ)值按照預(yù)設(shè)轉(zhuǎn)換規(guī)則轉(zhuǎn)換得到的索引值。
[0029]其中,預(yù)設(shè)的字段是系統(tǒng)預(yù)先設(shè)定的需要進(jìn)行針對(duì)性的條件查詢的字段。例如,某實(shí)體表中包括姓名、年齡、籍貫三個(gè)字段,系統(tǒng)需要經(jīng)常根據(jù)年齡和籍貫進(jìn)行條件查詢,則可以對(duì)應(yīng)年齡和籍貫的字段分別建立年齡索引表和籍貫索引表。
[0030]字段中的二進(jìn)制存儲(chǔ)值,即計(jì)算機(jī)在存儲(chǔ)相應(yīng)的字段值時(shí)采用的二進(jìn)制值。例如,某元組中年齡字段的字段值為10,相應(yīng)的二進(jìn)制存儲(chǔ)值可以為0000000000001010。
[0031]上述的預(yù)設(shè)轉(zhuǎn)換規(guī)則可以是:使轉(zhuǎn)換所得的索引值的字典順序和二進(jìn)制存儲(chǔ)值對(duì)應(yīng)的實(shí)際值的大小順序一致,即在轉(zhuǎn)換后索引值的字典排序與實(shí)際值按大小排序的排列結(jié)果是一樣的。
[0032]該轉(zhuǎn)換規(guī)則可以具體為:當(dāng)字段的數(shù)據(jù)類型為整型(包括Short型(短整型)、Int型(整型)、Long型(長(zhǎng)整型))時(shí),對(duì)符號(hào)位(一般為最前面的一位)進(jìn)行取反,如圖2所示,是對(duì)整型字段的數(shù)據(jù)進(jìn)行轉(zhuǎn)換前后的字典順序排列的結(jié)果;當(dāng)字段的數(shù)據(jù)類型為浮點(diǎn)型(包括Float型(浮點(diǎn)型)、Double型(雙精度浮點(diǎn)型))時(shí),對(duì)正數(shù)的符號(hào)位進(jìn)行取反,對(duì)負(fù)數(shù)的所有位進(jìn)行取反,如圖3所示,是對(duì)浮點(diǎn)型字段的數(shù)據(jù)進(jìn)行轉(zhuǎn)換前后的字典順序排列的結(jié)果。
[0033]步驟102,將索引值和對(duì)應(yīng)的實(shí)體表主鍵配對(duì)作為索引表的元組的value (值)??梢?jiàn),索引表中元組的value記錄的是索引值與實(shí)體表主鍵的對(duì)應(yīng)關(guān)系,在其value中還可以記錄實(shí)體表主鍵的長(zhǎng)度(字節(jié)數(shù)),這樣,在查詢的過(guò)程中可以對(duì)元組中實(shí)體表主鍵的字段和索引值的字段進(jìn)行精確定位。
[0034]步驟103,將各value按照其中的索引值的字典順序進(jìn)行排序,并給排序后的各value設(shè)置相應(yīng)的索引表主鍵,以建立索引表。索引表主鍵是按照排序后的value的順序設(shè)置的。
[0035]本申請(qǐng)實(shí)施例中,基于上述系統(tǒng)預(yù)先建立的索引表,非關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)查詢方法的流程,可以如圖4所示,包括如下步驟:
[0036]步驟401,接收條件查詢指令,條件查詢指令中攜帶有至少一個(gè)查詢條件以及每個(gè)查詢條件的目標(biāo)查詢字段。每個(gè)查詢條件都針對(duì)一個(gè)字段進(jìn)行查詢,該字段就是該查詢條件的目標(biāo)查詢字段,例如,某查詢指令中攜帶的查詢條件是“PR01 = VALUEl AND PR02 >VALUE2 AND VALUE3 < PR03 < VALUE4”,第一個(gè)查詢條件是查詢?cè)赑ROl (字段I)中等于VALUE1(條件值I)的值,第二個(gè)查詢條件是查詢?cè)赑R02(字段2)中大于VALUE2 (條件值2)的值,第三個(gè)查詢條件是查詢?cè)赑R03 (字段3)中大于VALUE3 (條件值3)小于VALUE4 (條件值4)的值,三個(gè)查詢條件之間是和(AND)的關(guān)系。
[0037]步驟402,根據(jù)預(yù)設(shè)轉(zhuǎn)換規(guī)則,對(duì)各查詢條件中的條件值進(jìn)行轉(zhuǎn)換。其中,條件值即為非范圍查詢的目標(biāo)查詢值(VALUEl)或范圍查詢的范圍閾值(VALUE2、VALUE3、VALUE4)。
[0038]對(duì)條件值的二進(jìn)制存儲(chǔ)值(或稱二進(jìn)制碼)進(jìn)行與實(shí)體表中字段值到索引值的轉(zhuǎn)換相同的轉(zhuǎn)換,即進(jìn)行上述預(yù)設(shè)轉(zhuǎn)換規(guī)則的轉(zhuǎn)換,具體方法可以參照步驟101中的具體描述。
[0039]步驟403,根據(jù)各查詢條件的目標(biāo)查詢字段對(duì)應(yīng)的各索引表中索引值的排列順序,查詢各索引表中符合經(jīng)過(guò)條件值轉(zhuǎn)換后的查詢條件的索引值,確定在各索引表中對(duì)應(yīng)的索引值都符合相應(yīng)的查詢條件的實(shí)體表主鍵,并根據(jù)確定出的實(shí)體表主鍵,在實(shí)體表中獲取對(duì)應(yīng)的查詢值。
[0040]其中,查詢索引值時(shí),可以查詢符合經(jīng)過(guò)條件值轉(zhuǎn)換后的查詢條件的索引值中的一部分,也可以查詢?nèi)俊?br>
[0041]由于索引表中索引值的排列順序與實(shí)體表中相應(yīng)字段實(shí)際值的大小順序一致,所以根據(jù)查詢條件對(duì)實(shí)體表中目標(biāo)查詢字段值的查詢,就可以轉(zhuǎn)換為根據(jù)經(jīng)過(guò)條件值轉(zhuǎn)換后的查詢條件對(duì)各目標(biāo)查詢字段對(duì)應(yīng)的索引表中的索引值的查詢。由于索引值的排列順序與對(duì)應(yīng)的實(shí)際值的大小順序一致,所以對(duì)索引值的條件查詢無(wú)需遍歷整個(gè)索引表,具體可以參見(jiàn)下面例子。在查詢到相應(yīng)的實(shí)體表主鍵后,則可以在實(shí)體表中找到對(duì)應(yīng)的查詢值。
[0042]具體的,當(dāng)條件查詢指令中攜帶有一個(gè)查詢條件時(shí),步驟403中的查詢方法可以包括如下過(guò)程:
[0043]根據(jù)經(jīng)過(guò)條件值轉(zhuǎn)換后的查詢條件,以及該查詢條件的目標(biāo)查詢字段對(duì)應(yīng)的索引表中的各索引值的排列順序,對(duì)該索引表中的索引值進(jìn)行查詢,確定符合所述經(jīng)過(guò)條件值轉(zhuǎn)換后的查詢條件的索引值;獲取查詢到的索引值對(duì)應(yīng)的實(shí)體表主鍵;根據(jù)獲取到的實(shí)體表主鍵,在實(shí)體表中獲取對(duì)應(yīng)的查詢值。例如,對(duì)于查詢條件PRO = VALUE,只需將VALUEl按預(yù)設(shè)轉(zhuǎn)換規(guī)則轉(zhuǎn)換為VALUE1’,然后再索引表中查詢等于VALUE1’的索引值(這些索引值在索引表中被存儲(chǔ)在相鄰的元組中),并獲取對(duì)應(yīng)的實(shí)體表主鍵;對(duì)于查詢條件PRO > VALUE,只需將VALUE按預(yù)設(shè)轉(zhuǎn)換規(guī)則轉(zhuǎn)換為VALUE’,然后再在索引表中查詢VALUE’之后(假設(shè)索引值按字典順序從小到大排列)的所有元組,獲取對(duì)應(yīng)的實(shí)體表主鍵。此處,獲取符合條件的索引值,可以是獲取其中的一部分索引值,也可以獲取所有符合條件的索引值。
[0044]具體的,當(dāng)條件查詢指令中攜帶有多個(gè)查詢條件時(shí),步驟403中的查詢流程可以包括如下步驟:
[0045]步驟A,根據(jù)經(jīng)過(guò)條件值轉(zhuǎn)換后的各查詢條件,以及各查詢條件的目標(biāo)查詢字段對(duì)應(yīng)的各索引表中索引值的排列順序,分別對(duì)各索引表中的索引值進(jìn)行查詢,確定各索引表中符合相應(yīng)的查詢條件的索引值。對(duì)于每個(gè)查詢條件,具體查詢方法可以參見(jiàn)上述一個(gè)查詢條件的查詢方法的具體內(nèi)容。
[0046]步驟B,分別在各索引表中獲取查詢到的索引值對(duì)應(yīng)的實(shí)體表主鍵,建立與各索引表對(duì)應(yīng)的主鍵集合。對(duì)于每個(gè)索引表,將查詢到的多個(gè)索引值對(duì)應(yīng)的實(shí)體表主鍵存儲(chǔ)在一個(gè)王鍵集合中。
[0047]步驟C,根據(jù)多個(gè)查詢條件之間的關(guān)系,對(duì)獲取到的各主鍵集合進(jìn)行相應(yīng)的集合運(yùn)算,獲取經(jīng)過(guò)集合運(yùn)算后得到的主鍵集合中包含的實(shí)體表主鍵。例如,兩個(gè)查詢條件之間如果是和的關(guān)系,則對(duì)相應(yīng)的兩個(gè)索引表的主鍵集合進(jìn)行取交集的操作;兩個(gè)查詢條件之間如果是或的關(guān)系,則對(duì)相應(yīng)的兩個(gè)索引表的主鍵集合進(jìn)行取并集的操作。
[0048]優(yōu)選的,在對(duì)集合進(jìn)行的取交集運(yùn)算時(shí),可以根據(jù)二叉查詢樹(shù)的方式進(jìn)行取交集的操作,具體方法在實(shí)施例二中將進(jìn)行詳細(xì)闡述。
[0049]步驟D,根據(jù)獲取到的實(shí)體表主鍵,在實(shí)體表中獲取對(duì)應(yīng)的查詢值。
[0050]上述流程在具體實(shí)施中,可以在符合經(jīng)過(guò)條件值轉(zhuǎn)換后的各查詢條件的索引值對(duì)應(yīng)的實(shí)體表主鍵中挑選一部分建立主鍵集合,進(jìn)行后續(xù)集合運(yùn)算,獲取相應(yīng)結(jié)果,并在結(jié)果數(shù)量不夠的時(shí)候,繼續(xù)挑選下一部分進(jìn)行重復(fù)操作??梢灶A(yù)先將實(shí)體表主鍵按照順序劃分為多個(gè)主鍵區(qū)間,例如,將1-10的10個(gè)主鍵劃分為1-5、6-8、9-10三個(gè)主鍵區(qū)間。具體流程可以如下:
[0051]步驟A,根據(jù)經(jīng)過(guò)條件值轉(zhuǎn)換后的各查詢條件,以及各查詢條件的目標(biāo)查詢字段對(duì)應(yīng)的各索引表中索引值的排列順序,分別對(duì)各索引表中的索引值進(jìn)行查詢,確定各索引表中符合相應(yīng)的查詢條件的索引值;將在各索引表中查詢到的索引值按照其對(duì)應(yīng)的實(shí)體表主鍵的順序進(jìn)行排序;將第一主鍵區(qū)間作為基準(zhǔn)主鍵區(qū)間;建立查詢值集合,該查詢值集合的初始狀態(tài)為空,用于存放最終得到的查詢值。
[0052]步驟B,分別在各索引表中獲取查詢到的索引值對(duì)應(yīng)的實(shí)體表主鍵中在基準(zhǔn)主鍵區(qū)間內(nèi)的實(shí)體表主鍵,建立與各索引表對(duì)應(yīng)的主鍵集合。
[0053]步驟C,根據(jù)多個(gè)查詢條件之間的關(guān)系,對(duì)獲取到的各主鍵集合進(jìn)行相應(yīng)的集合運(yùn)算,獲取經(jīng)過(guò)集合運(yùn)算后得到的主鍵集合中包含的實(shí)體表主鍵。
[0054]步驟D,根據(jù)獲取到的實(shí)體表主鍵,在實(shí)體表中獲取對(duì)應(yīng)的查詢值;將獲取到的查詢值并入到查詢值集合中;判斷查詢值集合中包含的查詢值的數(shù)目是否達(dá)到預(yù)設(shè)數(shù)目閾值;如果是,則將查詢值集合中的查詢值作為查詢結(jié)果;否則,如果基準(zhǔn)主鍵區(qū)間為最后一個(gè)主鍵區(qū)間,則將查詢值集合中的查詢值作為查詢結(jié)果,如果基準(zhǔn)主鍵區(qū)間不是最后一個(gè)主鍵區(qū)間,則將該基準(zhǔn)主鍵區(qū)間的下一個(gè)主鍵區(qū)間作為基準(zhǔn)主鍵區(qū)間,并轉(zhuǎn)至步驟B。
[0055]上述流程中,只在相應(yīng)的索引表中取部分(對(duì)應(yīng)實(shí)體表主鍵的某個(gè)主鍵區(qū)間)符合條件的索引值對(duì)應(yīng)的實(shí)體表主鍵建立主鍵集合,進(jìn)行集合運(yùn)算,如果查詢結(jié)果的數(shù)目沒(méi)有達(dá)到預(yù)設(shè)的數(shù)目閾值,則重復(fù)流程,取下一個(gè)主鍵區(qū)間,可以保證查詢結(jié)果的數(shù)目能夠滿足預(yù)定的數(shù)目要求。
[0056]步驟D中,將獲取到的查詢值并入到查詢值集合中之前,還可以包括:判斷獲取到的查詢值是否滿足所述條件查詢指令中攜帶的所有查詢條件,刪除不滿足所有查詢條件的查詢值。在索引表的建立和更新的過(guò)程中,可能會(huì)在索引表中產(chǎn)生錯(cuò)誤的元組,這時(shí),可以采用這種驗(yàn)證方式判斷查詢得到的結(jié)果是否正確。
[0057]本申請(qǐng)實(shí)施例中,對(duì)于一些特定的且常用的查詢需求,可以針對(duì)性的建立聯(lián)合索引表,聯(lián)合索引表與多個(gè)字段相對(duì)應(yīng)。具體的,預(yù)先建立實(shí)體表中預(yù)設(shè)的多個(gè)字段對(duì)應(yīng)的聯(lián)合索引表,將實(shí)體表中各元組在預(yù)設(shè)的多個(gè)字段中的二進(jìn)制存儲(chǔ)值按照預(yù)設(shè)轉(zhuǎn)換規(guī)則轉(zhuǎn)換得到相應(yīng)的索引值,將元組對(duì)應(yīng)的各索引值按預(yù)設(shè)字段順序連接得到聯(lián)合索引值,在該聯(lián)合索引表中記錄聯(lián)合索引值以及對(duì)應(yīng)的實(shí)體表主鍵,聯(lián)合索引表中的各元組按照記錄的聯(lián)合索引值的字典順序排列。
[0058]基于聯(lián)合索引表的查詢方式,一般可以針對(duì)多條件查詢,多個(gè)查詢條件之間是和的關(guān)系,且多個(gè)查詢條件中沒(méi)有范圍查詢條件。例如,對(duì)于某個(gè)實(shí)體表,經(jīng)常會(huì)進(jìn)行“PR01=VALUEl AND PR02 = VALUE2 AND PR03 = VALUE3” 的查詢,則可以預(yù)先對(duì)應(yīng) PROl (字段
I)、PR02 (字段2)、PR03 (字段3)建立聯(lián)合索引表。具體的查詢過(guò)程可以包括如下步驟:
[0059]步驟一,接收條件查詢指令。
[0060]步驟二,當(dāng)條件查詢指令中攜帶有多個(gè)查詢條件,多個(gè)查詢條件中沒(méi)有范圍查詢條件,多個(gè)查詢條件之間是和的關(guān)系,且多個(gè)查詢條件的目標(biāo)查詢字段與所述預(yù)設(shè)的多個(gè)字段相同時(shí),根據(jù)預(yù)設(shè)轉(zhuǎn)換規(guī)則,對(duì)各查詢條件中的條件值進(jìn)行轉(zhuǎn)換,并根據(jù)各查詢條件與目標(biāo)查詢字段的對(duì)應(yīng)關(guān)系,將轉(zhuǎn)換后的各條件值按預(yù)設(shè)字段順序連接得到聯(lián)合條件值。例如,查詢條件為 “PR01 = VALUEIAND PR02 = VALUE2 AND PR03 = VALUE3”,則將 VALUE1、VALUE2、VALUE3分別按照預(yù)設(shè)轉(zhuǎn)換規(guī)則轉(zhuǎn)換為VALUE1’、VALUE2’、VALUE3’,然后按照預(yù)設(shè)字段順序連接。
[0061]步驟三,在所述聯(lián)合索引表中,查詢與聯(lián)合條件值相等的聯(lián)合索引值,并確定查詢到的聯(lián)合索引值對(duì)應(yīng)的實(shí)體表主鍵。
[0062]步驟四,根據(jù)確定出的實(shí)體表主鍵,在實(shí)體表中獲取對(duì)應(yīng)的查詢值。
[0063]另外,基于聯(lián)合索引表的查詢方式,一般還可以針對(duì)多條件查詢,多個(gè)查詢條件之間是和的關(guān)系,且多個(gè)查詢條件中只有一個(gè)范圍查詢條件的情況。例如,對(duì)于某個(gè)實(shí)體表,經(jīng)常會(huì)進(jìn)行“PR01 = VALUEl AND PR02 = VALUE2 AND PR03 < VALUE3” 的查詢,則可以預(yù)先對(duì)應(yīng)PROl (字段I)、PR02 (字段2)、PR03 (字段3)建立聯(lián)合索引表,需要注意的是,其中的預(yù)設(shè)字段順序要將PR03(即對(duì)應(yīng)范圍查詢條件的字段)放在最后。具體的查詢過(guò)程可以包括如下步驟:
[0064]步驟一,接收條件查詢指令。
[0065]步驟二,當(dāng)條件查詢指令中攜帶有多個(gè)查詢條件,多個(gè)查詢條件中包括一個(gè)范圍查詢條件,多個(gè)查詢條件之間是和的關(guān)系,多個(gè)查詢條件分別對(duì)應(yīng)不同的目標(biāo)查詢字段,多個(gè)查詢條件的目標(biāo)查詢字段與預(yù)設(shè)的多個(gè)字段相同,且范圍查詢條件的目標(biāo)查詢字段為預(yù)設(shè)字段順序中的排在最后的字段時(shí),根據(jù)預(yù)設(shè)轉(zhuǎn)換規(guī)則,對(duì)各查詢條件中的條件值進(jìn)行轉(zhuǎn)換。
[0066]步驟三,如果范圍查詢條件的范圍為第一條件值和第二條件值之間的范圍,則根據(jù)各查詢條件與目標(biāo)查詢字段的對(duì)應(yīng)關(guān)系,將轉(zhuǎn)換后的第一條件值與轉(zhuǎn)換后的其它非范圍查詢條件的條件值按預(yù)設(shè)字段順序連接得到第一聯(lián)合條件值,將轉(zhuǎn)換后的第二條件值與轉(zhuǎn)換后的其它非范圍查詢條件的條件值按預(yù)設(shè)字段順序連接得到第二聯(lián)合條件值。例如,進(jìn)行“PR01 = VALUEl AND PR02 = VALUE2 AND VALUE3 < PR03 < VALUE4”的查詢,可以按預(yù)設(shè)轉(zhuǎn)換規(guī)則將將 VALUE1、VALUE2、VALUE3、VALUE4 分別轉(zhuǎn)換為 VALUE1’、VALUE2’、VALUE3’、VALUE4’,假設(shè)預(yù)設(shè)字段順序?yàn)?PROl、PR02、PR03,則將 VALUE1’、VALUE2’、VALUE4’ 按該順序連接得到第一聯(lián)合條件值,將VALUE1’、VALUE2’、VALUE3’按該順序鏈接得到第二聯(lián)合條件值。
[0067]或者,如果范圍查詢條件的范圍為小于第三條件值的范圍,則根據(jù)各查詢條件與目標(biāo)查詢字段的對(duì)應(yīng)關(guān)系,將轉(zhuǎn)換后的第三條件值與轉(zhuǎn)換后的其它非范圍查詢條件的條件值按所述預(yù)設(shè)字段順序連接得到第一聯(lián)合條件值,將轉(zhuǎn)換后的其它非范圍查詢條件的條件值按預(yù)設(shè)字段順序連接,并在最后補(bǔ)充與轉(zhuǎn)換后的第三條件值位數(shù)相同的O得到第二聯(lián)合條件值。例如,進(jìn)行 “PR01 = VALUEIAND PR02 = VALUE2 AND PR03 < VALUE3” 的查詢,可以按預(yù)設(shè)轉(zhuǎn)換規(guī)則將將VALUE1、VALUE2、VALUE3分別轉(zhuǎn)換為VALUE1’、VALUE2’、VALUE3’,假設(shè)預(yù)設(shè)字段順序?yàn)镻R01、PR02、PR03,則將VALUE1’、VALUE2’、VALUE3’按該順序連接得到第一聯(lián)合條件值,將VALUE I’、VALUE2’、“00000000” (假設(shè)VALUE3’為8位)按該順序鏈接得到第二聯(lián)合條件值。
[0068]或者,如果范圍查詢條件的范圍為大于第四條件值的范圍,則根據(jù)各查詢條件與目標(biāo)查詢字段的對(duì)應(yīng)關(guān)系,將轉(zhuǎn)換后的第四條件值與轉(zhuǎn)換后的其它非范圍查詢條件的條件值按所述預(yù)設(shè)字段順序連接得到第一聯(lián)合條件值,將轉(zhuǎn)換后的其它非范圍查詢條件的條件值按預(yù)設(shè)字段順序連接,并在最后補(bǔ)充與轉(zhuǎn)換后的第四條件值位數(shù)相同的I得到第二聯(lián)合條件值。例如,進(jìn)行 “PR01 = VALUEIAND PR02 = VALUE2 AND PR03 > VALUE3” 的查詢,可以按預(yù)設(shè)轉(zhuǎn)換規(guī)則將將VALUE1、VALUE2、VALUE3分別轉(zhuǎn)換為VALUE1’、VALUE2’、VALUE3’,假設(shè)預(yù)設(shè)字段順序?yàn)镻R01、PR02、PR03,則將VALUE1’、VALUE2’、VALUE3’按該順序連接得到第一聯(lián)合條件值,將VALUE I’、VALUE2 ’、“ 11111111”(假設(shè)VALUE3 ’為8位)按該順序鏈接得到第二聯(lián)合條件值。
[0069]步驟四,在聯(lián)合索引表中,根據(jù)聯(lián)合索引值的排列順序,查詢第一聯(lián)合條件值和第二聯(lián)合條件值之間范圍內(nèi)的聯(lián)合索引值,并確定查詢到的聯(lián)合索引值對(duì)應(yīng)的實(shí)體表主鍵。
[0070]步驟五,根據(jù)確定出的實(shí)體表主鍵,在實(shí)體表中獲取對(duì)應(yīng)的查詢值。
[0071]本申請(qǐng)實(shí)施例中,當(dāng)實(shí)體表中的元組需要被刪除時(shí),對(duì)實(shí)體表與索引表的修改流程,如圖5所示,可以包括如下步驟:
[0072]步驟501,接收攜帶有實(shí)體表的標(biāo)識(shí)的刪除指令,且刪除指令的目標(biāo)刪除字段對(duì)應(yīng)建立有索引表。
[0073]步驟502,根據(jù)刪除指令中攜帶的實(shí)體表主鍵,獲取實(shí)體表中對(duì)應(yīng)的元組在目標(biāo)刪除字段的二進(jìn)制存儲(chǔ)值。
[0074]步驟503,根據(jù)預(yù)設(shè)轉(zhuǎn)換規(guī)則,將該二進(jìn)制存儲(chǔ)值轉(zhuǎn)換為索引值。
[0075]步驟504,根據(jù)該索引值,在刪除指令的目標(biāo)刪除字段對(duì)應(yīng)的索引表中,查找到對(duì)應(yīng)的元組,并刪除該元組。
[0076]步驟505,根據(jù)所述刪除指令,對(duì)實(shí)體表進(jìn)行刪除操作。
[0077]上述步驟501-步驟505可以由索引處理器來(lái)執(zhí)行。
[0078]本申請(qǐng)實(shí)施例,當(dāng)對(duì)實(shí)體表進(jìn)行put (放入)操作時(shí)(其中,放入操作可以是插入操作或修改操作),對(duì)實(shí)體表與索引表的修改流程,如圖6所示,可以包括如下步驟:
[0079]步驟G,接收攜帶有實(shí)體表的標(biāo)識(shí)的放入指令,且放入指令的目標(biāo)放入字段對(duì)應(yīng)建立有索引表。
[0080]步驟H,根據(jù)放入指令中攜帶的實(shí)體表主鍵,獲取實(shí)體表中對(duì)應(yīng)的元組在目標(biāo)放入字段的二進(jìn)制存儲(chǔ)值。
[0081]該步驟還可以包括:獲取放入指令中攜帶的實(shí)體表主鍵對(duì)應(yīng)的元組的lock值(版本值)。[0082]步驟I,根據(jù)預(yù)設(shè)轉(zhuǎn)換規(guī)則,將該二進(jìn)制存儲(chǔ)值轉(zhuǎn)換為索引值。
[0083]步驟J,根據(jù)該索引值,在放入指令的目標(biāo)放入字段對(duì)應(yīng)的索引表中,查找到對(duì)應(yīng)的元組,并刪除該元組。
[0084]步驟K,根據(jù)預(yù)設(shè)轉(zhuǎn)換規(guī)則,將放入指令中的放入值轉(zhuǎn)換為相應(yīng)的索引值,并根據(jù)該索引值和實(shí)體表主鍵建立索引表元組,再根據(jù)索引值的字典順序?qū)⒃撛M插入到索引表中。
[0085]在該步驟之后還可以包括:判斷放入指令中攜帶的實(shí)體表主鍵對(duì)應(yīng)的元組的當(dāng)前版本值與步驟H中獲取的版本值是否相同,如果相同,則執(zhí)行步驟L,否則,轉(zhuǎn)至步驟H。
[0086]在具體的實(shí)施中,可能會(huì)出現(xiàn)多個(gè)放入操作并行執(zhí)行的情況,這將有可能導(dǎo)致在進(jìn)行完步驟H后,實(shí)體表中目標(biāo)放入字段的值發(fā)生變化,在發(fā)生變化的情況下,執(zhí)行完步驟K后,該流程將返回到步驟H,重新獲取實(shí)體表中目標(biāo)放入字段的值,并對(duì)索引表進(jìn)行相應(yīng)的刪除和插入操作。直到步驟K中進(jìn)行判斷的當(dāng)前的版本值與步驟H獲取到的版本值相同時(shí),再繼續(xù)執(zhí)行步驟L。
[0087]步驟L,根據(jù)放入指令對(duì)實(shí)體表進(jìn)行相應(yīng)的放入操作。
[0088]上述步驟G-步驟L可以由索引處理器來(lái)執(zhí)行。
[0089]本申請(qǐng)的實(shí)施例中,預(yù)先建立實(shí)體表中預(yù)設(shè)的字段對(duì)應(yīng)的索引表,所述索引表中記錄有實(shí)體表中各元組在所述預(yù)設(shè)的字段中的二進(jìn)制存儲(chǔ)值按照預(yù)設(shè)轉(zhuǎn)換規(guī)則轉(zhuǎn)換得到的索引值,以及對(duì)應(yīng)的實(shí)體表主鍵,所述索引表中的各元組按照記錄的索引值的字典順序排列,所述預(yù)設(shè)轉(zhuǎn)換規(guī)則為所述索引值的字典順序和所述二進(jìn)制存儲(chǔ)值對(duì)應(yīng)的實(shí)際值的大小順序一致;接收條件查詢指令,所述條件查詢指令中攜帶有至少一個(gè)查詢條件以及每個(gè)查詢條件的目標(biāo)查詢字段;根據(jù)所述預(yù)設(shè)轉(zhuǎn)換規(guī)則,對(duì)各查詢條件中的條件值進(jìn)行轉(zhuǎn)換;根據(jù)各查詢條件的目標(biāo)查詢字段對(duì)應(yīng)的各索引表中索引值的排列順序,查詢所述各索引表中符合經(jīng)過(guò)條件值轉(zhuǎn)換后的查詢條件的索引值,確定在所述各索引表中對(duì)應(yīng)的索引值都符合相應(yīng)的查詢條件的實(shí)體表主鍵,并根據(jù)確定出的實(shí)體表主鍵,在所述實(shí)體表中獲取對(duì)應(yīng)的查詢值。從而,可以提高非關(guān)系型數(shù)據(jù)庫(kù)進(jìn)行條件查詢的效率。
[0090]實(shí)施例二
[0091]如圖7所示,其為本申請(qǐng)實(shí)施例提供的非關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)查詢方法在具體應(yīng)用場(chǎng)景中的查詢流程。在該應(yīng)用場(chǎng)景中,該查詢過(guò)程針對(duì)字段A、B、C進(jìn)行,查詢條件為O
<A < 10 AND I < B < 8 AND 2 < C < 9,系統(tǒng)預(yù)先建立有與字段A、B、C對(duì)應(yīng)的索引表A、索引表B、索引表C,系統(tǒng)預(yù)先將實(shí)體表按照主鍵劃分為多個(gè)主鍵區(qū)間。該流程具體包括如下的步驟:
[0092]步驟701,接收條件查詢指令,其中攜帶的查詢條件為O < A < 10 AND I < B
<8AND 2 < C < 9。在該步驟中還包括,將第一主鍵區(qū)間作為基準(zhǔn)主鍵區(qū)間,建立查詢值集合,并設(shè)置查詢值集合的初始狀態(tài)為空。
[0093]步驟702,按預(yù)設(shè)轉(zhuǎn)換規(guī)則對(duì)查詢條件中的條件值進(jìn)行轉(zhuǎn)換,分別查詢索引表A、索引表B、索引表C,并分別獲取符合轉(zhuǎn)換后的查詢條件的索引值對(duì)應(yīng)的實(shí)體表主鍵。具體的,分別將0、1、2、8、9、10的二進(jìn)制碼按預(yù)設(shè)轉(zhuǎn)換規(guī)則進(jìn)行轉(zhuǎn)換,并用經(jīng)過(guò)條件值轉(zhuǎn)換后的查詢條件分別在索引表A、索引表B、索引表C查詢相應(yīng)的索引值,以獲取對(duì)應(yīng)的實(shí)體表主鍵。[0094]步驟703,分別由索引表A、索引表B、索引表C查詢到的實(shí)體表主鍵中在基準(zhǔn)主鍵區(qū)間內(nèi)的實(shí)體表主鍵,建立主鍵集合A、主鍵集合B、主鍵集合C。由索引表A中查詢到的索引值對(duì)應(yīng)的實(shí)體表主鍵中在基準(zhǔn)主鍵區(qū)間內(nèi)的主鍵建立主鍵集合A,由索引表B中查詢到的索引值對(duì)應(yīng)的實(shí)體表主鍵中在基準(zhǔn)主鍵區(qū)間內(nèi)的主鍵建立主鍵集合B,由索引表C中查詢到的索引值對(duì)應(yīng)的實(shí)體表主鍵中在基準(zhǔn)主鍵區(qū)間內(nèi)的主鍵建立主鍵集合C。
[0095]步驟704,獲取主鍵集合A、主鍵集合B、主鍵集合C的交集的主鍵集合S中的實(shí)體表主鍵。
[0096]具體的,可以采用如圖中所示的二叉查詢樹(shù)的方法獲取各主鍵集合的交集。首先,可以基于主鍵集合A中的實(shí)體表主鍵建立二叉查詢樹(shù),在二叉查詢樹(shù)的每個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)值為主鍵集合A中的實(shí)體表主鍵,節(jié)點(diǎn)還記錄與該實(shí)體表主鍵對(duì)應(yīng)的計(jì)數(shù)值,該計(jì)數(shù)值用于記錄該實(shí)體表主鍵在各主鍵集合中的出現(xiàn)次數(shù),該計(jì)數(shù)值的初始值可以設(shè)為I。然后,在該二叉查詢樹(shù)中,查詢主鍵集合B中的各實(shí)體表主鍵,如果查詢到某實(shí)體表主鍵,則將該實(shí)體表主鍵對(duì)應(yīng)的節(jié)點(diǎn)的計(jì)數(shù)值加I。再后,在二叉查詢樹(shù)中,查詢主鍵集合C中的各實(shí)體表主鍵,如果查詢到某實(shí)體表主鍵,則將該實(shí)體表主鍵對(duì)應(yīng)的節(jié)點(diǎn)的計(jì)數(shù)值加I。最后,獲取二叉查詢樹(shù)中計(jì)數(shù)值為3的節(jié)點(diǎn)對(duì)應(yīng)的實(shí)體表主鍵,此獲取的實(shí)體表主鍵即為主鍵集合S中的實(shí)體表主鍵。假設(shè)獲取到的計(jì)數(shù)值為3的主鍵是3和7。
[0097]步驟705,根據(jù)獲取到的實(shí)體表主鍵,在實(shí)體表中獲取對(duì)應(yīng)的查詢值。假設(shè)主鍵3對(duì)應(yīng)查詢值為a,主鍵7對(duì)應(yīng)的查詢值為C。
[0098]步驟706,判斷獲取到的查詢值是否滿足O < A < 10 AND I < B < 8 AND 2 < C
<9的查詢條件,將不滿足該查詢條件的查詢值刪除。圖中假設(shè)實(shí)體表主鍵3對(duì)應(yīng)的查詢值a不滿足該查詢條件。
[0099]步驟707,將沒(méi)有被刪除的查詢值并入到查詢值集合中,并判斷查詢值集合中的查詢值的數(shù)目是否達(dá)到預(yù)設(shè)數(shù)目閾值,如果是,則執(zhí)行步驟709,否則,執(zhí)行步驟708。
[0100]步驟708,判斷基準(zhǔn)主鍵區(qū)間是否為最后一個(gè)主鍵區(qū)間,如果是,則執(zhí)行步驟709,否則,將當(dāng)前基準(zhǔn)主鍵區(qū)間的下一個(gè)主鍵區(qū)間作為新的基準(zhǔn)主鍵區(qū)間,并轉(zhuǎn)至步驟703。在否的情況下,還可以刪除當(dāng)前的主鍵集合A、主鍵集合B、主鍵集合C。
[0101]步驟709,將查詢值集合中的查詢值作為查詢結(jié)果進(jìn)行輸出。執(zhí)行完此步驟后結(jié)束流程。
[0102]本申請(qǐng)的實(shí)施例中,預(yù)先建立實(shí)體表中預(yù)設(shè)的字段對(duì)應(yīng)的索引表,所述索引表中記錄有實(shí)體表中各元組在所述預(yù)設(shè)的字段中的二進(jìn)制存儲(chǔ)值按照預(yù)設(shè)轉(zhuǎn)換規(guī)則轉(zhuǎn)換得到的索引值,以及對(duì)應(yīng)的實(shí)體表主鍵,所述索引表中的各元組按照記錄的索引值的字典順序排列,所述預(yù)設(shè)轉(zhuǎn)換規(guī)則為所述索引值的字典順序和所述二進(jìn)制存儲(chǔ)值對(duì)應(yīng)的實(shí)際值的大小順序一致;接收條件查詢指令,所述條件查詢指令中攜帶有至少一個(gè)查詢條件以及每個(gè)查詢條件的目標(biāo)查詢字段;根據(jù)所述預(yù)設(shè)轉(zhuǎn)換規(guī)則,對(duì)各查詢條件中的條件值進(jìn)行轉(zhuǎn)換;根據(jù)各查詢條件的目標(biāo)查詢字段對(duì)應(yīng)的各索引表中索引值的排列順序,查詢所述各索引表中符合經(jīng)過(guò)條件值轉(zhuǎn)換后的查詢條件的索引值,確定在所述各索引表中對(duì)應(yīng)的索引值都符合相應(yīng)的查詢條件的實(shí)體表主鍵,并根據(jù)確定出的實(shí)體表主鍵,在所述實(shí)體表中獲取對(duì)應(yīng)的查詢值。從而,可以提高非關(guān)系型數(shù)據(jù)庫(kù)進(jìn)行條件查詢的效率。
[0103]實(shí)施例三[0104]基于相同的技術(shù)構(gòu)思,本申請(qǐng)還提供了一種非關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)查詢裝置,如圖8所示,包括:
[0105]建立模塊810,用于預(yù)先建立實(shí)體表中預(yù)設(shè)的字段對(duì)應(yīng)的索引表,所述索引表中記錄有實(shí)體表中各元組在所述預(yù)設(shè)的字段中的二進(jìn)制存儲(chǔ)值按照預(yù)設(shè)轉(zhuǎn)換規(guī)則轉(zhuǎn)換得到的索引值,以及對(duì)應(yīng)的實(shí)體表主鍵,所述索引表中的各元組按照記錄的索引值的字典順序排列,所述預(yù)設(shè)轉(zhuǎn)換規(guī)則為所述索引值的字典順序和所述二進(jìn)制存儲(chǔ)值對(duì)應(yīng)的實(shí)際值的大小
順序一致;
[0106]接收模塊820,用于接收條件查詢指令,所述條件查詢指令中攜帶有至少一個(gè)查詢條件以及每個(gè)查詢條件的目標(biāo)查詢字段;
[0107]轉(zhuǎn)換模塊830,用于根據(jù)所述預(yù)設(shè)轉(zhuǎn)換規(guī)則,對(duì)各查詢條件中的條件值進(jìn)行轉(zhuǎn)換;
[0108]查詢模塊840,用于根據(jù)各查詢條件的目標(biāo)查詢字段對(duì)應(yīng)的各索引表中索引值的排列順序,查詢所述各索引表中符合經(jīng)過(guò)條件值轉(zhuǎn)換后的查詢條件的索引值,確定在所述各索引表中對(duì)應(yīng)的索引值都符合相應(yīng)的查詢條件的實(shí)體表主鍵,并根據(jù)確定出的實(shí)體表主鍵,在所述實(shí)體表中獲取對(duì)應(yīng)的查詢值。
[0109]優(yōu)選的,所述預(yù)設(shè)轉(zhuǎn)換規(guī)則,具體為:
[0110]當(dāng)所述字段的數(shù)據(jù)類型為整型時(shí),對(duì)符號(hào)位進(jìn)行取反;
[0111]當(dāng)所述字段的數(shù)據(jù)類型為浮點(diǎn)型時(shí),對(duì)正數(shù)的符號(hào)位進(jìn)行取反,對(duì)負(fù)數(shù)的所有位進(jìn)行取反。
[0112]優(yōu)選的,當(dāng)所述條件查詢指令中攜帶有一個(gè)查詢條件時(shí),所述查詢模塊840,具體用于:
[0113]根據(jù)經(jīng)過(guò)條件值轉(zhuǎn)換后的查詢條件,以及該查詢條件的目標(biāo)查詢字段對(duì)應(yīng)的索引表中的各索引值的排列順序,對(duì)該索引表中的索引值進(jìn)行查詢,確定符合所述經(jīng)過(guò)條件值轉(zhuǎn)換后的查詢條件的索引值;
[0114]獲取查詢到的索引值對(duì)應(yīng)的實(shí)體表主鍵;
[0115]根據(jù)獲取到的實(shí)體表主鍵,在所述實(shí)體表中獲取對(duì)應(yīng)的查詢值。
[0116]優(yōu)選的,當(dāng)所述條件查詢指令中攜帶有多個(gè)查詢條件時(shí),所述查詢模塊840,具體用于:
[0117]步驟A,根據(jù)經(jīng)過(guò)條件值轉(zhuǎn)換后的各查詢條件,以及各查詢條件的目標(biāo)查詢字段對(duì)應(yīng)的各索引表中索引值的排列順序,分別對(duì)所述各索引表中的索引值進(jìn)行查詢,確定所述各索引表中符合相應(yīng)的查詢條件的索引值;
[0118]步驟B,分別在所述各索引表中獲取查詢到的索引值對(duì)應(yīng)的實(shí)體表主鍵,建立與所述各索引表對(duì)應(yīng)的主鍵集合;
[0119]步驟C,根據(jù)所述多個(gè)查詢條件之間的關(guān)系,對(duì)獲取到的各主鍵集合進(jìn)行相應(yīng)的集合運(yùn)算,獲取經(jīng)過(guò)集合運(yùn)算后得到的主鍵集合中包含的實(shí)體表主鍵;
[0120]步驟D,根據(jù)獲取到的實(shí)體表主鍵,在所述實(shí)體表中獲取對(duì)應(yīng)的查詢值。
[0121]優(yōu)選的,所述查詢模塊840,具體用于:
[0122]預(yù)先將實(shí)體表主鍵按照順序劃分為多個(gè)主鍵區(qū)間;
[0123]步驟A還包括:將在所述各索引表中查詢到的索引值按照其對(duì)應(yīng)的實(shí)體表主鍵的順序進(jìn)行排序;將第一主鍵區(qū)間作為基準(zhǔn)主鍵區(qū)間;建立查詢值集合,所述查詢值集合的初始狀態(tài)為空;
[0124]步驟B具體為:分別在所述各索引表中獲取查詢到的索引值對(duì)應(yīng)的實(shí)體表主鍵中在所述基準(zhǔn)主鍵區(qū)間內(nèi)的實(shí)體表主鍵,建立與所述各索引表對(duì)應(yīng)的主鍵集合;
[0125]步驟D還包括:將獲取到的查詢值并入到所述查詢值集合中;判斷所述查詢值集合中包含的查詢值的數(shù)目是否達(dá)到預(yù)設(shè)數(shù)目閾值;如果是,則將所述查詢值集合中的查詢值作為查詢結(jié)果;否則,如果所述基準(zhǔn)主鍵區(qū)間為最后一個(gè)主鍵區(qū)間,則將所述查詢值集合中的查詢值作為查詢結(jié)果,如果所述基準(zhǔn)主鍵區(qū)間不是最后一個(gè)主鍵區(qū)間,則將所述基準(zhǔn)主鍵區(qū)間的下一個(gè)主鍵區(qū)間作為基準(zhǔn)主鍵區(qū)間,并轉(zhuǎn)至步驟B。
[0126]優(yōu)選的,所述查詢模塊840,還用于:在將獲取到的查詢值并入到查詢值集合中之前,判斷獲取到的查詢值是否滿足所述條件查詢指令中攜帶的所有查詢條件,刪除不滿足所有查詢條件的查詢值。
[0127]優(yōu)選的,還包括聯(lián)合查詢模塊,用于:
[0128]預(yù)先建立實(shí)體表中預(yù)設(shè)的多個(gè)字段對(duì)應(yīng)的聯(lián)合索引表,將實(shí)體表中各元組在所述預(yù)設(shè)的多個(gè)字段中的二進(jìn)制存儲(chǔ)值按照預(yù)設(shè)轉(zhuǎn)換規(guī)則轉(zhuǎn)換得到相應(yīng)的索引值,將元組對(duì)應(yīng)的各索引值按預(yù)設(shè)字段順序連接得到聯(lián)合索引值,在所述聯(lián)合索引表中記錄所述聯(lián)合索引值以及對(duì)應(yīng)的實(shí)體表主鍵,所述聯(lián)合索引表中的各元組按照記錄的聯(lián)合索引值的字典順序排列;
[0129]當(dāng)所述條件查詢指令中攜帶有多個(gè)查詢條件,所述多個(gè)查詢條件中沒(méi)有范圍查詢條件,所述多個(gè)查詢條件之間是和的關(guān)系,且所述多個(gè)查詢條件的目標(biāo)查詢字段與所述預(yù)設(shè)的多個(gè)字段相同時(shí),根據(jù)預(yù)設(shè)轉(zhuǎn)換規(guī)則,對(duì)各查詢條件中的條件值進(jìn)行轉(zhuǎn)換,并根據(jù)各查詢條件與目標(biāo)查詢字段的對(duì)應(yīng)關(guān)系,將轉(zhuǎn)換后的各條件值按所述預(yù)設(shè)字段順序連接得到聯(lián)合條件值;
[0130]在所述聯(lián)合索引表中,查詢與所述聯(lián)合條件值相等的聯(lián)合索引值,并確定查詢到的聯(lián)合索引值對(duì)應(yīng)的實(shí)體表主鍵;
[0131]根據(jù)確定出的實(shí)體表主鍵,在所述實(shí)體表中獲取對(duì)應(yīng)的查詢值。
[0132]優(yōu)選的,還包括聯(lián)合查詢模塊,用于:
[0133]預(yù)先建立實(shí)體表中預(yù)設(shè)的多個(gè)字段對(duì)應(yīng)的聯(lián)合索引表,將實(shí)體表中各元組在所述預(yù)設(shè)的多個(gè)字段中的二進(jìn)制存儲(chǔ)值按照預(yù)設(shè)轉(zhuǎn)換規(guī)則轉(zhuǎn)換得到相應(yīng)的索引值,將元組對(duì)應(yīng)的各索引值按預(yù)設(shè)字段順序連接得到聯(lián)合索引值,在所述聯(lián)合索引表中記錄所述聯(lián)合索引值以及對(duì)應(yīng)的實(shí)體表主鍵,所述聯(lián)合索引表中的各元組按照記錄的聯(lián)合索引值的字典順序排列;
[0134]當(dāng)所述條件查詢指令中攜帶有多個(gè)查詢條件,所述多個(gè)查詢條件中包括一個(gè)范圍查詢條件,所述多個(gè)查詢條件之間是和的關(guān)系,所述多個(gè)查詢條件分別對(duì)應(yīng)不同的目標(biāo)查詢字段,所述多個(gè)查詢條件的目標(biāo)查詢字段與所述預(yù)設(shè)的多個(gè)字段相同,且所述范圍查詢條件的目標(biāo)查詢字段為所述預(yù)設(shè)字段順序中的排在最后的字段時(shí),根據(jù)所述預(yù)設(shè)轉(zhuǎn)換規(guī)貝U,對(duì)各查詢條件中的條件值進(jìn)行轉(zhuǎn)換;
[0135]如果所述范圍查詢條件的范圍為第一條件值和第二條件值之間的范圍,則根據(jù)各查詢條件與目標(biāo)查詢字段的對(duì)應(yīng)關(guān)系,將轉(zhuǎn)換后的第一條件值與轉(zhuǎn)換后的其它非范圍查詢條件的條件值按所述預(yù)設(shè)字段順序連接得到第一聯(lián)合條件值,將轉(zhuǎn)換后的第二條件值與轉(zhuǎn)換后的其它非范圍查詢條件的條件值按所述預(yù)設(shè)字段順序連接得到第二聯(lián)合條件值;或者,
[0136]如果所述范圍查詢條件的范圍為小于第三條件值的范圍,則根據(jù)各查詢條件與目標(biāo)查詢字段的對(duì)應(yīng)關(guān)系,將轉(zhuǎn)換后的第三條件值與轉(zhuǎn)換后的其它非范圍查詢條件的條件值按所述預(yù)設(shè)字段順序連接得到第一聯(lián)合條件值,將轉(zhuǎn)換后的其它非范圍查詢條件的條件值按預(yù)設(shè)字段順序連接,并在最后補(bǔ)充與轉(zhuǎn)換后的第三條件值位數(shù)相同的O得到第二聯(lián)合條件值;或者,
[0137]如果所述范圍查詢條件的范圍為大于第四條件值的范圍,則根據(jù)各查詢條件與目標(biāo)查詢字段的對(duì)應(yīng)關(guān)系,將轉(zhuǎn)換后的第四條件值與轉(zhuǎn)換后的其它非范圍查詢條件的條件值按所述預(yù)設(shè)字段順序連接得到第一聯(lián)合條件值,將轉(zhuǎn)換后的其它非范圍查詢條件的條件值按預(yù)設(shè)字段順序連接,并在最后補(bǔ)充與轉(zhuǎn)換后的第四條件值位數(shù)相同的I得到第二聯(lián)合條件值;
[0138]在所述聯(lián)合索引表中,根據(jù)聯(lián)合索引值的排列順序,查詢所述第一聯(lián)合條件值和所述第二聯(lián)合條件值之間范圍內(nèi)的聯(lián)合索引值,并確定查詢到的聯(lián)合索引值對(duì)應(yīng)的實(shí)體表主鍵;
[0139]根據(jù)確定出的實(shí)體表主鍵,在所述實(shí)體表中獲取對(duì)應(yīng)的查詢值。
[0140]優(yōu)選的,還包括刪除模塊,用于:
[0141]當(dāng)接收到攜帶有所述實(shí)體表的標(biāo)識(shí)的刪除指令,且所述刪除指令的目標(biāo)刪除字段對(duì)應(yīng)建立有索引表時(shí),根據(jù)所述刪除指令中攜帶的實(shí)體表主鍵,獲取實(shí)體表中對(duì)應(yīng)的元組在所述目標(biāo)刪除字段的二進(jìn)制存儲(chǔ)值;
[0142]根據(jù)所述預(yù)設(shè)轉(zhuǎn)換規(guī)則,將該二進(jìn)制存儲(chǔ)值轉(zhuǎn)換為索引值;
[0143]根據(jù)該索引值,在所述刪除指令的目標(biāo)刪除字段對(duì)應(yīng)的索引表中,查找到對(duì)應(yīng)的元組,并刪除該元組;
[0144]根據(jù)所述刪除指令,對(duì)所述實(shí)體表進(jìn)行刪除操作。
[0145]優(yōu)選的,還包括放入模塊,用于當(dāng)接收到攜帶有所述實(shí)體表的標(biāo)識(shí)的放入指令,且所述放入指令的目標(biāo)放入字段對(duì)應(yīng)建立有索引表時(shí),進(jìn)行如下操作:
[0146]步驟H,根據(jù)所述放入指令中攜帶的實(shí)體表主鍵,獲取實(shí)體表中對(duì)應(yīng)的元組在所述目標(biāo)放入字段的二進(jìn)制存儲(chǔ)值;
[0147]步驟I,根據(jù)所述預(yù)設(shè)轉(zhuǎn)換規(guī)則,將該二進(jìn)制存儲(chǔ)值轉(zhuǎn)換為索引值;
[0148]步驟J,根據(jù)該索引值,在所述放入指令的目標(biāo)放入字段對(duì)應(yīng)的索引表中,查找到對(duì)應(yīng)的元組,并刪除該元組;
[0149]步驟K,根據(jù)所述預(yù)設(shè)轉(zhuǎn)換規(guī)則,將所述放入指令中的放入值轉(zhuǎn)換為相應(yīng)的索引值,并根據(jù)該索引值和所述實(shí)體表主鍵建立索引表元組,再根據(jù)索引值的字典順序?qū)⒃撛M插入到索引表中;
[0150]步驟L,根據(jù)所述放入指令對(duì)所述實(shí)體表進(jìn)行相應(yīng)的放入操作。
[0151]優(yōu)選的,所述放入模塊,具體用于:
[0152]步驟H還包括:獲取所述放入指令中攜帶的實(shí)體表主鍵對(duì)應(yīng)的元組的版本值;
[0153]步驟K還包括:判斷所述放入指令中攜帶的實(shí)體表主鍵對(duì)應(yīng)的元組的當(dāng)前版本值與步驟H中獲取的版本值是否相同,如果相同,則執(zhí)行步驟L,否則,轉(zhuǎn)至步驟H。[0154]本申請(qǐng)的實(shí)施例中,預(yù)先建立實(shí)體表中預(yù)設(shè)的字段對(duì)應(yīng)的索引表,所述索引表中記錄有實(shí)體表中各元組在所述預(yù)設(shè)的字段中的二進(jìn)制存儲(chǔ)值按照預(yù)設(shè)轉(zhuǎn)換規(guī)則轉(zhuǎn)換得到的索引值,以及對(duì)應(yīng)的實(shí)體表主鍵,所述索引表中的各元組按照記錄的索引值的字典順序排列,所述預(yù)設(shè)轉(zhuǎn)換規(guī)則為所述索引值的字典順序和所述二進(jìn)制存儲(chǔ)值對(duì)應(yīng)的實(shí)際值的大小順序一致;接收條件查詢指令,所述條件查詢指令中攜帶有至少一個(gè)查詢條件以及每個(gè)查詢條件的目標(biāo)查詢字段;根據(jù)所述預(yù)設(shè)轉(zhuǎn)換規(guī)則,對(duì)各查詢條件中的條件值進(jìn)行轉(zhuǎn)換;根據(jù)各查詢條件的目標(biāo)查詢字段對(duì)應(yīng)的各索引表中索引值的排列順序,查詢所述各索引表中符合經(jīng)過(guò)條件值轉(zhuǎn)換后的查詢條件的索引值,確定在所述各索引表中對(duì)應(yīng)的索引值都符合相應(yīng)的查詢條件的實(shí)體表主鍵,并根據(jù)確定出的實(shí)體表主鍵,在所述實(shí)體表中獲取對(duì)應(yīng)的查詢值。從而,可以提高非關(guān)系型數(shù)據(jù)庫(kù)進(jìn)行條件查詢的效率。
[0155]本領(lǐng)域技術(shù)人員可以理解實(shí)施例中的裝置中的模塊可以按照實(shí)施例描述進(jìn)行分布于實(shí)施例的裝置中,也可以進(jìn)行相應(yīng)變化位于不同于本實(shí)施例的一個(gè)或多個(gè)裝置中。上述實(shí)施例的模塊可以合并為一個(gè)模塊,也可以進(jìn)一步拆分成多個(gè)子模塊。
[0156]上述本申請(qǐng)實(shí)施例序號(hào)僅僅為了描述,不代表實(shí)施例的優(yōu)劣。
[0157]通過(guò)以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到本申請(qǐng)可借助軟件加必需的通用硬件平臺(tái)的方式來(lái)實(shí)現(xiàn),當(dāng)然也可以通過(guò)硬件,但很多情況下前者是更佳的實(shí)施方式。基于這樣的理解,本申請(qǐng)的技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)終端設(shè)備(可以是手機(jī),個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本申請(qǐng)各個(gè)實(shí)施例所述的方法。
[0158]以上所述僅是本申請(qǐng)的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本【技術(shù)領(lǐng)域】的普通技術(shù)人員來(lái)說(shuō),在不脫離本申請(qǐng)?jiān)淼那疤嵯?,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視本申請(qǐng)的保護(hù)范圍。
【權(quán)利要求】
1.一種非關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)查詢方法,其特征在于,預(yù)先建立實(shí)體表中預(yù)設(shè)的字段對(duì)應(yīng)的索引表,所述索引表中記錄有實(shí)體表中各元組在所述預(yù)設(shè)的字段中的二進(jìn)制存儲(chǔ)值按照預(yù)設(shè)轉(zhuǎn)換規(guī)則轉(zhuǎn)換得到的索引值,以及對(duì)應(yīng)的實(shí)體表主鍵,所述索引表中的各元組按照記錄的索引值的字典順序排列,所述預(yù)設(shè)轉(zhuǎn)換規(guī)則為所述索引值的字典順序和所述二進(jìn)制存儲(chǔ)值對(duì)應(yīng)的實(shí)際值的大小順序一致,該方法包括: 接收條件查詢指令,所述條件查詢指令中攜帶有至少一個(gè)查詢條件以及每個(gè)查詢條件的目標(biāo)查詢字段; 根據(jù)所述預(yù)設(shè)轉(zhuǎn)換規(guī)則,對(duì)各查詢條件中的條件值進(jìn)行轉(zhuǎn)換; 根據(jù)各查詢條件的目標(biāo)查詢字段對(duì)應(yīng)的各索引表中索引值的排列順序,查詢所述各索引表中符合經(jīng)過(guò)條件值轉(zhuǎn)換后的查詢條件的索引值,確定在所述各索引表中對(duì)應(yīng)的索引值都符合相應(yīng)的查詢條件的實(shí)體表主鍵,并根據(jù)確定出的實(shí)體表主鍵,在所述實(shí)體表中獲取對(duì)應(yīng)的查詢值。
2.如權(quán)利要求1所述的方法,其特征在于,所述預(yù)設(shè)轉(zhuǎn)換規(guī)則,具體為: 當(dāng)所述字段的數(shù)據(jù)類型為整型時(shí),對(duì)符號(hào)位進(jìn)行取反; 當(dāng)所述字段的數(shù)據(jù)類型為浮點(diǎn)型時(shí),對(duì)正數(shù)的符號(hào)位進(jìn)行取反,對(duì)負(fù)數(shù)的所有位進(jìn)行取反。
3.如權(quán)利要求1所述的方法,其特征在于,當(dāng)所述條件查詢指令中攜帶有一個(gè)查詢條件時(shí),所述根據(jù)各查詢條件的目標(biāo)查詢字段對(duì)應(yīng)的各索引表中索引值的排列順序,查詢所述各索引表中符合經(jīng)過(guò)條件值轉(zhuǎn)換后的查詢條件的索引值,確定在所述各索引表中對(duì)應(yīng)的索引值都符合相應(yīng)的查詢條件的實(shí)體表主鍵,并根據(jù)確定出的實(shí)體表主鍵,在所述實(shí)體表中獲取對(duì)應(yīng)的查詢值,具體為: 根據(jù)經(jīng)過(guò)條件值轉(zhuǎn)換后的查詢條件,以及該查詢條件的目標(biāo)查詢字段對(duì)應(yīng)的索引表中的各索引值的排列順序,對(duì)該索引表中的索引值進(jìn)行查詢,確定符合所述經(jīng)過(guò)條件值轉(zhuǎn)換后的查詢條件的索引值; 獲取查詢到的索引值對(duì)應(yīng)的實(shí)體表主鍵; 根據(jù)獲取到的實(shí)體表主鍵,在所述實(shí)體表中獲取對(duì)應(yīng)的查詢值。
4.如權(quán)利要求1所述的方法,其特征在于,當(dāng)所述條件查詢指令中攜帶有多個(gè)查詢條件時(shí),所述根據(jù)各查詢條件的目標(biāo)查詢字段對(duì)應(yīng)的各索引表中索引值的排列順序,查詢所述各索引表中符合經(jīng)過(guò)條件值轉(zhuǎn)換后的查詢條件的索引值,確定在所述各索弓丨表中對(duì)應(yīng)的索引值都符合相應(yīng)的查詢條件的實(shí)體表主鍵,并根據(jù)確定出的實(shí)體表主鍵,在所述實(shí)體表中獲取對(duì)應(yīng)的查詢值,具體為: 步驟A,根據(jù)經(jīng)過(guò)條件值轉(zhuǎn)換后的各查詢條件,以及各查詢條件的目標(biāo)查詢字段對(duì)應(yīng)的各索引表中索引值的排列順序,分別對(duì)所述各索引表中的索引值進(jìn)行查詢,確定所述各索引表中符合相應(yīng)的查詢條件的索引值; 步驟B,分別在所述各索引表中獲取查詢到的索引值對(duì)應(yīng)的實(shí)體表主鍵,建立與所述各索引表對(duì)應(yīng)的主鍵集合; 步驟C,根據(jù)所述多個(gè)查詢條件之間的關(guān)系,對(duì)獲取到的各主鍵集合進(jìn)行相應(yīng)的集合運(yùn)算,獲取經(jīng)過(guò)集合運(yùn)算后得到的主鍵集合中包含的實(shí)體表主鍵; 步驟D,根據(jù)獲取到的實(shí)體表主鍵,在所述實(shí)體表中獲取對(duì)應(yīng)的查詢值。
5.如權(quán)利要求4所述的方法,其特征在于,還包括:預(yù)先將實(shí)體表主鍵按照順序劃分為多個(gè)主鍵區(qū)間; 步驟A還包括:將在所述各索引表中查詢到的索引值按照其對(duì)應(yīng)的實(shí)體表主鍵的順序進(jìn)行排序;將第一主鍵區(qū)間作為基準(zhǔn)主鍵區(qū)間;建立查詢值集合,所述查詢值集合的初始狀態(tài)為空; 步驟B具體為:分別在所述各索引表中獲取查詢到的索引值對(duì)應(yīng)的實(shí)體表主鍵中在所述基準(zhǔn)主鍵區(qū)間內(nèi)的實(shí)體表主鍵,建立與所述各索引表對(duì)應(yīng)的主鍵集合; 步驟D還包括:將獲取到的查詢值并入到所述查詢值集合中;判斷所述查詢值集合中包含的查詢值的數(shù)目是否達(dá)到預(yù)設(shè)數(shù)目閾值;如果是,則將所述查詢值集合中的查詢值作為查詢結(jié)果;否則,如果所述基準(zhǔn)主鍵區(qū)間為最后一個(gè)主鍵區(qū)間,則將所述查詢值集合中的查詢值作為查詢結(jié)果,如果所述基準(zhǔn)主鍵區(qū)間不是最后一個(gè)主鍵區(qū)間,則將所述基準(zhǔn)主鍵區(qū)間的下一個(gè)主鍵區(qū)間作為基準(zhǔn)主鍵區(qū)間,并轉(zhuǎn)至步驟B。
6.如權(quán)利要求5所述的方法,其特征在于,所述將獲取到的查詢值并入到查詢值集合中之前,還包括: 判斷獲取到的查詢值是否滿足所述條件查詢指令中攜帶的所有查詢條件,刪除不滿足所有查詢條件的查詢值。
7.如權(quán)利要求1所述的方法,其特征在于, 還包括:預(yù)先建立實(shí)體表中預(yù)設(shè)的多個(gè)字段對(duì)應(yīng)的聯(lián)合索引表,將實(shí)體表中各元組在所述預(yù)設(shè)的多個(gè)字段中的二進(jìn)制存儲(chǔ)值按照預(yù)設(shè)轉(zhuǎn)換規(guī)則轉(zhuǎn)換得到相應(yīng)的索引值,將元組對(duì)應(yīng)的各索引值按預(yù)設(shè)字段順序連接得到聯(lián)合索引值,在所述聯(lián)合索引表中記錄所述聯(lián)合索引值以及對(duì)應(yīng)的實(shí)體表主鍵,所述聯(lián)合索引表中的各元組按照記錄的聯(lián)合索引值的字典順序排列; 當(dāng)所述條件查詢指令中攜帶有多個(gè)查詢條件,所述多個(gè)查詢條件中沒(méi)有范圍查詢條件,所述多個(gè)查詢條件之間是和的關(guān)系,且所述多個(gè)查詢條件的目標(biāo)查詢字段與所述預(yù)設(shè)的多個(gè)字段相同時(shí),根據(jù)預(yù)設(shè)轉(zhuǎn)換規(guī)則,對(duì)各查詢條件中的條件值進(jìn)行轉(zhuǎn)換,并根據(jù)各查詢條件與目標(biāo)查詢字段的對(duì)應(yīng)關(guān)系,將轉(zhuǎn)換后的各條件值按所述預(yù)設(shè)字段順序連接得到聯(lián)合條件值; 在所述聯(lián)合索引表中,查詢與所述聯(lián)合條件值相等的聯(lián)合索引值,并確定查詢到的聯(lián)合索引值對(duì)應(yīng)的實(shí)體表主鍵; 根據(jù)確定出的實(shí)體表主鍵,在所述實(shí)體表中獲取對(duì)應(yīng)的查詢值。
8.如權(quán)利要求1所述的方法,其特征在于, 還包括:預(yù)先建立實(shí)體表中預(yù)設(shè)的多個(gè)字段對(duì)應(yīng)的聯(lián)合索引表,將實(shí)體表中各元組在所述預(yù)設(shè)的多個(gè)字段中的二進(jìn)制存儲(chǔ)值按照預(yù)設(shè)轉(zhuǎn)換規(guī)則轉(zhuǎn)換得到相應(yīng)的索引值,將元組對(duì)應(yīng)的各索引值按預(yù)設(shè)字段順序連接得到聯(lián)合索引值,在所述聯(lián)合索引表中記錄所述聯(lián)合索引值以及對(duì)應(yīng)的實(shí)體表主鍵,所述聯(lián)合索引表中的各元組按照記錄的聯(lián)合索引值的字典順序排列; 當(dāng)所述條件查詢指令中攜帶有多個(gè)查詢條件,所述多個(gè)查詢條件中包括一個(gè)范圍查詢條件,所述多個(gè)查詢條件之間是和的關(guān)系,所述多個(gè)查詢條件分別對(duì)應(yīng)不同的目標(biāo)查詢字段,所述多個(gè)查詢條件的目標(biāo)查詢字段與所述預(yù)設(shè)的多個(gè)字段相同,且所述范圍查詢條件的目標(biāo)查詢字段為所述預(yù)設(shè)字段順序中的排在最后的字段時(shí),根據(jù)所述預(yù)設(shè)轉(zhuǎn)換規(guī)則,對(duì)各查詢條件中的條件值進(jìn)行轉(zhuǎn)換; 如果所述范圍查詢條件的范圍為第一條件值和第二條件值之間的范圍,則根據(jù)各查詢條件與目標(biāo)查詢字段的對(duì)應(yīng)關(guān)系,將轉(zhuǎn)換后的第一條件值與轉(zhuǎn)換后的其它非范圍查詢條件的條件值按所述預(yù)設(shè)字段順序連接得到第一聯(lián)合條件值,將轉(zhuǎn)換后的第二條件值與轉(zhuǎn)換后的其它非范圍查詢條件的條件值按所述預(yù)設(shè)字段順序連接得到第二聯(lián)合條件值;或者,如果所述范圍查詢條件的范圍為小于第三條件值的范圍,則根據(jù)各查詢條件與目標(biāo)查詢字段的對(duì)應(yīng)關(guān)系,將轉(zhuǎn)換后的第三條件值與轉(zhuǎn)換后的其它非范圍查詢條件的條件值按所述預(yù)設(shè)字段順序連接得到第一聯(lián)合條件值,將轉(zhuǎn)換后的其它非范圍查詢條件的條件值按預(yù)設(shè)字段順序連接,并在最后補(bǔ)充與轉(zhuǎn)換后的第三條件值位數(shù)相同的O得到第二聯(lián)合條件值;或者, 如果所述范圍查詢條件的范圍為大于第四條件值的范圍,則根據(jù)各查詢條件與目標(biāo)查詢字段的對(duì)應(yīng)關(guān)系,將轉(zhuǎn)換后的第四條件值與轉(zhuǎn)換后的其它非范圍查詢條件的條件值按所述預(yù)設(shè)字段順序連接得到第一聯(lián)合條件值,將轉(zhuǎn)換后的其它非范圍查詢條件的條件值按預(yù)設(shè)字段順序連接,并在最后補(bǔ)充與轉(zhuǎn)換后的第四條件值位數(shù)相同的I得到第二聯(lián)合條件值; 在所述聯(lián)合索引表中,根據(jù)聯(lián)合索引值的排列順序,查詢所述第一聯(lián)合條件值和所述第二聯(lián)合條件值之間范圍內(nèi)的聯(lián)合索引值,并確定查詢到的聯(lián)合索引值對(duì)應(yīng)的實(shí)體表主鍵; 根據(jù)確定出的實(shí)體表主鍵,在所述實(shí)體表中獲取對(duì)應(yīng)的查詢值。
9.如權(quán)利要求1所述的方法,其特征在于,當(dāng)接收到攜帶有所述實(shí)體表的標(biāo)識(shí)的刪除指令,且所述刪除指令的目標(biāo)刪除字段對(duì)應(yīng)建立有索引表時(shí),還包括: 根據(jù)所述刪除指令中攜帶的實(shí)體表主鍵,獲取實(shí)體表中對(duì)應(yīng)的元組在所述目標(biāo)刪除字段的二進(jìn)制存儲(chǔ)值; 根據(jù)所述預(yù)設(shè)轉(zhuǎn)換規(guī)則,將該二進(jìn)制存儲(chǔ)值轉(zhuǎn)換為索引值; 根據(jù)該索引值,在所述刪除指令的目標(biāo)刪除字段對(duì)應(yīng)的索引表中,查找到對(duì)應(yīng)的元組,并刪除該元組; 根據(jù)所述刪除指令,對(duì)所述實(shí)體表進(jìn)行刪除操作。
10.如權(quán)利要求1所述的方法,其特征在于,當(dāng)接收到攜帶有所述實(shí)體表的標(biāo)識(shí)的放入指令,且所述放入指令的目標(biāo)放入字段對(duì)應(yīng)建立有索引表時(shí),還包括: 步驟H,根據(jù)所述放入指令中攜帶的實(shí)體表主鍵,獲取實(shí)體表中對(duì)應(yīng)的元組在所述目標(biāo)放入字段的二進(jìn)制存儲(chǔ)值; 步驟I,根據(jù)所述預(yù)設(shè)轉(zhuǎn)換規(guī)則,將該二進(jìn)制存儲(chǔ)值轉(zhuǎn)換為索引值; 步驟J,根據(jù)該索引值,在所述放入指令的目標(biāo)放入字段對(duì)應(yīng)的索引表中,查找到對(duì)應(yīng)的元組,并刪除該元組; 步驟K,根據(jù)所述預(yù)設(shè)轉(zhuǎn)換規(guī)則,將所述放入指令中的放入值轉(zhuǎn)換為相應(yīng)的索引值,并根據(jù)該索引值和所述實(shí)體表主鍵建立索引表元組,再根據(jù)索引值的字典順序?qū)⒃撛M插入到索引表中; 步驟L,根據(jù)所述放入指令對(duì)所述實(shí)體表進(jìn)行相應(yīng)的放入操作。
11.如權(quán)利要求10所述的方法,其特征在于, 步驟H還包括:獲取所述放入指令中攜帶的實(shí)體表主鍵對(duì)應(yīng)的元組的版本值; 步驟K還包括:判斷所述放入指令中攜帶的實(shí)體表主鍵對(duì)應(yīng)的元組的當(dāng)前版本值與步驟H中獲取的版本值是否相同,如果相同,則執(zhí)行步驟L,否則,轉(zhuǎn)至步驟H。
12.—種非關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)查詢裝置,其特征在于,包括: 建立模塊,用于預(yù)先建立實(shí)體表中預(yù)設(shè)的字段對(duì)應(yīng)的索引表,所述索引表中記錄有實(shí)體表中各元組在所述預(yù)設(shè)的字段中的二進(jìn)制存儲(chǔ)值按照預(yù)設(shè)轉(zhuǎn)換規(guī)則轉(zhuǎn)換得到的索引值,以及對(duì)應(yīng)的實(shí)體表主鍵,所述索引表中的各元組按照記錄的索引值的字典順序排列,所述預(yù)設(shè)轉(zhuǎn)換規(guī)則為所述索引值的字典順序和所述二進(jìn)制存儲(chǔ)值對(duì)應(yīng)的實(shí)際值的大小順序一致; 接收模塊,用于接收條件查詢指令,所述條件查詢指令中攜帶有至少一個(gè)查詢條件以及每個(gè)查詢條件的目標(biāo)查詢字段; 轉(zhuǎn)換模塊,用于根據(jù)所述預(yù)設(shè)轉(zhuǎn)換規(guī)則,對(duì)各查詢條件中的條件值進(jìn)行轉(zhuǎn)換; 查詢模塊,用于根據(jù)各查詢條件的目標(biāo)查詢字段對(duì)應(yīng)的各索引表中索引值的排列順序,查詢所述各索引表中符合經(jīng)過(guò)條件值轉(zhuǎn)換后的查詢條件的索引值,確定在所述各索引表中對(duì)應(yīng)的索引值都符合相應(yīng)的查詢條件的實(shí)體表主鍵,并根據(jù)確定出的實(shí)體表主鍵,在所述實(shí)體表中獲取對(duì)應(yīng)的查詢 值。
【文檔編號(hào)】G06F17/30GK103514201SQ201210214550
【公開(kāi)日】2014年1月15日 申請(qǐng)日期:2012年6月27日 優(yōu)先權(quán)日:2012年6月27日
【發(fā)明者】毛世杰, 張俊 申請(qǐng)人:阿里巴巴集團(tuán)控股有限公司