一種數據庫中數據存儲的方法及系統的制作方法
【技術領域】
[0001]本發明涉及計算機技術領域,特別涉及一種數據庫中數據存儲的方法及系統。
【背景技術】
[0002]隨著計算機技術以及移動互聯網技術的飛速發展,海量存儲系統越來越成為經濟社會發展的需要。這就為計算機系統的設計難度帶來巨大挑戰,例如,單服務器的網絡并發量,以及數據查詢量和存儲數量都得到了前所未有的挑戰。如何在海量的結構化信息中查找到目標數據,成為業內的一個難題,
[0003]因此,如何對百億,千億的數據進行存儲并實現快速查詢,是本領域技術人員需要解決的技術問題。
【發明內容】
[0004]本發明的目的是提供一種數據庫中數據存儲的方法及系統,能夠大大縮小每一列要查詢的數據量,不需要進行全表遍歷,可以有效地改進數據庫的檢索查詢速度。
[0005]為解決上述技術問題,本發明提供一種數據庫中數據存儲的方法,包括:
[0006]數據庫存儲數據時,按照每一列數據的屬性進行一列的存儲,形成列式存儲,并為每一列數據建立一個哈希表;
[0007]在每一列的數據中,將每一個字段數據都設置為雙向鏈表的一個節點,形成一個列雙向鏈表;
[0008]在每一行的數據中,將每一個字段數據都設置為雙向鏈表的一個節點,形成一個行雙向鏈表。
[0009]其中,為每一列數據建立一個哈希表包括:
[0010]根據所述數據庫中預定的列存儲空間,確定哈希表的容量;
[0011]根據所述容量,為每一列數據建立一個哈希表。
[0012]其中,還包括對數據庫中的數據進行過濾查詢,包括:
[0013]根據所述哈希表,定位出待查詢數據的行首信息,其中,所述行首信息包括行標和行首字段;
[0014]利用所述行首信息及與所述行首信息相對應的行雙向鏈表,定位出查詢數據。
[0015]其中,根據所述哈希表,定位出待查詢數據的行首信息包括:
[0016]根據所述哈希表,定位出所述待查詢數據的預定行首信息;
[0017]統計每種預定行首信息中行標出現的次數;
[0018]判斷所述次數中是否存在與待查詢數據的個數相同的次數;
[0019]若存在,則確定與待查詢數據的個數相同的次數對應的預定行首信息作為行首信息。
[0020]其中,還包括:
[0021]接收用戶反饋的所述待查詢數據的查詢結果;
[0022]當所述查詢結果中的錯誤次數超過閾值,則進行哈希表維護。
[0023]本發明提供一種數據庫中數據存儲的系統,包括:
[0024]哈希表模塊,用于數據庫存儲數據時,按照每一列數據的屬性進行一列的存儲,形成列式存儲,并為每一列數據建立一個哈希表;
[0025]列雙向鏈表模塊,用于在每一列的數據中,將每一個字段數據都設置為雙向鏈表的一個節點,形成一個列雙向鏈表;
[0026]行雙向鏈表模塊,用于在每一行的數據中,將每一個字段數據都設置為雙向鏈表的一個節點,形成一個行雙向鏈表。
[0027]其中,所述哈希表模塊包括:
[0028]容量單元,用于根據所述數據庫中預定的列存儲空間,確定哈希表的容量;
[0029]建立單元,用于根據所述容量,為每一列數據建立一個哈希表。
[0030]其中,還包括:
[0031]查詢模塊,用于對數據庫中的數據進行過濾查詢;所述查詢模塊包括:
[0032]定位單元,用于根據所述哈希表,定位出待查詢數據的行首信息,其中,所述行首信息包括行標和行首字段;
[0033]查詢單元,用于利用所述行首信息及與所述行首信息相對應的行雙向鏈表,定位出查詢數據。
[0034]其中,所述定位單元包括:
[0035]定位子單元,用于根據所述哈希表,定位出所述待查詢數據的預定行首信息;
[0036]統計子單元,用于統計每種預定行首信息中行標出現的次數;
[0037]判斷子單元,用于判斷所述次數中是否存在與待查詢數據的個數相同的次數;
[0038]若存在,則觸發確定子單元,用于確定與待查詢數據的個數相同的次數對應的預定行首信息作為行首信息。
[0039]其中,還包括:
[0040]接收模塊,用于接收用戶反饋的所述待查詢數據的查詢結果;
[0041]維護模塊,用于當所述查詢結果中的錯誤次數超過閾值,則進行哈希表維護。
[0042]本發明所提供的數據庫中數據存儲的方法,包括:數據庫存儲數據時,按照每一列數據的屬性進行一列的存儲,形成列式存儲,并為每一列數據建立一個哈希表;在每一列的數據中,將每一個字段數據都設置為雙向鏈表的一個節點,形成一個列雙向鏈表;在每一行的數據中,將每一個字段數據都設置為雙向鏈表的一個節點,形成一個行雙向鏈表;
[0043]通過每一列建立的哈希表,可以大大縮小每一列要查詢的數據量,不需要進行全表遍歷,提高查詢速度;且在每一行的數據中,每一個字段數據都是雙向鏈表的一個節點,由行首的字段可以查詢一行所有的數據,最終可以有效地改進數據庫的檢索查詢速度。
【附圖說明】
[0044]為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的實施例,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據提供的附圖獲得其他的附圖。
[0045]圖1為本發明實施例所提供的數據庫中數據存儲的方法的流程圖;
[0046]圖2為本發明實施例所提供的數據庫中數據存儲布局的示意圖;
[0047]圖3為本發明實施例所提供的數據庫中數據存儲的系統的結構框圖。
【具體實施方式】
[0048]本發明的核心是提供一種數據庫中數據存儲的方法及系統,能夠大大縮小每一列要查詢的數據量,不需要進行全表遍歷,可以有效地改進數據庫的檢索查詢速度。
[0049]為使本發明實施例的目的、技術方案和優點更加清楚,下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。
[0050]請參考圖1,圖1為本發明實施例所提供的數據庫中數據存儲的方法的流程圖;該方法可以包括:
[0051]slOO、數據庫存儲數據時,按照每一列數據的屬性進行一列的存儲,形成列式存儲,并為每一列數據建立一個哈希表;
[0052]其中,考慮到海量存儲數據的特點,在每一行的數據中,根據每一列的屬性,進行一列的存儲,成為列式存儲,每一列形成一個哈希表,當上層查詢數據的時候,根據哈希算法,快速定位到一行的行首。
[0053]sllO、在每一列的數據中,將每一個字段數據都設置為雙向鏈表的一個節點,形成一個列雙向鏈表;
[0054]sl20、在每一行的數據中,將每一個字段數據都設置為雙向鏈表的一個節點,形成一個行雙向鏈表。
[0055]其中,在每一行的數據中,每一個字段數據都是雙向鏈表的一個節點,由行首的字段可以查詢了一行所有的數據。
[0056]其中,要想在查詢數據時提高查詢速度,必須要對數據在文件中的存儲形式和數據的索引形式進行改變,例如,關系型數據的列式存儲,可以將每一列的值直接排列下來,不用引入其他的概念,也不會丟失數據。關系型數據的列式存儲比較好理解;嵌套類型數據的一行叫做一個記錄(record),嵌套數據類型的特點是一個record中的列向量(column)除了可以是整形Int,長整形Long,字符串String這樣的原語(primitive)類型以外,還可以是表List,映射Map,集合Set這樣的復雜類型。
[0057]根據本實施例提供的數據庫中數據存儲的方法,請參考圖2為按照上述方法得到的數據庫中數據存儲布局的示意圖。
[0058]基于上述技術方案,本發明實施例提供的數據庫中數據存儲的方法,能夠通過每一列建立的哈希表,可以大大縮小每一列要查詢的數據量,不需要進行全表遍歷,提高查詢速度;且在每一行的數據中,每一個字段數據都是雙向鏈表的一個節點,由行首的字段可以查詢一行所有的數據,最終可以有效地改進數據庫的檢索查詢速度。
[0059]基于上述實施例,還包括對數據庫中的數據進行過濾查詢,可以包括:
[0060]根據所述哈希表,定位出待查詢數據的行首信息,其中,所述行首信息包括行標和行首字段;
[0061]其中,即確定待查詢數據的在哪一行,然后給定行首信息,即可以是第一行,或者是001,或者其他可以表示行首的字符等。
[0062]利用所述行首信息及與所述行首信息相對應的行雙向鏈表,定位出查詢數據。
[0063]其中,由于在每一行的數據中,每一個字段數據都是雙向鏈表的一個節點,由行首的字段可以查詢了一行所有的數據。因此,這里確定了行首信息,就可以根據行雙向鏈表,查詢到待查詢數據。
[0064]可選的,根據所述哈希表,定位出待查詢數據的行首信息可以包括:
[0065]根據所述哈希表,定位出所述待查詢數據的預定行首信息;
[0066]統計每種預定行首信息中行標出現的次數;
[0067]判斷所述次數中是否存在與待查詢數據的個數相同的次數;
[0068]若存在,則確定與待查詢數據的個數相同的次數對應的預定行首信息作為行首信息。
[0069]其中,每一列進行哈希查找,然后再根據查找的結果中的標記位,進行匹配,如果匹配成功則表示在同一行的,就是要查找的數據。整個匹配的過程就是要確定需要查詢的數據是否在同一行,例如查詢李明的各科考試成績,那么則必須保證所有查詢到的數據都要在李明這一行,才是李明的成績,否則是別人的成績,因此,需要進行匹配。即查詢李明的三科成績,則會查詢四列名字屬性那一列查詢李明,一科成績一列查詢李明該科成績,若李明在第5行,則需要看5的行標出現的次數是否為4次,若是,則第5行的行首信息即為需要的行首信息。其他出現不足4次的都不匹配。
[0070]請參考圖2,進行舉例說明,查詢