一種數據存儲方法及查詢方法與流程
2023-04-30 13:44:11 1

本發明涉及計算機技術領域,特別是涉及一種數據存儲方法及查詢方法。
背景技術:
隨著手機的普及,出現了海量的用戶,因此對於手機號碼的管理也越來越複雜。例如,由於一些不法分子利用手機進行廣告推銷或者引誘消費者與其聯繫,從而導致消費者出現巨額的損失。因此,運營商或者消費者可以將這些手機號碼進行存儲構成一個黑名單,當需要進行正常的通信業務時,將目標號碼與存儲的黑名單進行比較,如果黑名單中存在與目標號碼相同的號碼,說明目標號碼就在黑名單的範圍內,則需要過濾掉這個目標號碼,如果黑名單中不存在與目標號碼相同的號碼,說明目標號碼不在黑名單的範圍內,則不需要過濾掉這個目標號碼,可以與這個目標號碼進行正常的通信業務。
現有技術中,採用的存儲方法就是簡單的將每個手機號碼存儲在指定的區域中。由於黑名單中的號碼非常多,可能存在上千萬個,因此,以上述的存儲方式進行存儲後,如果需要對某個號碼進行查詢,則需要遍歷大量的號碼,甚至是全部的號碼。如果有100個號碼,則最大循環次數就是100次,如果是1000個號碼,則最大循環次數就是1000次,很顯然,如果是千萬級別的個數,則最大的循環次數就是千萬次。
綜上所述,現有的存儲方式使得後續的查詢工作非常繁瑣,會耗費大量的時間,並且隨著數據的增多,查詢的循環次數也在不斷增加,對於伺服器的性能影響非常大。因此,如何降低查詢時間以提高查詢的效率是本領域技術人員亟待解決的問題。
技術實現要素:
本發明的目的是提供一種數據存儲方法及數據查詢方法,本方法能夠克服後續查詢工作繁瑣,耗費大量時間的問題,並且不會隨著數據的增多,而增加查詢的循環次數。因此,本方法能夠降低查詢時間以提高查詢的效率。
為解決上述技術問題,本發明提供一種數據存儲方法,包括:
將待存儲數據按照數據位的位置關係分解成N個層級;
將所述待存儲數據按照層級的關聯關係存入預先設置的多叉樹結構中;
其中,所述多叉樹中的節點層級與所述N個層級對應,N為正整數,且等於或小於所述待存儲數據的數據位數。
優選地,所述待存儲數據為包含多位數字的數字信息。
優選地,所述數字信息為10進位數據。
優選地,所述將待存儲數據按照數據位的位置關係分解成N個層級具體包括:
將所述待存儲數據按照預定規則進行壓縮以生成對應的新待存儲數據;
將所述新待存儲數據按照數據位的位置關係分解成N個層級。
優選地,所述待存儲數據為包含11位數字的手機號碼。
優選地,所述預定規則為預定進位轉換,則所述新待存儲數據為所述待存儲數據按照預定進位轉換後的結果。
優選地,所述預定進位轉換為16進位轉換或32進位轉換或64進位轉換。
優選地,所述待存儲數據為包含多位字母的字母信息。
優選地,所述N個層級的先後順序與所述待存儲數據的讀取順序相同。
為解決上述技術問題,本發明提供一種數據查詢方法,基於上述所述的數據存儲方法,包括:
將待查詢數據按照數據位的關係分解成N個層級;
將所述待查詢數據按照層級的關聯關係遍歷所述多叉樹結構,直到所述多叉樹結構中的第M個節點層級中未包含有對應的數據位或查詢到所述待查詢數據為止;其中,M小於或等於N。
本發明所提供的數據存儲方法,包括將待存儲數據按照層級的關聯關係存入預先設置的多叉樹結構中,然後將待存儲數據按照數據位的位置關係分解成N個層級。通過這樣的存儲方式,在進行後續的查詢過程中,不需要遍歷全部的存儲數據,只需要依據待查詢數據中各數據位的層級關係,遍歷多叉樹結構即可,最大的循環次數為多叉樹的節點層級,並且循環次數不會隨著數據量的增多而增多。因此,本發明提供的數據存儲方法能夠降低後續查詢的工作量,從而降低查詢時間和提高查詢效率。
此外,本發明還提供的一種數據查詢方法基於上述所述的數據存儲方法,在查詢過程中,該方法不需要遍歷全部的存儲數據,只需要依據待查詢數據中各數據位的層級關係,遍歷多叉樹結構即可,最大的循環次數為多叉樹的節點層級,並且循環次數不會隨著數據量的增多而增多。因此,本發明提供的數據查詢方法能夠降低查詢的工作量,從而降低查詢時間和提高查詢效率。
附圖說明
為了更清楚地說明本發明實施例,下面將對實施例中所需要使用的附圖做簡單的介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對於本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
圖1為本發明實施例提供的一種數據存儲方法的流程圖;
圖2為發明實施例提供的一種數據存儲結構示意圖;
圖3為本發明實施例提供另一種數據存儲方法的流程圖;
圖4為本發明實施例提供的一種經過壓縮後的存儲結構示意圖;
圖5為本發明實施例提供的一種數據查詢方法的流程圖。
具體實施方式
下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部實施例。基於本發明中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下,所獲得的所有其他實施例,都屬於本發明保護範圍。
本發明的核心是提供一種數據存儲方法及數據查詢方法,本方法能夠克服後續查詢工作繁瑣,耗費大量時間的問題,並且不會隨著數據的增多,而增加查詢的循環次數。因此,本方法能夠降低查詢時間以提高查詢的效率。
為了使本技術領域的人員更好地理解本發明方案,下面結合附圖和具體實施方式對本發明作進一步的詳細說明。
圖1為本發明實施例提供的一種數據存儲方法的流程圖。如圖1所示,包括:
S10:將待存儲數據按照數據位的位置關係分解成N個層級。
可以理解的是,待存儲數據可以為包含多位數字的數字信息或為包含多位字母的字母信息。例如,對於數字信息來說如果是10進位的數據,則數據位中的內容就是0-9,數據位中的內容均是數字,如果是16進位的數據,則數據位中的內容就是0-F,則數據位中的內容除了0-9數字外,還包括A-F幾個字母,但是A-F幾個字母也為數字信息。另外,還可以是2進位或者32進位的數據,本實施例不再贅述。
本實施例中,按照數據位的位置關係分解成N個層級必須保證每個數據位在原始數據中的位置關係與分解後的層級關係時相同的。例如,如果數據位為N位,分解成N個層級的話,則第一個數據位的數據如果在第一個層級,則第二個數據位的數據必須是第二個層級,第三個數據位的數據必須是第三個層級,以此類推;同樣的,如果第一個數據位的數據在最後一個層級,則第二個數據位的數據必須在倒數第二個層級,第三個數據位的數據必須在倒數第三個層級,以此類推。只有這樣的分解方式,才能保證每個數據位在原始數據中的位置關係與在分解結構中的位置關係是相同的。
需要說明的是,上文中描述的數據位有N位,則分解成N個層級只是一種具體實現形式,在另外一種實施例中,還可以是每兩位,或者每三位等形式,本實施例不再贅述。分解的層級越多,則需要循環的查詢的次數越多,但是每一層的節點較少,即同一層的查詢時間就會較少。
S11:將待存儲數據按照層級的關聯關係存入預先設置的多叉樹結構中,其中,多叉樹中的節點層級與N個層級對應,N為正整數,且等於或小於待存儲數據的數據位數。
多叉樹結構為倒立的樹狀結構,多叉樹中有多個節點層級,這裡的節點層級與待存儲數據分解成的N個層級相互對應。
為了讓本領域技術人員更加理解本發明所提供的技術方案,本實施例中給出一個簡單的例子加以說明。如果待存儲數據均為6位的數字信息,且為10進位,例如412012、412013、415357和415358。按照步驟S10將這四個數據進行分解,例如分解成6個等級。圖2為發明實施例提供的一種數據存儲結構示意圖。如圖2所示,如果最高數據位為第一個層級的話,則每個待存儲數據中的最高位(均為4)存儲在多叉樹結構中的第一個節點層級,這裡4個待存儲數據的最高數據位均為1,因此,不需要分叉。按照數據位的位置關係,第一個待存儲數據的第二個數據位、第二個待存儲數據的第二個數據位、第三個待存儲數據的第二個數據位以及第四個待存儲數據的第二個數據位均為多叉樹結構中的第二個節點層級,這裡4個待存儲數據的第二個數據位均為1,因此,不需要分叉。按照數據位的位置關係,第一個待存儲數據的第三個數據位、第二個待存儲數據的第三個數據位、第三個待存儲數據的第三個數據位以及第四個待存儲數據的第三個數據位均為多叉樹結構中的第三個節點層級,這裡4個待存儲數據的第三個數據位有兩種,分別為2或5,因此,多叉樹要進行分叉,即第三個節點層級有兩個節點。其餘的分解和存儲均類似,本實施例不再贅述。
採用上述的存儲方式,當進行數據查詢時,將待查詢數據按照層級的關聯關係遍歷多叉樹結構,直到多叉樹結構中的第M個節點層級中未包含有對應的數據位或查詢到待查詢數據為止;其中,M小於或等於N。圖2中由於數據較少對於查詢的效果並明顯,然而如果數據較多的話,例如最大可以是999999,則需要重複查詢上萬次,甚至更多次才可能查詢到相關的數據,因此循環查詢的次數非常多,並且每個數據之間並沒有關聯,如果所要查詢的數據在最後一個或者不存在的話,則需要的查詢次數最大。但是採用本存儲方法的話,則只需要按照多叉樹結構依次查詢即可。如果需要查詢440896這個數據是否在存儲範圍中,則只需要對多叉樹結構中的第一個節點層級查詢是否包含第一個數據位4即可,如果這個節點層級中包含4,則進行下一個節點層級的查詢,下一個數據位為4,不再第二個節點層級中,則說明該待查詢數據不再存儲範圍內,也就不需要再進行後續的查詢步驟。利用本存儲方式,只需要查詢2次即可,但是對於現有的存儲方式來說,需要遍歷存儲範圍內的全部數據才能確定是否存在待查詢數據,因此本存儲方式能夠較小查詢的次數。
本實施例提供的數據存儲方法,包括將待存儲數據按照層級的關聯關係存入預先設置的多叉樹結構中,然後將待存儲數據按照數據位的位置關係分解成N個層級。通過這樣的存儲方式,在進行後續的查詢過程中,不需要遍歷全部的存儲數據,只需要依據待查詢數據中各數據位的層級關係,遍歷多叉樹結構即可,最大的循環次數為多叉樹的節點層級,並且循環次數不會隨著數據量的增多而增多。因此,本發明提供的數據存儲方法能夠降低後續查詢的工作量,從而降低查詢時間和提高查詢效率。
在具體實施中,往往存儲的數據非常多,給存儲空間帶來了巨大的壓力,如何能夠減小存儲空間的用量是本領域技術人員面臨的又一個大問題。
本實施例中,在將待存儲數據存儲至多叉樹結構之前,將待存儲數據進行壓縮,從而減少存儲空間的用量,具體過程如下。
圖3為本發明實施例提供另一種數據存儲方法的流程圖。在圖1的基礎上步驟S10具體包括:
S100:將待存儲數據按照預定規則進行壓縮以生成對應的新待存儲數據。
S101:將新待存儲數據按照數據位的位置關係分解成N個層級。
可以理解的是,採用何種預定規則需要根據實際情況而定,例如預定規則為預定進位轉換,則新待存儲數據為待存儲數據按照預定進位轉換後的結果。預定進位轉換為16進位轉換或32進位轉換或64進位轉換。例如,如果一個待存儲數據本身就是16進位,因此,如果採用16進位轉換是沒有意義的,無法實現數據的壓縮。
在一種具體的實施方式中,待存儲數據為包含11位數字的手機號碼。當前中國大陸的手機號碼為包含11位數字,均以1開頭。對於這樣的數據我們可以進行64進位的數據轉換。例如,對於「18500000000」進行64進位轉換後為「heHVA0」,很顯然,數據位由原來的11位,變成現在的6位,因此如果不進行壓縮,則在進行數據查找時,需要循環11次,而經過壓縮後,則只需要循環6次即可。圖4為本發明實施例提供的一種經過壓縮後的存儲結構示意圖。
作為優選的實施方式,N個層級的先後順序與待存儲數據的讀取順序相同。例如,圖2或圖4所示的存儲示意圖。
在以上述存儲方法進行存儲下,本發明還提供一種數據查詢方法。圖5為本發明實施例提供的一種數據查詢方法的流程圖。該數據查詢方法基於上述實施例所述的數據存儲方法,包括:
S20:將待查詢數據按照數據位的關係分解成N個層級;
S21:將待查詢數據按照層級的關聯關係遍歷多叉樹結構,直到多叉樹結構中的第M個節點層級中未包含有對應的數據位或查詢到待查詢數據為止,其中,M小於或等於N。
由於該數據查詢方法基於上述實施例所述的數據存儲方法,因此,數據存儲方法對應的實施例不再贅述。對於一個待查詢數據,如果第三個節點層級中不包含該數據對應的數據位,則可以停止本次查詢,否則,依次對每個節點層級查詢即可。
本實施例提供的數據查詢方法,基於數據存儲方法,該存儲方法包括將待存儲數據按照層級的關聯關係存入預先設置的多叉樹結構中,然後將待存儲數據按照數據位的位置關係分解成N個層級。在查詢過程中,不需要遍歷全部的存儲數據,只需要依據待查詢數據中各數據位的層級關係,遍歷多叉樹結構即可,最大的循環次數為多叉樹的節點層級,並且循環次數不會隨著數據量的增多而增多。因此,本發明提供的數據查詢方法能夠降低查詢的工作量,從而降低查詢時間和提高查詢效率。
以上對本發明所提供的數據存儲方式及查詢方法進行了詳細介紹。說明書中各個實施例採用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似部分互相參見即可。對於實施例公開的裝置而言,由於其與實施例公開的方法相對應,所以描述的比較簡單,相關之處參見方法部分說明即可。應當指出,對於本技術領域的普通技術人員來說,在不脫離本發明原理的前提下,還可以對本發明進行若干改進和修飾,這些改進和修飾也落入本發明權利要求的保護範圍內。