一種為半結(jié)構(gòu)化數(shù)據(jù)構(gòu)建NoSQL數(shù)據(jù)庫索引的方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本申請涉及計(jì)算機(jī)應(yīng)用技術(shù)領(lǐng)域,特別是涉及一種為半結(jié)構(gòu)化數(shù)據(jù)構(gòu)建NoSQL數(shù) 據(jù)庫索引的方法及裝置。
【背景技術(shù)】
[0002] 數(shù)據(jù)庫管理系統(tǒng)(databasemanagementsystem)是一種操縱和管理數(shù)據(jù)庫的方 式,用于建立、使用和維護(hù)數(shù)據(jù)庫。它對數(shù)據(jù)庫進(jìn)行統(tǒng)一的管理和控制,以保證數(shù)據(jù)庫的安 全性和完整性。
[0003] 隨著大數(shù)據(jù)時(shí)代的到來,交易和交互數(shù)據(jù)也隨之不斷增大。其中,對TB數(shù)據(jù)級的 處理,已經(jīng)成為基本配置;而數(shù)據(jù)類型也由單一性變?yōu)槎鄻有?,例如:結(jié)構(gòu)化數(shù)據(jù)、非結(jié)構(gòu) 化數(shù)據(jù)、半結(jié)構(gòu)化數(shù)據(jù)等,其中結(jié)構(gòu)化數(shù)據(jù)通常是指企業(yè)ERP、財(cái)務(wù)系統(tǒng)等數(shù)據(jù)信息;非結(jié) 構(gòu)化數(shù)據(jù)是指語音、圖像、視頻等數(shù)據(jù);半結(jié)構(gòu)化數(shù)據(jù)是指結(jié)構(gòu)隱含但不嚴(yán)謹(jǐn)?shù)淖晕颐枋鲂?數(shù)據(jù),如:郵件、HTML、報(bào)表、資源庫等數(shù)據(jù)。
[0004] 傳統(tǒng)的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)在面對上述大規(guī)模及多樣性的數(shù)據(jù)時(shí),存在一定 的局限性,尤其是對于處理非結(jié)構(gòu)化數(shù)據(jù)和半結(jié)構(gòu)化數(shù)據(jù)時(shí)顯得力不從心。為此,提出了 NoSQL的概念。
[0005]NoSQL是指非關(guān)系型的數(shù)據(jù)庫,或者稱為:非結(jié)構(gòu)化數(shù)據(jù)存儲的數(shù)據(jù)庫。NoSQL存 儲中的列式存儲(如ffiase,0TS)是基于列的數(shù)據(jù)庫,以方便讀寫大數(shù)據(jù)內(nèi)容。NoSQL存儲 模型可以表示為一個表,每個表由很多行組成,每行又有很多列。表創(chuàng)建時(shí)需要指定行的主 鍵列,該主鍵列通常被用來劃分?jǐn)?shù)據(jù),相鄰主鍵的行通常被組織在一起。對NoSQL數(shù)據(jù)庫進(jìn) 行查詢的方式是為其建立索引。
[0006] 索引是對數(shù)據(jù)庫表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu),使用索引可快速訪問 數(shù)據(jù)庫表中的特定信息。因此,可以通過為數(shù)據(jù)庫建立索引查找到所需要的信息。
[0007] 倒排索引是NoSQL數(shù)據(jù)庫最常用的數(shù)據(jù)結(jié)構(gòu)之一,所謂倒排索引(Inverted index),是根據(jù)屬性的值來查找記錄,在倒排索引表中的每一項(xiàng)都包括一個屬性值和具有 該屬性值的各記錄的地址。由于不是由記錄來確定屬性值,而是由屬性值來確定記錄的地 址,所以稱之為倒排索引。以常用的NoSQL數(shù)據(jù)庫類型--文檔檢索系統(tǒng)為例,如果要為存 儲在硬盤上的文本文件建立倒排索引,則所述屬性值就是文檔中的關(guān)鍵字,倒排索引表中 對應(yīng)每個關(guān)鍵字記錄包含該關(guān)鍵字的文本文件所在的硬盤存儲位置,該硬盤存儲位置稱為 索引值。
[0008] 對上述文檔檢索系統(tǒng)為例,需要為大量文檔建立數(shù)據(jù)庫索引時(shí),可以將文檔和索 引存入NoSQL數(shù)據(jù)庫的數(shù)據(jù)表和倒排索引表中,數(shù)據(jù)表主鍵是文檔ID,值是文檔內(nèi)容;倒排 索引表主鍵是關(guān)鍵字,值是包含該關(guān)鍵字的文檔列表,通過倒排索引表的關(guān)鍵字主鍵可以 查找包含該關(guān)鍵字的所有文檔的文檔ID,使用這些文檔ID,再通過數(shù)據(jù)表,可以查找到對 應(yīng)的文檔內(nèi)容,通過上述方式,就可以實(shí)現(xiàn)從海量的信息中快速地提取出用戶需求的信息, 實(shí)現(xiàn)為NoSQL數(shù)據(jù)庫建立索引的目的。
[0009] 然而,現(xiàn)有基于NoSQL對數(shù)據(jù)建立的倒排索引,其查詢效率很低。原因在于,用戶 在根據(jù)關(guān)鍵字進(jìn)行查詢時(shí),需要在整個倒排索引表中查找相應(yīng)關(guān)鍵字,該查找時(shí)間隨數(shù)據(jù) 量指數(shù)增長,導(dǎo)致查詢效率低。
[0010] 此外,現(xiàn)有的NoSQL數(shù)據(jù)庫索引的更新效率過低。以上述文檔檢索系統(tǒng)為例,現(xiàn)有 的NoSQL系統(tǒng)中,當(dāng)增加新文檔的數(shù)據(jù)時(shí),需要先讀取原有的倒排索引表,找出該新文檔的 關(guān)鍵字在倒排索引表中的位置,然后,再將該新文檔的文檔ID對應(yīng)這些關(guān)鍵字寫入倒排索 引表;由于需要先讀取倒排索引表的內(nèi)容,顯著降低了數(shù)據(jù)庫索引的更新速度,當(dāng)數(shù)據(jù)庫很 大時(shí),更新速度將達(dá)到無法接收的地步。
[0011] 綜上,由于現(xiàn)有技術(shù)中基于NoSQL存儲數(shù)據(jù)構(gòu)建索引的方式,存在查詢效率和更 新效率過低的問題,因此,導(dǎo)致系統(tǒng)吞吐量低,無法處理TB規(guī)模文檔的寫入與查詢。
[0012] 所以,如何能夠構(gòu)建一種具有更高吞吐能力的NoSQL數(shù)據(jù)庫索引方法,成為亟待 解決的技術(shù)問題。
【發(fā)明內(nèi)容】
[0013] 本申請?zhí)峁┮环N為半結(jié)構(gòu)化數(shù)據(jù)構(gòu)建NoSQL數(shù)據(jù)庫索引的方法,所述數(shù)據(jù)庫索引 具有更高的查詢效率,以及更便于更新。
[0014] 本申請同時(shí)提供一種為半結(jié)構(gòu)化數(shù)據(jù)構(gòu)建NoSQL數(shù)據(jù)庫索引的裝置。
[0015] 為解決上述技術(shù)問題,本申請?zhí)峁┮环N為半結(jié)構(gòu)化數(shù)據(jù)構(gòu)建NoSQL數(shù)據(jù)庫索引的 方法,包括:將半結(jié)構(gòu)化源數(shù)據(jù)進(jìn)行預(yù)處理,獲得若干待存入數(shù)據(jù)庫的文本段;將所述預(yù)處 理后的文本段存儲至數(shù)據(jù)表中,所述數(shù)據(jù)表具有第一組合主鍵,每個文本段對應(yīng)所述第一 組合主鍵存儲至相應(yīng)的記錄中;所述第一組合主鍵包括結(jié)構(gòu)化線索主鍵和序列值主鍵;所 述結(jié)構(gòu)化線索主鍵標(biāo)識結(jié)構(gòu)化線索,所述結(jié)構(gòu)化線索以確定的順序被分割為若干連續(xù)區(qū) 間,每一區(qū)間分配一個特定的鍵值作為結(jié)構(gòu)化線索主鍵的鍵值;所述序列值主鍵,是為每 個文本段賦予唯一對應(yīng)所述文本段的序列值;對所述預(yù)處理后的文本段建立倒排索引表, 所述倒排索引表的主鍵為第二組合主鍵,所述第二組合主鍵包含結(jié)構(gòu)化線索主鍵和關(guān)鍵字 主鍵;所述倒排索引表中,對應(yīng)上述各個主鍵的鍵值,記錄相關(guān)的文本段序列標(biāo)識作為索引 值;關(guān)鍵字主鍵相同,但具有不同的結(jié)構(gòu)化線索主鍵鍵值的索引值,在所述倒排索引表中位 于不同的行。
[0016] 優(yōu)選地,所述第一組合主鍵包括數(shù)據(jù)源主鍵,所述數(shù)據(jù)源主鍵標(biāo)識文本段的數(shù)據(jù) 來源;所述第二組合主鍵同樣包含上述數(shù)據(jù)源主鍵,具有不同的數(shù)據(jù)來源主鍵鍵值的索引 值,在所述倒排索引表中位于不同的行。
[0017] 優(yōu)選地,對這些文本段建立所述數(shù)據(jù)表和倒排索引表時(shí),一次性讀取同一數(shù)據(jù)來 源的具有相同結(jié)構(gòu)化線索主鍵鍵值的所有文本段。
[0018] 優(yōu)選地,所述第一組合主鍵中,所述數(shù)據(jù)源主鍵,具體采用文本段的數(shù)據(jù)源加上文 本段的結(jié)構(gòu)化線索原始值的哈希值;和/或在所述第二組合主鍵中,所述數(shù)據(jù)源主鍵,具體 采用文本段的數(shù)據(jù)源加上關(guān)鍵字的哈希值。
[0019] 優(yōu)選地,所述結(jié)構(gòu)化線索為文本段的源數(shù)據(jù)生成時(shí)間。
[0020] 優(yōu)選地,所述結(jié)構(gòu)化線索以確定的順序被分割為若干連續(xù)區(qū)間,是將文本段的源 數(shù)據(jù)生成時(shí)間分為若干時(shí)間段;所述每一區(qū)間分配一個特定的鍵值作為結(jié)構(gòu)化線索主鍵的 鍵值,是以所述時(shí)間段的起點(diǎn)、終點(diǎn)、中點(diǎn)或者所述時(shí)間段內(nèi)的任意一點(diǎn)的時(shí)間值作為所述 特定的鍵值,或者為所述時(shí)間段確定一個唯一的標(biāo)識符號作為所述特定的鍵值。
[0021] 優(yōu)選地,所述序列值以基值加偏移值的方式表示;所述基值與所述結(jié)構(gòu)化線索主 鍵鍵值對應(yīng),即,相同的結(jié)構(gòu)化線索主鍵鍵值對應(yīng)同一個基值;所述偏移值以如下方式獲 得:對應(yīng)同一個結(jié)構(gòu)化線索主鍵鍵值的每個文本段,以所述結(jié)構(gòu)化線索原始值的順序?yàn)橐?據(jù),按照順序賦予相應(yīng)的偏移值。
[0022] 優(yōu)選地,所述倒排索引表中,記錄相關(guān)文本段標(biāo)識作為索引值的具體方法是:為對 應(yīng)同一個數(shù)據(jù)源主鍵鍵值,并且結(jié)構(gòu)化線索主鍵鍵值相同的所有文本段,提供一個基值;同 時(shí),為這些文本段提供一個二進(jìn)制比特?cái)?shù)組,所述比特?cái)?shù)組中,以第i位二進(jìn)制數(shù)標(biāo)識第i 個文本段是否包含所在記錄的關(guān)鍵字主鍵中所列的關(guān)鍵字。
[0023] 優(yōu)選地,若對應(yīng)同一個數(shù)據(jù)源主鍵并且具有相同的結(jié)構(gòu)化線索主鍵的所有文本 段,均包括某個關(guān)鍵字,則在倒排索引表對應(yīng)所述關(guān)鍵字主鍵的記錄中,其索引值記錄為一 個特殊符號,所述特殊符號表示所有文本段均包含所述關(guān)鍵字;或者,若對應(yīng)同一個數(shù)據(jù)源 主鍵并且具有相同的結(jié)構(gòu)化線索主鍵的少量文本段,包括某個關(guān)鍵字,則直接記錄以整數(shù) 表示的文本段偏移值。
[0024] 本申請還提供一種為半結(jié)構(gòu)化數(shù)據(jù)構(gòu)