一種索引數(shù)據(jù)壓縮以及索引數(shù)據(jù)搜索的方法和設(shè)備的制造方法
【技術(shù)領(lǐng)域】
[0001] 本申請(qǐng)涉及數(shù)據(jù)信息處理領(lǐng)域,尤其涉及一種索引數(shù)據(jù)壓縮以及索引數(shù)據(jù)搜索的 方法和設(shè)備。
【背景技術(shù)】
[0002] 隨著互聯(lián)網(wǎng)技術(shù)和計(jì)算機(jī)技術(shù)的不斷發(fā)展,一個(gè)數(shù)據(jù)文件中包含的信息量越來(lái)越 大,導(dǎo)致存儲(chǔ)在數(shù)據(jù)庫(kù)中占用的存儲(chǔ)容量也隨之增加。
[0003] 為了方便對(duì)一個(gè)數(shù)據(jù)文件中數(shù)據(jù)信息的查找,每一個(gè)數(shù)據(jù)文件中存放的數(shù)據(jù)將按 照一種設(shè)定的存放順序存儲(chǔ)。此外,當(dāng)數(shù)據(jù)文件中的數(shù)據(jù)量達(dá)到ITB時(shí),通常將數(shù)據(jù)文件中 的數(shù)據(jù)劃分成大小相同的數(shù)據(jù)塊,并為劃分得到的每一個(gè)數(shù)據(jù)塊確定一個(gè)主鍵索引(例如, 每一個(gè)數(shù)據(jù)塊的最后一行數(shù)據(jù)信息作為該數(shù)據(jù)塊的索引信息),最后將確定的每一個(gè)數(shù)據(jù) 塊的主鍵索引組合得到針對(duì)該數(shù)據(jù)文件的索引信息表。
[0004] 在對(duì)該數(shù)據(jù)文件的數(shù)據(jù)信息進(jìn)行查找時(shí),首先,通過(guò)該索引信息表查找到該數(shù)據(jù) 文件的數(shù)據(jù)塊;其次,按照二分查找的方式找到該數(shù)據(jù)塊中的指定行;最后,在該指定行中 找到需要的數(shù)據(jù)信息。
[0005] 但是,索引信息列表的容量大小是由數(shù)據(jù)文件中的數(shù)據(jù)量和每一個(gè)數(shù)據(jù)塊的數(shù)據(jù) 量決定的。當(dāng)數(shù)據(jù)文件中的數(shù)據(jù)量比較大,每一個(gè)數(shù)據(jù)塊的數(shù)據(jù)量比較小時(shí),導(dǎo)致生成的索 引信息列表的容量也比較大;當(dāng)數(shù)據(jù)文件中的數(shù)據(jù)量比較大,每一個(gè)數(shù)據(jù)塊的數(shù)據(jù)量比較 小時(shí),導(dǎo)致生成的索引信息列表的容量比較小,但是利用索引信息列表查找數(shù)據(jù)信息的速 率將降低。
[0006] 例如:一個(gè)數(shù)據(jù)文件中包含了 ITB的數(shù)據(jù)量,假設(shè)劃分的每一個(gè)數(shù)據(jù)塊的大小為 1GB,這樣將得到IO3個(gè)數(shù)據(jù)塊,即生成的索引信息列表中包含了 IO3個(gè)主鍵索引,其中,每一 個(gè)主鍵索引中包含了多個(gè)列數(shù)據(jù)信息。
[0007] 在查找數(shù)據(jù)信息時(shí),首先,需要在IO3個(gè)主鍵索引中確定需要的主鍵索引;其次,根 據(jù)確定的主鍵索引,找到對(duì)應(yīng)的數(shù)據(jù)塊;最后在IGB的數(shù)據(jù)塊中查找到需要的數(shù)據(jù)信息。
[0008] 然而,由于索引信息列表的數(shù)據(jù)量比較小,搜索服務(wù)器的內(nèi)存能夠滿足其需求,但 是確定的數(shù)據(jù)塊的容量比較大,使得最后查找數(shù)據(jù)信息的效率低且精度也不高。
[0009] 假設(shè)劃分的每一個(gè)數(shù)據(jù)塊的大小為1MB,這樣將得到IO6個(gè)數(shù)據(jù)塊,即生成的索引 信息列表中包含了 IO6個(gè)主鍵索引,其中,每一個(gè)主鍵索引中包含了多個(gè)列數(shù)據(jù)信息。
[0010] 在查找數(shù)據(jù)信息時(shí),首先,需要在IO6個(gè)主鍵索引中確定需要的主鍵索引;其次,根 據(jù)確定的主鍵索引,找到對(duì)應(yīng)的數(shù)據(jù)塊;最后在IMB的數(shù)據(jù)塊中查找到需要的數(shù)據(jù)信息。 [0011] 由于索引信息列表的數(shù)據(jù)量比較大,確定的數(shù)據(jù)塊的容量比較小,使得最后查找 數(shù)據(jù)信息的精度提高,但是查找到數(shù)據(jù)信息的效率不高,并且搜索服務(wù)器的內(nèi)存也無(wú)法滿 足其需求。
【發(fā)明內(nèi)容】
[0012] 本申請(qǐng)?zhí)峁┝艘环N索引數(shù)據(jù)壓縮以及索引數(shù)據(jù)搜索的方法和設(shè)備,用于解決如何 在保證查找數(shù)據(jù)信息效率與精度的前提下降低索引信息列表的數(shù)據(jù)容量的問(wèn)題。
[0013] 一種索引數(shù)據(jù)壓縮的方法,包括:
[0014] 在得到一個(gè)數(shù)據(jù)文件的索引信息列表之后,按照所述索引信息列表中列索引數(shù)據(jù) 的排列順序,依次比較相鄰兩行中同一列的列索引數(shù)據(jù)是否相同;
[0015] 當(dāng)相鄰兩行中同一列的列索引數(shù)據(jù)相同時(shí),對(duì)相同的列索引數(shù)據(jù)進(jìn)行壓縮;當(dāng)所 述相鄰兩行中同一列的列索引數(shù)據(jù)不相同時(shí),記錄所述相鄰兩行中比較結(jié)果不相同的同一 列的列索引數(shù)據(jù)以及對(duì)應(yīng)的位置信息,并壓縮所述相鄰兩行中比較結(jié)果不相同的同一列之 后的其他列的列索引數(shù)據(jù);
[0016] 在對(duì)所述索引信息列表中每一行對(duì)應(yīng)的列索引數(shù)據(jù)壓縮處理執(zhí)行完畢后,根據(jù)壓 縮處理后得到的列索引數(shù)據(jù),生成針對(duì)所述索引信息列表的索引數(shù)組。
[0017] 按照所述索引信息列表中列索引數(shù)據(jù)的排列順序,依次比較相鄰兩行中同一列的 列索引數(shù)據(jù)是否相同,包括:
[0018] 從所述索引信息列表的第一行索引數(shù)據(jù)開(kāi)始,對(duì)相鄰兩行中同一列列索引數(shù)據(jù)執(zhí) 行以下操作,直至所述相鄰兩行中同一列的列索引數(shù)據(jù)不相同時(shí),結(jié)束對(duì)所述相鄰兩行中 同一列的列索引數(shù)據(jù)是否相同進(jìn)行判斷的操作:
[0019] 從相鄰兩行的第一列索引數(shù)據(jù)開(kāi)始,依次比較相鄰兩行中同一列的列索引數(shù)據(jù)是 否相同。
[0020] 所述方法還包括:
[0021] 當(dāng)比較結(jié)果是相鄰兩行中同一列的列索引數(shù)據(jù)相同時(shí),記錄一個(gè)列索引數(shù)據(jù)以及 該列索引數(shù)據(jù)的位置信息,并繼續(xù)執(zhí)行判斷所述相鄰兩行中下一列的列索引數(shù)據(jù)是否相同 的操作,其中,所述列索引數(shù)據(jù)的位置信息包括列標(biāo)號(hào)和行標(biāo)號(hào);
[0022] 當(dāng)比較結(jié)果是相鄰兩行中同一列的列索引數(shù)據(jù)不相同時(shí),記錄比較結(jié)果不相同的 每一列的列索引數(shù)據(jù)以及位置信息,結(jié)束對(duì)所述相鄰兩行中下一列的列索引數(shù)據(jù)是否相同 進(jìn)行判斷的操作。
[0023] 對(duì)相同的列索引數(shù)據(jù)進(jìn)行壓縮,包括:
[0024] 根據(jù)記錄的列索引數(shù)據(jù)的位置信息,判斷列標(biāo)號(hào)相同但行標(biāo)號(hào)相鄰對(duì)應(yīng)的兩個(gè)列 索引數(shù)據(jù)是否相同;
[0025] 在判斷結(jié)果是列標(biāo)號(hào)相同但行標(biāo)號(hào)相鄰對(duì)應(yīng)的兩個(gè)列索引數(shù)據(jù)相同時(shí),記錄所述 列索引數(shù)據(jù)以及所述列索引數(shù)據(jù)的一個(gè)位置信息,其中,所述位置信息中包含了列標(biāo)號(hào)和 行標(biāo)號(hào),所述行標(biāo)號(hào)包含了所述列索引數(shù)據(jù)對(duì)應(yīng)的多個(gè)行標(biāo)號(hào)。
[0026] 壓縮所述相鄰兩行中比較結(jié)果不相同的同一列之后的其他列的列索引數(shù)據(jù),包 括:
[0027] 確定所述相鄰兩行中比較結(jié)果不相同的同一列之后的其他列的列索引數(shù)據(jù)不在 索引信息列表對(duì)應(yīng)的索引數(shù)組中顯示。
[0028] 根據(jù)壓縮處理后得到的列索引數(shù)據(jù),生成針對(duì)所述索引信息列表的索引數(shù)組,包 括:
[0029] 當(dāng)記錄的列索引數(shù)據(jù)的行標(biāo)號(hào)相同、且列標(biāo)號(hào)不相同時(shí),按照列標(biāo)號(hào)的排列順序, 依次建立列索引數(shù)據(jù)之間的父子關(guān)系;
[0030] 以及
[0031] 當(dāng)記錄的多個(gè)列索引數(shù)據(jù)滿足列標(biāo)號(hào)相同、且行標(biāo)號(hào)不相同、但在索引信息列表 中該多個(gè)列索引數(shù)據(jù)分別對(duì)應(yīng)的相鄰前一列的列索引數(shù)據(jù)相同時(shí),建立該多個(gè)列索引數(shù)據(jù) 與記錄的一個(gè)所述相鄰前一列的列索引數(shù)據(jù)之間的父子關(guān)系。
[0032] 在建立記錄的列索引數(shù)據(jù)之間的父子關(guān)系之后,所述方法還包括:
[0033] 針對(duì)記錄得到的列索引數(shù)據(jù),確定該列索引數(shù)據(jù)對(duì)應(yīng)的一級(jí)子節(jié)點(diǎn)的個(gè)數(shù);
[0034] 在確定該列索引數(shù)據(jù)對(duì)應(yīng)的一級(jí)子節(jié)點(diǎn)的個(gè)數(shù)非零時(shí),確定該列索引數(shù)據(jù)的第一 個(gè)子節(jié)點(diǎn)的行標(biāo)號(hào),并建立該列索引數(shù)據(jù)在索引數(shù)組中的標(biāo)識(shí)信息,其中,所述標(biāo)識(shí)信息包 括列索引數(shù)據(jù)的內(nèi)容、列索引數(shù)據(jù)所在列的列標(biāo)號(hào)、一級(jí)子節(jié)點(diǎn)的個(gè)數(shù)以及第一個(gè)子節(jié)點(diǎn) 的行標(biāo)號(hào);
[0035] 在確定該列索引數(shù)據(jù)對(duì)應(yīng)的一級(jí)子節(jié)點(diǎn)的個(gè)數(shù)為零時(shí),建立該列索引數(shù)據(jù)在索引 數(shù)組中的標(biāo)識(shí)信息,其中,所述標(biāo)識(shí)信息包括列索引數(shù)據(jù)的內(nèi)容、列索引數(shù)據(jù)所在列的列標(biāo) 號(hào)、空以及列索引數(shù)據(jù)所在行的行標(biāo)號(hào)。
[0036] -種索引數(shù)據(jù)搜索的方法,包括:
[0037] 接收搜索請(qǐng)求消息,其中,所述搜索請(qǐng)求消息中包含了至少一個(gè)搜索關(guān)鍵詞以及 該搜索關(guān)鍵詞對(duì)應(yīng)的列標(biāo)號(hào);
[0038] 根據(jù)接收到的搜索關(guān)鍵詞對(duì)應(yīng)的列標(biāo)號(hào),依次將搜索關(guān)鍵詞與索引數(shù)組中列標(biāo)號(hào) 相同的列索引數(shù)據(jù)進(jìn)行比較,確定首次出現(xiàn)的列索引數(shù)據(jù)不小于接收到的所述搜索關(guān)鍵詞 的列索引數(shù)據(jù)。
[0039] 根據(jù)接收到的搜索關(guān)鍵詞對(duì)應(yīng)的列標(biāo)號(hào),依次將搜索關(guān)鍵詞與索引數(shù)組中列標(biāo)號(hào) 相同的列索引數(shù)據(jù)進(jìn)行比較,確定首次出現(xiàn)的列索引數(shù)據(jù)不小于接收到的所述搜索關(guān)鍵詞 的列索引數(shù)據(jù),包括:
[0040] 選擇一個(gè)搜索關(guān)鍵詞,并根據(jù)選擇的搜索關(guān)鍵詞對(duì)應(yīng)的列標(biāo)號(hào),從索引數(shù)組中查 找到與選擇的搜索關(guān)鍵詞的列標(biāo)號(hào)相同、且數(shù)據(jù)內(nèi)容不小于所述搜索關(guān)鍵詞的列索引數(shù) 據(jù);
[0041] 當(dāng)查找到的列索引數(shù)據(jù)的數(shù)據(jù)內(nèi)容大于所述搜索關(guān)鍵詞的數(shù)據(jù)內(nèi)容時(shí),進(jìn)一步判 斷查找到的列索引數(shù)據(jù)按照排列順序是否是第一個(gè)大于所述搜索關(guān)鍵詞的列索引數(shù)據(jù),若 是,則確定所述列索引數(shù)據(jù)為待搜索的索引數(shù)據(jù);
[0042] 當(dāng)查找到的列索引數(shù)據(jù)等于所述搜索關(guān)鍵詞時(shí),進(jìn)一步判斷查找到的列索引數(shù)據(jù) 是否存在第一級(jí)子節(jié)點(diǎn),若不存在,則確定所述列索引數(shù)據(jù)為待搜索的索引數(shù)據(jù),若存在, 跳轉(zhuǎn)執(zhí)行判斷所述第一級(jí)節(jié)點(diǎn)的數(shù)據(jù)內(nèi)容是否大于下一個(gè)搜索關(guān)鍵詞的數(shù)據(jù)內(nèi)容。
[0043] 一種索引數(shù)據(jù)壓縮的設(shè)備,包括:
[0044] 比較模塊,用于在得到一個(gè)數(shù)據(jù)文件的索引信息列表之后,按照所述索引信息列 表中列索引數(shù)據(jù)的排列順序,依次比較相鄰兩行中同一列的列索引數(shù)據(jù)是否相同;
[0045] 壓縮模塊,用于當(dāng)相鄰兩行中同一列的列索引數(shù)據(jù)相同時(shí),對(duì)相同的