包含1和c的數(shù)據(jù),首先在行首進行哈希,查找到第一行001和第5行005,然后進行c第三列的哈希,查找到第三行003和第5行005 ;其中,001和003都沒有出現(xiàn)兩次,則說明他們并未在同一行,所以立刻舍去,當發(fā)現(xiàn)標記位相同的005時,即是查詢的目的行。
[0071 ] 基于上述實施例,該方法還可以包括:
[0072]接收用戶反饋的所述待查詢數(shù)據(jù)的查詢結(jié)果;
[0073]當所述查詢結(jié)果中的錯誤次數(shù)超過閾值,則進行哈希表維護。
[0074]其中,每次用戶根據(jù)查詢結(jié)果看是否為正確的,若為錯誤的,則進行記錄,待錯誤次數(shù)超過閾值,則需要對哈希表進行維護,防止查詢錯誤。提高查詢準確度。閾值的設(shè)定可以根據(jù)實際情況進行。也可以是根據(jù)錯誤次數(shù)得到錯誤率,利用錯誤率來判段是否需要進行哈希表的維護。
[0075]基于上述實施例,為每一列數(shù)據(jù)建立一個哈希表可以包括:
[0076]根據(jù)所述數(shù)據(jù)庫中預(yù)定的列存儲空間,確定哈希表的容量;
[0077]根據(jù)所述容量,為每一列數(shù)據(jù)建立一個哈希表。
[0078]其中,如果哈希表做的足夠大的話,則沒有哈希沖突,則實現(xiàn)了 0(1)的查詢復(fù)雜度,即如果哈希表太小的話,會存在哈希沖突;因此,為了避免哈希沖突,則根據(jù)數(shù)據(jù)庫中預(yù)定的列存儲空間,確定哈希表的容量;根據(jù)容量,為每一列數(shù)據(jù)建立一個哈希表。這樣可以根據(jù)存儲空間的實際需求,進行哈希表的大小的設(shè)定,充分利用資源。
[0079]基于上述技術(shù)方案,本發(fā)明實施例提供的數(shù)據(jù)庫中數(shù)據(jù)存儲的方法,能夠通過每一列建立的哈希表,可以大大縮小每一列要查詢的數(shù)據(jù)量,不需要進行全表遍歷,提高查詢速度;且在每一行的數(shù)據(jù)中,每一個字段數(shù)據(jù)都是雙向鏈表的一個節(jié)點,由行首的字段可以查詢一行所有的數(shù)據(jù),最終可以有效地改進數(shù)據(jù)庫的檢索查詢速度。還可以根據(jù)查詢錯誤次數(shù)或者錯誤率,及時對哈希表進行維護,提高查詢準確度。
[0080]本發(fā)明實施例提供了數(shù)據(jù)庫中數(shù)據(jù)存儲的方法,通過上述方法可以有效地改進數(shù)據(jù)庫的檢索查詢速度。
[0081]下面對本發(fā)明實施例提供的數(shù)據(jù)庫中數(shù)據(jù)存儲的系統(tǒng)進行介紹,下文描述的數(shù)據(jù)庫中數(shù)據(jù)存儲的系統(tǒng)與上文描述的數(shù)據(jù)庫中數(shù)據(jù)存儲的方法可相互對應(yīng)參照。
[0082]請參考圖3,圖3為本發(fā)明實施例所提供的數(shù)據(jù)庫中數(shù)據(jù)存儲的系統(tǒng)的結(jié)構(gòu)框圖;該系統(tǒng)可以包括:
[0083]哈希表模塊100,用于數(shù)據(jù)庫存儲數(shù)據(jù)時,按照每一列數(shù)據(jù)的屬性進行一列的存儲,形成列式存儲,并為每一列數(shù)據(jù)建立一個哈希表;
[0084]列雙向鏈表模塊200,用于在每一列的數(shù)據(jù)中,將每一個字段數(shù)據(jù)都設(shè)置為雙向鏈表的一個節(jié)點,形成一個列雙向鏈表;
[0085]行雙向鏈表模塊300,用于在每一行的數(shù)據(jù)中,將每一個字段數(shù)據(jù)都設(shè)置為雙向鏈表的一個節(jié)點,形成一個行雙向鏈表。
[0086]可選的,所述哈希表模塊100包括:
[0087]容量單元,用于根據(jù)所述數(shù)據(jù)庫中預(yù)定的列存儲空間,確定哈希表的容量;
[0088]建立單元,用于根據(jù)所述容量,為每一列數(shù)據(jù)建立一個哈希表。
[0089]基于上述實施例,該系統(tǒng)還可以包括:
[0090]查詢模塊,用于對數(shù)據(jù)庫中的數(shù)據(jù)進行過濾查詢;所述查詢模塊包括:
[0091]定位單元,用于根據(jù)所述哈希表,定位出待查詢數(shù)據(jù)的行首信息,其中,所述行首信息包括行標和行首字段;
[0092]查詢單元,用于利用所述行首信息及與所述行首信息相對應(yīng)的行雙向鏈表,定位出查詢數(shù)據(jù)。
[0093]可選的,所述定位單元包括:
[0094]定位子單元,用于根據(jù)所述哈希表,定位出所述待查詢數(shù)據(jù)的預(yù)定行首信息;
[0095]統(tǒng)計子單元,用于統(tǒng)計每種預(yù)定行首信息中行標出現(xiàn)的次數(shù);
[0096]判斷子單元,用于判斷所述次數(shù)中是否存在與待查詢數(shù)據(jù)的個數(shù)相同的次數(shù);
[0097]若存在,則觸發(fā)確定子單元,用于確定與待查詢數(shù)據(jù)的個數(shù)相同的次數(shù)對應(yīng)的預(yù)定行首信息作為行首信息。
[0098]基于上述任意實施例,該系統(tǒng)還可以包括:
[0099]接收模塊,用于接收用戶反饋的所述待查詢數(shù)據(jù)的查詢結(jié)果;
[0100]維護模塊,用于當所述查詢結(jié)果中的錯誤次數(shù)超過閾值,則進行哈希表維護。
[0101]基于上述技術(shù)方案,本發(fā)明實施例提供的數(shù)據(jù)庫中數(shù)據(jù)存儲的系統(tǒng),能夠通過每一列建立的哈希表,可以大大縮小每一列要查詢的數(shù)據(jù)量,不需要進行全表遍歷,提高查詢速度;且在每一行的數(shù)據(jù)中,每一個字段數(shù)據(jù)都是雙向鏈表的一個節(jié)點,由行首的字段可以查詢一行所有的數(shù)據(jù),最終可以有效地改進數(shù)據(jù)庫的檢索查詢速度。還可以根據(jù)查詢錯誤次數(shù)或者錯誤率,及時對哈希表進行維護,提高查詢準確度。
[0102]說明書中各個實施例采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似部分互相參見即可。對于實施例公開的裝置而言,由于其與實施例公開的方法相對應(yīng),所以描述的比較簡單,相關(guān)之處參見方法部分說明即可。
[0103]專業(yè)人員還可以進一步意識到,結(jié)合本文中所公開的實施例描述的各示例的單元及算法步驟,能夠以電子硬件、計算機軟件或者二者的結(jié)合來實現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計約束條件。專業(yè)技術(shù)人員可以對每個特定的應(yīng)用來使用不同方法來實現(xiàn)所描述的功能,但是這種實現(xiàn)不應(yīng)認為超出本發(fā)明的范圍。
[0104]結(jié)合本文中所公開的實施例描述的方法或算法的步驟可以直接用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來實施。軟件模塊可以置于隨機存儲器(RAM)、內(nèi)存、只讀存儲器(ROM)、電可編程R0M、電可擦除可編程R0M、寄存器、硬盤、可移動磁盤、CD-ROM、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲介質(zhì)中。
[0105]以上對本發(fā)明所提供的數(shù)據(jù)庫中數(shù)據(jù)存儲的方法及系統(tǒng)進行了詳細介紹。本文中應(yīng)用了具體個例對本發(fā)明的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想。應(yīng)當指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以對本發(fā)明進行若干改進和修飾,這些改進和修飾也落入本發(fā)明權(quán)利要求的保護范圍內(nèi)。
【主權(quán)項】
1.一種數(shù)據(jù)庫中數(shù)據(jù)存儲的方法,其特征在于,包括: 數(shù)據(jù)庫存儲數(shù)據(jù)時,按照每一列數(shù)據(jù)的屬性進行一列的存儲,形成列式存儲,并為每一列數(shù)據(jù)建立一個哈希表; 在每一列的數(shù)據(jù)中,將每一個字段數(shù)據(jù)都設(shè)置為雙向鏈表的一個節(jié)點,形成一個列雙向鏈表; 在每一行的數(shù)據(jù)中,將每一個字段數(shù)據(jù)都設(shè)置為雙向鏈表的一個節(jié)點,形成一個行雙向鏈表。2.如權(quán)利要求1所述的方法,其特征在于,為每一列數(shù)據(jù)建立一個哈希表包括: 根據(jù)所述數(shù)據(jù)庫中預(yù)定的列存儲空間,確定哈希表的容量; 根據(jù)所述容量,為每一列數(shù)據(jù)建立一個哈希表。3.如權(quán)利要求1所述的方法,其特征在于,還包括對數(shù)據(jù)庫中的數(shù)據(jù)進行過濾查詢,包括: 根據(jù)所述哈希表,定位出待查詢數(shù)據(jù)的行首信息,其中,所述行首信息包括行標和行首字段; 利用所述行首信息及與所述行首信息相對應(yīng)的行雙向鏈表,定位出查詢數(shù)據(jù)。4.如權(quán)利要求3所述的方法,其特征在于,根據(jù)所述哈希表,定位出待查詢數(shù)據(jù)的行首信息包括: 根據(jù)所述哈希表,定位出所述待查詢數(shù)據(jù)的預(yù)定行首信息; 統(tǒng)計每種預(yù)定行首信息中行標出現(xiàn)的次數(shù); 判斷所述次數(shù)中是否存在與待查詢數(shù)據(jù)的個數(shù)相同的次數(shù); 若存在,則確定與待查詢數(shù)據(jù)的個數(shù)相同的次數(shù)對應(yīng)的預(yù)定行首信息作為行首信息。5.如權(quán)利要求4所述的方法,其特征在于,還包括: 接收用戶反饋的所述待查詢數(shù)據(jù)的查詢結(jié)果; 當所述查詢結(jié)果中的錯誤次數(shù)超過閾值,則進行哈希表維護。6.一種數(shù)據(jù)庫中數(shù)據(jù)存儲的系統(tǒng),其特征在于,包括: 哈希表模塊,用于數(shù)據(jù)庫存儲數(shù)據(jù)時,按照每一列數(shù)據(jù)的屬性進行一列的存儲,形成列式存儲,并為每一列數(shù)據(jù)建立一個哈希表; 列雙向鏈表模塊,用于在每一列的數(shù)據(jù)中,將每一個字段數(shù)據(jù)都設(shè)置為雙向鏈表的一個節(jié)點,形成一個列雙向鏈表; 行雙向鏈表模塊,用于在每一行的數(shù)據(jù)中,將每一個字段數(shù)據(jù)都設(shè)置為雙向鏈表的一個節(jié)點,形成一個行雙向鏈表。7.如權(quán)利要求6所述的系統(tǒng),其特征在于,所述哈希表模塊包括: 容量單元,用于根據(jù)所述數(shù)據(jù)庫中預(yù)定的列存儲空間,確定哈希表的容量; 建立單元,用于根據(jù)所述容量,為每一列數(shù)據(jù)建立一個哈希表。8.如權(quán)利要求6所述的系統(tǒng),其特征在于,還包括: 查詢模塊,用于對數(shù)據(jù)庫中的數(shù)據(jù)進行過濾查詢;所述查詢模塊包括: 定位單元,用于根據(jù)所述哈希表,定位出待查詢數(shù)據(jù)的行首信息,其中,所述行首信息包括行標和行首字段; 查詢單元,用于利用所述行首信息及與所述行首信息相對應(yīng)的行雙向鏈表,定位出查詢數(shù)據(jù)。9.如權(quán)利要求8所述的系統(tǒng),其特征在于,所述定位單元包括: 定位子單元,用于根據(jù)所述哈希表,定位出所述待查詢數(shù)據(jù)的預(yù)定行首信息; 統(tǒng)計子單元,用于統(tǒng)計每種預(yù)定行首信息中行標出現(xiàn)的次數(shù); 判斷子單元,用于判斷所述次數(shù)中是否存在與待查詢數(shù)據(jù)的個數(shù)相同的次數(shù); 若存在,則觸發(fā)確定子單元,用于確定與待查詢數(shù)據(jù)的個數(shù)相同的次數(shù)對應(yīng)的預(yù)定行首信息作為行首信息。10.如權(quán)利要求9所述的系統(tǒng),其特征在于,還包括: 接收模塊,用于接收用戶反饋的所述待查詢數(shù)據(jù)的查詢結(jié)果; 維護模塊,用于當所述查詢結(jié)果中的錯誤次數(shù)超過閾值,則進行哈希表維護。
【專利摘要】本發(fā)明公開了一種數(shù)據(jù)庫中數(shù)據(jù)存儲的方法,包括:數(shù)據(jù)庫存儲數(shù)據(jù)時,按照每一列數(shù)據(jù)的屬性進行一列的存儲,形成列式存儲,并為每一列數(shù)據(jù)建立一個哈希表;在每一列的數(shù)據(jù)中,將每一個字段數(shù)據(jù)都設(shè)置為雙向鏈表的一個節(jié)點,形成一個列雙向鏈表;在每一行的數(shù)據(jù)中,將每一個字段數(shù)據(jù)都設(shè)置為雙向鏈表的一個節(jié)點,形成一個行雙向鏈表;該方法可以大大縮小每一列要查詢的數(shù)據(jù)量,不需要進行全表遍歷,可以有效地改進數(shù)據(jù)庫的檢索查詢速度;本發(fā)明還公開了一種數(shù)據(jù)庫中數(shù)據(jù)存儲的系統(tǒng)。
【IPC分類】G06F17/30
【公開號】CN105354297
【申請?zhí)枴緾N201510740143
【發(fā)明人】王歡
【申請人】浪潮(北京)電子信息產(chǎn)業(yè)有限公司
【公開日】2016年2月24日
【申請日】2015年11月3日