亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

獲取標(biāo)識號碼的方法及裝置與流程

文檔序號:12770773閱讀:200來源:國知局
獲取標(biāo)識號碼的方法及裝置與流程
本申請涉及計算機領(lǐng)域,具體而言,涉及一種獲取標(biāo)識號碼的方法及裝置。

背景技術(shù):
隨著計算機行業(yè)的快速發(fā)展,用于標(biāo)識作用的標(biāo)識號碼ID在各個領(lǐng)域得到了廣泛應(yīng)用,通常情況下可以采用一種哈希HASH算法比如MD5、SHA-1,或是上述算法的演變得到的算法對任意一個數(shù)據(jù)進(jìn)行處理,得到該數(shù)據(jù)對應(yīng)生成的HASH值,這個值就是數(shù)據(jù)的ID值。這里涉及到的哈希(HASH)算法是一種建立鍵值與數(shù)據(jù)的真實值之間的對應(yīng)關(guān)系的計算方法,通常情況下,每一個真實值只能有一個鍵值,但是一個鍵值可以對應(yīng)多個真實值。例如可以采用一致性哈希算法將數(shù)據(jù)分散的存儲于多臺獨立的機器設(shè)備上,滿足平衡性、單調(diào)性、分散性和負(fù)載。以現(xiàn)有的標(biāo)準(zhǔn)產(chǎn)品單元(StandardProductUnit,簡稱為SPU)和庫存單元(StockKeepingUnit,簡稱為SKU)為例,他們是一種電子商務(wù)系統(tǒng)描述可售商品的維度。例如,可以采用SPU來描述諾基亞N95手機:品牌=諾基亞,型號=N95的手機,這里用了品牌和型號這2個屬性來確定了一種產(chǎn)品。SKU是在SPU的基礎(chǔ)上增加了規(guī)格屬性,比如顏色,這樣就可以區(qū)分同樣配置不同顏色的N95手機,所以SKU是比SPU更精確的維度。如果有一個數(shù)據(jù)庫保存了當(dāng)前所售商品的所有規(guī)格屬性組合,那么和SPU結(jié)合在一起就可以得到當(dāng)前所有產(chǎn)品的SKU,系統(tǒng)就可以以SKU來統(tǒng)計商品。再比如衣服有顏色和尺寸這2種規(guī)格屬性,顏色有5個值,尺寸有3個值就有15種組合。在上述例子當(dāng)中,系統(tǒng)在保存所有的規(guī)格屬性組合的過程中,需要針對這些海量的規(guī)格屬性組合采用哈希算法進(jìn)行計算得到不重復(fù)而且唯一的ID,進(jìn)一步用上述ID和SPU來組成了SKU。由于電子商務(wù)本身有海量商品,再加上這些規(guī)格屬性是有組合的,所以ID數(shù)據(jù)是海量的。由于哈希算法,例如MD5的長度是128位即32個字符,SHA-1更長了,因此通過哈希算法MD5對數(shù)據(jù)(例如規(guī)格屬性組合)進(jìn)行處理,處理得到的ID通常比數(shù)據(jù)本身還要長,而且HASH算法存在重復(fù)的概率,因此,保存的數(shù)據(jù)(例如規(guī)格屬性組合)越多發(fā)生重復(fù)的概率越大,一旦發(fā)生重復(fù),數(shù)據(jù)和ID的一一對應(yīng)關(guān)系就破壞了,特別是為了縮短ID長度容易發(fā)生重復(fù)碰撞,即同一個ID可以鏈接查詢到多個不同的數(shù)據(jù),使得數(shù)據(jù)和ID之間的對應(yīng)關(guān)系不再有存在的意義。例如,在短URL服務(wù)中,ID比URL本身還要長就失去了意義了。目前通過相關(guān)技術(shù)對數(shù)據(jù)進(jìn)行處理得到ID的過程中,由于生成的短ID常會發(fā)生重復(fù),導(dǎo)致生成的ID在應(yīng)用領(lǐng)域中的應(yīng)用性能較差的問題,目前尚未提出有效的解決方案。

技術(shù)實現(xiàn)要素:
針對相關(guān)技術(shù)的對數(shù)據(jù)進(jìn)行處理得到ID的過程中,由于生成的短ID常會發(fā)生重復(fù),導(dǎo)致生成的ID在應(yīng)用領(lǐng)域中的應(yīng)用性能較差的問題,目前尚未提出有效的解決方案而提出本申請,為此,本申請的主要目的在于提供一種獲取標(biāo)識號碼的方法及裝置,以解決上述問題。為了實現(xiàn)上述目的,根據(jù)本申請的一個方面,提供了一種獲取標(biāo)識號碼的方法,該方法包括:獲取字符表中的M個字符,并采用哈希算法對由M個字符構(gòu)成的一個或多個字符組進(jìn)行計算,以生成一個或多個字符哈希值;讀取一個或多個數(shù)據(jù),并采用相同的哈希算法對每個數(shù)據(jù)進(jìn)行計算,以生成一個或多個數(shù)據(jù)哈希值;在每個數(shù)據(jù)哈希值分別匹配到一個字符哈希值之后,根據(jù)匹配得到的字符哈希值來獲取每個數(shù)據(jù)的標(biāo)識號碼。進(jìn)一步地,獲取字符表中的M個字符,并采用哈希算法對由M個字符構(gòu)成的一個或多個字符組進(jìn)行計算,以生成一個或多個字符哈希值包括:將字符表中的所有字符按照ASCII碼值進(jìn)行排序,以獲取字符集;在字符集中順序提取M個字符,對排序后的M個字符進(jìn)行順序組合,以獲取一個或多個字符組;將所有的字符組分別保存至對應(yīng)的結(jié)果集中;采用哈希算法對每個結(jié)果集中的字符組進(jìn)行計算,生成每個字符組所對應(yīng)的字符哈希值。進(jìn)一步地,在每個數(shù)據(jù)哈希值分別匹配到一個字符哈希值之后,根據(jù)匹配得到的字符哈希值來獲取每個數(shù)據(jù)的標(biāo)識號碼包括:在每個數(shù)據(jù)哈希值分別與所有的字符哈希值進(jìn)行匹配之后,依次獲取每個數(shù)據(jù)所對應(yīng)的字符組,其中,一個數(shù)據(jù)對應(yīng)一個字符組,一個字符組對應(yīng)一個或多個數(shù)據(jù);其中,在一個數(shù)據(jù)匹配到唯一的一個字符組情況下,字符組為當(dāng)前數(shù)據(jù)的標(biāo)識號碼;在多個數(shù)據(jù)匹配到唯一的一個字符組的情況下,將字符組中的所有字符進(jìn)行排列組合,以得每一個數(shù)據(jù)所對應(yīng)的字符排序組合,字符排序組合為對應(yīng)數(shù)據(jù)的標(biāo)識號碼。進(jìn)一步地,將每個數(shù)據(jù)哈希值與所有的字符哈希值進(jìn)行匹配,依次得到每個數(shù)據(jù)所對應(yīng)的字符組,在多個數(shù)據(jù)匹配到唯一的一個字符組的情況下,將字符組中的所有字符進(jìn)行排列組合,以得每一個數(shù)據(jù)所對應(yīng)的字符排序組合,字符排序組合為對應(yīng)數(shù)據(jù)的標(biāo)識號碼的步驟包括:步驟A,將第一數(shù)據(jù)哈希值與所有的字符哈希值進(jìn)行匹配,獲取與第一數(shù)據(jù)匹配的字符組為第一字符組,并對第一字符組中所有字符的當(dāng)前排序結(jié)果進(jìn)行標(biāo)記,第一字符組的標(biāo)記賦值為i;步驟B,將第二數(shù)據(jù)哈希值與所有的字符哈希值進(jìn)行匹配,獲取與第二數(shù)據(jù)匹配的字符組為第二字符組,當(dāng)?shù)诙址M與第一字符組相同時,檢測到第一字符組的標(biāo)記賦值為i,則對第一字符組的標(biāo)記加1,得到第二數(shù)據(jù)所對應(yīng)的第一字符組的標(biāo)記賦值為i=i+1;步驟C,將第一字符組中的所有字符按照ASCII碼值進(jìn)行排序,對排序后的第一字符組中的每個字符依次計算階乘,以獲取階乘結(jié)果;步驟D,采用i對階乘結(jié)果進(jìn)行整除得到整除商,根據(jù)整除商的值將第一字符組中的一個字符刪除,以獲取第二數(shù)據(jù)所對應(yīng)的字符排序組合;步驟E,重復(fù)執(zhí)行步驟B至步驟D,得到與第一字符組匹配的所有數(shù)據(jù)的標(biāo)識號碼。進(jìn)一步地,在步驟C之后,方法還包括:采用i對階乘結(jié)果進(jìn)行整除,將得到的余數(shù)作為第一字符組的新標(biāo)記賦值。為了實現(xiàn)上述目的,根據(jù)本申請的另一方面,提供了一種獲取標(biāo)識號碼的裝置,該裝置包括:第一處理模塊,用于獲取字符表中的M個字符,并采用哈希算法對由M個字符構(gòu)成的一個或多個字符組進(jìn)行計算,以生成一個或多個字符哈希值;第二處理模塊,用于讀取一個或多個數(shù)據(jù),并采用相同的哈希算法對每個數(shù)據(jù)進(jìn)行計算,以生成一個或多個數(shù)據(jù)哈希值;第三處理模塊,用于在每個數(shù)據(jù)哈希值分別匹配到一個字符哈希值之后,根據(jù)匹配得到的字符哈希值來獲取每個數(shù)據(jù)的標(biāo)識號碼。進(jìn)一步地,第一處理模塊包括:第一排序模塊,用于將字符表中的所有字符按照ASCII碼值進(jìn)行排序,以獲取字符集;組合模塊,用于在字符集中順序提取M個字符,對排序后的M個字符進(jìn)行順序組合,以獲取一個或多個字符組;保存模塊,用于將所有的字符組分別保存至對應(yīng)的結(jié)果集中;第一計算模塊,用于采用哈希算法對每個結(jié)果集中的字符組進(jìn)行計算,生成每個字符組所對應(yīng)的字符哈希值。進(jìn)一步地,第三處理模塊包括:匹配處理模塊,用于在每個數(shù)據(jù)哈希值分別與所有的字符哈希值進(jìn)行匹配之后,依次獲取每個數(shù)據(jù)所對應(yīng)的字符組,其中,一個數(shù)據(jù)對應(yīng)一個字符組,一個字符組對應(yīng)一個或多個數(shù)據(jù);第一獲取模塊,用于在一個數(shù)據(jù)匹配到唯一的一個字符組情況下,字符組為當(dāng)前數(shù)據(jù)的標(biāo)識號碼;第二獲取模塊,用于在多個數(shù)據(jù)匹配到唯一的一個字符組的情況下,將字符組中的所有字符進(jìn)行排列組合,以得每一個數(shù)據(jù)所對應(yīng)的字符排序組合,字符排序組合為對應(yīng)數(shù)據(jù)的標(biāo)識號碼。進(jìn)一步地,第三處理模塊包括:第一匹配模塊,用于將第一數(shù)據(jù)哈希值與所有的字符哈希值進(jìn)行匹配,獲取與第一數(shù)據(jù)匹配的字符組為第一字符組,并對第一字符組中所有字符的當(dāng)前排序結(jié)果進(jìn)行標(biāo)記,第一字符組的標(biāo)記賦值為i;第二匹配模塊,用于將第二數(shù)據(jù)哈希值與所有的字符哈希值進(jìn)行匹配,獲取與第二數(shù)據(jù)匹配的字符組為第二字符組,當(dāng)?shù)诙址M與第一字符組相同時,檢測到第一字符的標(biāo)記賦值為i,則對第一字符組的標(biāo)記加1,得到第二數(shù)據(jù)所對應(yīng)的第一字符組的標(biāo)記賦值為i=i+1;第二計算模塊,用于將第一字符組中的所有字符按照ASCII碼值進(jìn)行排序,對排序后的第一字符組中的每個字符依次計算階乘,以獲取階乘結(jié)果;第三獲取模塊,用于采用i對階乘結(jié)果進(jìn)行整除得到整除商,根據(jù)整除商的值將第一字符組中的一個字符刪除,以獲取第二數(shù)據(jù)所對應(yīng)的字符排序組合;循環(huán)執(zhí)行模塊,用于重復(fù)執(zhí)行第二匹配模塊、第二計算模塊以及第三獲取模塊,以得到與第一字符組匹配的所有數(shù)據(jù)的標(biāo)識號碼。進(jìn)一步地,裝置還包括:第四獲取模塊,用于采用i對階乘結(jié)果進(jìn)行整除,將得到的余數(shù)作為第一字符組的新標(biāo)記賦值。通過本申請,采用獲取字符表中的M個字符,并采用哈希算法對由M個字符構(gòu)成的一個或多個字符組進(jìn)行計算,以生成一個或多個字符哈希值;讀取一個或多個數(shù)據(jù),并采用相同的哈希算法對每個數(shù)據(jù)進(jìn)行計算,以生成一個或多個數(shù)據(jù)哈希值;在每個數(shù)據(jù)哈希值分別匹配到一個字符哈希值之后,根據(jù)匹配得到的字符哈希值來獲取每個數(shù)據(jù)的標(biāo)識號碼,上述方案通過在字符表中提取預(yù)定數(shù)目的字符之后,將數(shù)據(jù)與預(yù)定數(shù)目的字符所構(gòu)成的字符組進(jìn)行匹配來得到該數(shù)據(jù)所對應(yīng)的ID值,由于從字符表中提取到的預(yù)定數(shù)目的字符可以構(gòu)成海量的字符組,且字符組的內(nèi)容不會發(fā)生重復(fù),從而解決了在現(xiàn)有技術(shù)對數(shù)據(jù)進(jìn)行處理得到ID的過程中,由于生成的短ID常會發(fā)生重復(fù),導(dǎo)致生成的ID在應(yīng)用領(lǐng)域中的應(yīng)用性能較差的問題,進(jìn)而實現(xiàn)在保證ID長度短的情況下,為海量數(shù)據(jù)生成唯一的ID的效果。附圖說明此處所說明的附圖用來提供對本申請的進(jìn)一步理解,構(gòu)成本申請的一部分,本申請的示意性實施例及其說明用于解釋本申請,并不構(gòu)成對本申請的不當(dāng)限定。在附圖中:圖1是根據(jù)本申請實施例的獲取標(biāo)識號碼的裝置結(jié)構(gòu)示意圖;圖2是根據(jù)本申請實施例的獲取標(biāo)識號碼方法的流程圖;以及圖3是根據(jù)本申請實施例的獲取標(biāo)識號碼方法的詳細(xì)流程圖。具體實施方式需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互組合。下面將參考附圖并結(jié)合實施例來詳細(xì)說明本申請。圖1是根據(jù)本申請實施例的獲取標(biāo)識號碼的裝置結(jié)構(gòu)示意圖。如圖1所示,該獲取標(biāo)識號碼的裝置包括:第一處理模塊10,用于獲取字符表中的M個字符,并采用哈希算法對由M個字符構(gòu)成的一個或多個字符組進(jìn)行計算,以生成一個或多個字符哈希值;第二處理模塊30,用于讀取一個或多個數(shù)據(jù),并采用相同的哈希算法對每個數(shù)據(jù)進(jìn)行計算,以生成一個或多個數(shù)據(jù)哈希值;第三處理模塊50,用于在每個數(shù)據(jù)哈希值分別匹配到一個字符哈希值之后,根據(jù)匹配得到的字符哈希值來獲取每個數(shù)據(jù)的標(biāo)識號碼,該標(biāo)識號碼為當(dāng)前匹配到的字符哈希值所對應(yīng)的字符組合。具體的,可以以標(biāo)準(zhǔn)產(chǎn)品單元SPU和庫存單元SKU為例來說明上述實施例。上述實施例中的字符表可以是由0-9,a-z,A-Z,+和-組成的64位字符表,本申請首先通過第一處理模塊10在從字符表中獲取M個字符,并將M個字符進(jìn)行組合以得到多個字符組,然后采用一致性哈希算法將得到的每一個字符組進(jìn)行哈希計算,得到字符哈希值,即將每一個字符組分散到一個可以包含2的60次方個元素的環(huán)中;同時,通過第二處理模塊30從標(biāo)準(zhǔn)產(chǎn)品單元SPU中讀取一個或多個數(shù)據(jù)(例如商品的規(guī)格屬性組合),并利用第一處理模塊10中使用的一致性哈希算法將讀取到的數(shù)據(jù)進(jìn)行哈希計算,得到數(shù)據(jù)哈希值,由于采用的是相同的一致性哈希算法,因此,每個數(shù)據(jù)哈希值都會得到在環(huán)中地址相同的字符哈希值,即標(biāo)準(zhǔn)產(chǎn)品單元SPU中的每個數(shù)據(jù)也會落到這個環(huán)中,進(jìn)而與環(huán)中的字符組進(jìn)行匹配,得到一個數(shù)據(jù)與一個字符組對應(yīng)關(guān)系的組合,從而可以將當(dāng)前對應(yīng)到的字符組作為數(shù)據(jù)的ID號進(jìn)行保存。由上述實例可知,本申請上述實施例通過在字符表中提取預(yù)定數(shù)目的字符之后,將數(shù)據(jù)與預(yù)定數(shù)目的字符所構(gòu)成的字符組進(jìn)行匹配來得到該數(shù)據(jù)所對應(yīng)的ID值,由于從字符表中提取到的預(yù)定數(shù)目的字符可以構(gòu)成海量的字符組,且字符組的內(nèi)容不會發(fā)生重復(fù),從而解決了在現(xiàn)有技術(shù)對數(shù)據(jù)進(jìn)行處理得到ID的過程中,由于生成的短ID常會發(fā)生重復(fù),導(dǎo)致生成的ID在應(yīng)用領(lǐng)域中的應(yīng)用性能較差的問題,進(jìn)而實現(xiàn)在保證ID長度短的情況下,為海量數(shù)據(jù)生成唯一的ID的效果。具體的,由于上述實施例中M通常取值為10位,因此,得到的ID的長度比較短,只有10位,理論上約可以容納5.5e17數(shù)據(jù),適合海量數(shù)據(jù)的存儲。而且數(shù)據(jù)和ID之間建立了特定關(guān)系(海量數(shù)據(jù)通常都是分布式存儲的,如果數(shù)據(jù)和ID之間沒有任何關(guān)系,根據(jù)數(shù)據(jù)分區(qū)存儲數(shù)據(jù)就做不到根據(jù)ID查數(shù)據(jù),反之亦然),因此可以實現(xiàn)數(shù)據(jù)的分布式存儲。例如,已知從一個字符表中提取了10個字符,并對該10個字符進(jìn)行組合,得到多個字符組,每個字符組中字符不會重復(fù)。在設(shè)置了一個規(guī)格屬性組合之后,可以采用同一個哈希算法分別對每個字符組和每個規(guī)格屬性組合進(jìn)行哈希計算,分別得到每個字符組的哈希值和每個規(guī)格屬性組合的哈希值,由于采用的哈希算法相同,因此,每個規(guī)格屬性組合的哈希值都會對應(yīng)得到地址相同的字符哈希值,即得到當(dāng)前設(shè)置的規(guī)格屬性組合所對應(yīng)的字符組,從而得到該規(guī)格屬性組合對應(yīng)的ID號,該ID號就是匹配到的字符組。此時,如果存在多個規(guī)格屬性組合,就對每個規(guī)格屬性組合進(jìn)行相同的哈希算法,都可以匹配到一個字符組,由于字符組不會重復(fù),因此得到的ID號不會重復(fù)。由于上述實施例可以在ID和數(shù)據(jù)之間建立特定的字符,因此,可以根據(jù)ID計算出該字符,根據(jù)數(shù)據(jù)也可以計算出該字符,可用于分布式存儲和查詢的功能當(dāng)中(如果ID和數(shù)據(jù)沒有特定關(guān)系,根據(jù)ID來分離數(shù)據(jù)就做不到用數(shù)據(jù)來查找ID,反之亦然)。本申請上述實施例中,第一處理模塊10可以包括:第一排序模塊101,用于將字符表中的所有字符按照ASCII碼值進(jìn)行排序,以獲取字符集;組合模塊102,用于在字符集中順序提取M個字符,對排序后的M個字符進(jìn)行順序組合,以獲取一個或多個字符組;保存模塊103,用于將所有的字符組分別保存至對應(yīng)的結(jié)果集中;第一計算模塊104,用于采用哈希算法對每個結(jié)果集中的字符組進(jìn)行計算,生成每個字符組所對應(yīng)的字符哈希值。該實施例對M個字符排序后再對M個字符進(jìn)行順序組合,從而使得到的字符組的查詢效率提高,同時為數(shù)據(jù)匹配過程提供了大量的匹配依據(jù),避免了在保存大量數(shù)據(jù)時會出現(xiàn)不同數(shù)據(jù)對應(yīng)同一個ID號的情況。具體的,該實施例中可以對M字符按照ASCII碼值由大到小或者由小到大的順序進(jìn)行排序。本申請上述實施例中,在通過第二處理模塊30從標(biāo)準(zhǔn)產(chǎn)品單元SPU中讀取一個或多個數(shù)據(jù)(例如商品的規(guī)格屬性組合),并利用第一處理模塊10中使用的一致性哈希算法將讀取到的數(shù)據(jù)進(jìn)行哈希計算,得到數(shù)據(jù)哈希值之后,第三處理模塊50可以包括:匹配處理模塊501,用于在每個數(shù)據(jù)哈希值分別與所有的字符哈希值進(jìn)行匹配之后,依次得到每個數(shù)據(jù)所對應(yīng)的字符組,其中,一個數(shù)據(jù)對應(yīng)一個字符組,一個字符組對應(yīng)一個或多個數(shù)據(jù);第一獲取模塊502,用于在一個數(shù)據(jù)匹配到唯一的一個字符組情況下,字符組為當(dāng)前數(shù)據(jù)的標(biāo)識號碼;第二獲取模塊503,用于在多個數(shù)據(jù)匹配到唯一的一個字符組的情況下,將字符組中的所有字符進(jìn)行排列組合,以得到每一個數(shù)據(jù)所對應(yīng)的字符排序組合,字符排序組合為對應(yīng)數(shù)據(jù)的標(biāo)識號碼。本申請上述實施例實現(xiàn)了在ID出現(xiàn)重復(fù)的情況下,通過將字符組中的字符進(jìn)行排列組合,得到海量的字符排列組合,使得每個數(shù)據(jù)所對應(yīng)的標(biāo)識號碼都是唯一的,且長度不會變長。優(yōu)選地,上述第三處理模塊50實施過程中,具體可以包括:第一匹配模塊,用于將第一數(shù)據(jù)哈希值與所有的字符哈希值進(jìn)行匹配,獲取與第一數(shù)據(jù)匹配的字符組為第一字符組,并對第一字符組中所有字符的當(dāng)前排序結(jié)果進(jìn)行標(biāo)記,標(biāo)記賦值為i;第二匹配模塊,用于將第二數(shù)據(jù)哈希值與所有的字符哈希值進(jìn)行匹配,獲取與第二數(shù)據(jù)匹配的字符組為第二字符組,當(dāng)?shù)诙址M與第一字符組相同時,即第二數(shù)據(jù)匹配到的字符組與第一數(shù)據(jù)匹配到的字符組相同,此時可以檢測到第一字符組的標(biāo)記已經(jīng)賦值為i,則對第一字符組的標(biāo)記加1,得到第二數(shù)據(jù)所對應(yīng)的第一字符組的標(biāo)記賦值為i=i+1;第二計算模塊,用于將第一字符組中的所有字符按照ASCII碼值進(jìn)行排序,對排序后的第一字符組中的每個字符依次計算階乘,以獲取階乘結(jié)果;第三獲取模塊,用于采用i對階乘結(jié)果進(jìn)行整除得到整除商,根據(jù)整除商的值將第一字符組中的一個字符刪除,以獲取第二數(shù)據(jù)所對應(yīng)的字符排序組合;循環(huán)執(zhí)行模塊,用于重復(fù)執(zhí)行第二匹配模塊、第二計算模塊以及第三獲取模塊,從而得到與第一字符組匹配的所有數(shù)據(jù)的標(biāo)識號碼。其中,上述裝置實施例還可以包括:第四獲取模塊,用于采用i對階乘結(jié)果進(jìn)行整除,將得到的余數(shù)作為第一字符組的新標(biāo)記的賦值。上述實施例實現(xiàn)了,在檢測到多個數(shù)據(jù)匹配到同一個字符組的情況下,采用排列組合的方式對該字符組中的所有字符進(jìn)行處理,得到了次方數(shù)量級的字符排列組合,使得在多個數(shù)據(jù)對應(yīng)同一個字符組時,可以依據(jù)數(shù)據(jù)的匹配順序得到不同的字符排列組合,避免了由于HASH算法存在重復(fù)的概率,導(dǎo)致在保存大量數(shù)據(jù)時會出現(xiàn)不同數(shù)據(jù)對應(yīng)同一個ID號的情況,保證了數(shù)據(jù)和ID之間對應(yīng)關(guān)系的唯一性,提高了ID在應(yīng)用領(lǐng)域中的應(yīng)用性能。由上可知,本申請上述實施例的ID和數(shù)據(jù)之間建立了特定關(guān)系,即數(shù)據(jù)生成ID的方案可以由數(shù)據(jù)得到一個字符組合,而ID的字符排列也可以得到一個字符組合,這兩個字符組合相同,所以ID和數(shù)據(jù)之間建立了特定關(guān)系,便于實現(xiàn)數(shù)據(jù)的分布式存儲。圖2是根據(jù)本申請實施例的獲取標(biāo)識號碼的方法的流程圖;圖3是根據(jù)本申請實施例的獲取標(biāo)識號碼方法的詳細(xì)流程圖。如圖2所示該方法包括如下步驟:步驟S102,通過圖1中的第一處理模塊10來獲取字符表中的M個字符,并采用哈希算法對由M個字符構(gòu)成的一個或多個字符組進(jìn)行計算,以生成一個或多個字符哈希值。步驟S104,通過圖1中的第二處理模塊30來讀取一個或多個數(shù)據(jù),并采用相同的哈希算法對每個數(shù)據(jù)進(jìn)行計算,以生成一個或多個數(shù)據(jù)哈希值。步驟S106,通過圖1中的第三處理模塊50來執(zhí)行在每個數(shù)據(jù)哈希值分別匹配到一個字符哈希值之后,根據(jù)匹配得到的字符哈希值來獲取每個數(shù)據(jù)的標(biāo)識號碼。本申請上述實施例通過在字符表中提取預(yù)定數(shù)目的字符之后,將數(shù)據(jù)與預(yù)定數(shù)目的字符所構(gòu)成的字符組進(jìn)行匹配來得到該數(shù)據(jù)所對應(yīng)的ID值,由于從字符表中提取到的預(yù)定數(shù)目的字符可以構(gòu)成海量的字符組,且字符組的內(nèi)容不會發(fā)生重復(fù),從而解決了在現(xiàn)有技術(shù)對數(shù)據(jù)進(jìn)行處理得到ID的過程中,由于生成的短ID常會發(fā)生重復(fù),導(dǎo)致生成的ID在應(yīng)用領(lǐng)域中的應(yīng)用性能較差的問題,進(jìn)而實現(xiàn)在保證ID長度短的情況下,為海量數(shù)據(jù)生成唯一的ID的效果。具體的,本申請上述實施例中的字符表可以由0-9,a-z,A-Z,+和-組成64位字符表,并設(shè)置M值為10位,即從字符表中獲取10個字符進(jìn)行組合,得到多個字符組,本實施例中可以采用一致性哈希算法將得到的每一個字符組分散到一個可以包含2的60次方個元素的環(huán)中,同時對已有的數(shù)據(jù)也利用上述一致性哈希HASH算法將每個數(shù)據(jù)也落到這個環(huán)中,并與環(huán)中的字符組進(jìn)行匹配,得到一個數(shù)據(jù)與一個字符組對應(yīng)關(guān)系的組合,從而可以將當(dāng)前對應(yīng)到的字符組作為數(shù)據(jù)的ID號進(jìn)行保存。其中,本申請上述實施例中的數(shù)據(jù)可以是商品的所有規(guī)格屬性。本申請上述實施例中,獲取字符表中的M個字符,并采用哈希算法對由M個字符構(gòu)成的一個或多個字符組進(jìn)行計算,以生成一個或多個字符哈希值的步驟可以包括:將字符表中的所有字符按照ASCII碼值進(jìn)行排序,以獲取字符集;在字符集中順序提取M個字符,對排序后的M個字符進(jìn)行順序組合,以獲取一個或多個字符組;將所有的字符組分別保存至對應(yīng)的結(jié)果集中;采用哈希算法對每個結(jié)果集中的字符組進(jìn)行計算,生成每個字符組所對應(yīng)的字符哈希值。由于對M個字符進(jìn)行順序組合,為數(shù)據(jù)匹配過程提供了大量的匹配依據(jù),從而避免了在保存大量數(shù)據(jù)時會出現(xiàn)不同數(shù)據(jù)對應(yīng)同一個ID號的情況,同時使得字符組的查詢效率提高。具體的,上述實施例為生成所有字符組的算法,可以包括如下步驟:首先,當(dāng)前字符表一共包括有N個字符,可以將字符表中的字符按照ASCII碼從小到大排序得到當(dāng)前字符集,預(yù)設(shè)所要生成的字符組中的字符數(shù)目為M個字符。然后,從字符表中選取ASCII碼值最大的字符,然后在剩下的N-1個字符里選取第M-1個字符,直到從N-(M-1)個數(shù)中選取第1個字符為止,由此得到一個字符組,并將該字符組保存在結(jié)果集中。最后,從N個數(shù)中選取編號次小的一個數(shù),繼續(xù)執(zhí)行上一步,直到當(dāng)前字符組可選的最后一個字符為第M個字符的情況下,得到了所有的字符組。例如以一個包括了“a”、“b”、“c”三個字符的字符表為例,在M為2的情況下執(zhí)行上述步驟,則可以生成多個包括有2個字符的字符組,字符組可以為:“ab”、“bc”、“ca”。本申請上述實施例中,在每個數(shù)據(jù)哈希值分別匹配到一個字符哈希值之后,根據(jù)匹配得到的字符哈希值來獲取每個數(shù)據(jù)的標(biāo)識號碼可以包括:在每個數(shù)據(jù)哈希值分別與所有的字符哈希值進(jìn)行匹配之后,依次得到每個數(shù)據(jù)所對應(yīng)的字符組,其中,一個數(shù)據(jù)對應(yīng)一個字符組,一個字符組對應(yīng)一個或多個數(shù)據(jù);其中,在一個數(shù)據(jù)匹配到唯一的一個字符組情況下,字符組為當(dāng)前數(shù)據(jù)的標(biāo)識號碼;在多個數(shù)據(jù)匹配到唯一的一個字符組的情況下,將字符組中的所有字符進(jìn)行排列組合,以得每一個數(shù)據(jù)所對應(yīng)的字符排序組合,字符排序組合為對應(yīng)數(shù)據(jù)的標(biāo)識號碼。上述實施例實現(xiàn)了,當(dāng)有多個數(shù)據(jù)匹配到相同的一個字符組時,可以提供在不改變標(biāo)志號碼長度的情況下通過排列組合仍然生成唯一的ID,使得在保證短ID的情況下,每個數(shù)據(jù)所對應(yīng)的標(biāo)識號碼仍舊都是唯一的。具體的,本申請上述實施例仍舊以包括0-9,a-z,A-Z,+和-組成的64位字符表為例進(jìn)行描述,其中,設(shè)置M值為10位,可以采用一致性哈希算法將得到的每一個字符組分散到一個可以包含2的60次方個元素的環(huán)中,即可以把環(huán)分成10段,每段屬于一個字符組,同時對已有的數(shù)據(jù)也利用上述一致性哈希HASH算法將每個數(shù)據(jù)也落到這個環(huán)中,并與環(huán)中的字符組進(jìn)行匹配,得到一個數(shù)據(jù)與一個字符組對應(yīng)關(guān)系的組合。在完成得到一個數(shù)據(jù)與一個字符組對應(yīng)關(guān)系的組合之后,由于一個數(shù)據(jù)可以對應(yīng)一個字符組,但一個字符組也可以對應(yīng)一個或多個數(shù)據(jù),在一個字符組對應(yīng)了多個數(shù)據(jù)的情況下,通過本實施例提供的采用標(biāo)記賦值的方式來區(qū)分每個數(shù)據(jù)對應(yīng)的字符組的實際內(nèi)容,即利用字符組中字符串可以有不同的排列順序來分別得到每個數(shù)據(jù)所對應(yīng)的字符串,即每個數(shù)據(jù)對應(yīng)得到的字符組中的字符排列順序并不相同,由于數(shù)據(jù)所匹配的字符組就是該數(shù)據(jù)的標(biāo)識號碼,從而避免了兩個數(shù)據(jù)的標(biāo)識號碼相同的情況,一個數(shù)據(jù)得到唯一的ID。上述實例中的標(biāo)記賦值的方式可以理解為當(dāng)?shù)谝粋€數(shù)據(jù)匹配到當(dāng)前字符組時,可以對當(dāng)前第一數(shù)據(jù)對應(yīng)的字符組的標(biāo)記給予編號1,在當(dāng)?shù)诙€數(shù)據(jù)也匹配到該字符組時,將第二個數(shù)據(jù)對應(yīng)的字符組的標(biāo)記給予一個新的編號,該新的編號就在原來編號基礎(chǔ)上+1。即在數(shù)據(jù)根據(jù)哈希算法計算后也分配到字符進(jìn)行哈希算法得到的環(huán)中之后,如果這個數(shù)據(jù)是第一個分配到那個段上的則給對應(yīng)的標(biāo)記賦值為1,如果是第二個那么標(biāo)記賦值為2,其他以此類推,來根據(jù)標(biāo)記賦值來確定當(dāng)前數(shù)據(jù)所對應(yīng)的字符組中的所有字符的排列順序,該字符的排列就是當(dāng)前數(shù)據(jù)對應(yīng)的唯一ID。本申請上述實施例中,將每個數(shù)據(jù)哈希值與所有的字符哈希值進(jìn)行匹配,依次得到每個數(shù)據(jù)所對應(yīng)的字符組,在多個數(shù)據(jù)匹配到唯一的一個字符組的情況下,將字符組中的所有字符進(jìn)行排列組合,以得每一個數(shù)據(jù)所對應(yīng)的字符排序組合,字符排序組合為對應(yīng)數(shù)據(jù)的標(biāo)識號碼的步驟包括:步驟A,將第一數(shù)據(jù)哈希值與所有的字符哈希值進(jìn)行匹配,獲取與第一數(shù)據(jù)匹配的字符組為第一字符組,并對第一字符組中所有字符的當(dāng)前排序結(jié)果進(jìn)行標(biāo)記,標(biāo)記賦值為i;步驟B,將第二數(shù)據(jù)哈希值與所有的字符哈希值進(jìn)行匹配,獲取與第二數(shù)據(jù)匹配的字符組為第二字符組,當(dāng)?shù)诙址M與第一字符組相同時,檢測到第一字符的標(biāo)記賦值為i,則對第一字符組的標(biāo)記加1,得到第二數(shù)據(jù)所對應(yīng)的第一字符組的標(biāo)記賦值為i=i+1;步驟C,將第一字符組中的所有字符按照ASCII碼值進(jìn)行排序,對排序后的第一字符組中的每個字符依次計算階乘,以獲取階乘結(jié)果;步驟D,采用i對階乘結(jié)果進(jìn)行整除得到整除商,根據(jù)整除商的值將第一字符組中的一個字符刪除,以獲取第二數(shù)據(jù)所對應(yīng)的字符排序組合;步驟E,重復(fù)執(zhí)行步驟B至步驟D,得到與第一字符組匹配的所有數(shù)據(jù)的標(biāo)識號碼。優(yōu)選地,在步驟C之后,方法還可以包括:采用i對階乘結(jié)果進(jìn)行整除,將得到的余數(shù)作為第一字符組的新標(biāo)記的賦值。具體的,本申請上述實施例中的字符組的標(biāo)記賦值會根據(jù)當(dāng)前的標(biāo)記賦值變化,即在當(dāng)前數(shù)據(jù)匹配到當(dāng)前字符組時,會檢測當(dāng)前字符組是否已經(jīng)與其他的數(shù)據(jù)匹配成功,如果標(biāo)記賦值大于1則確定已經(jīng)有其他數(shù)據(jù)與該字符組匹配,則對當(dāng)前的標(biāo)記賦值增加1,同時根據(jù)標(biāo)記賦值的具體值來獲取當(dāng)前字符組中字符構(gòu)成的排列組合,例如,標(biāo)記賦值為1時,取當(dāng)前字符組的第一個字符排列組合作為當(dāng)前數(shù)據(jù)對應(yīng)的字符排列組合,標(biāo)記賦值為2時,取當(dāng)前字符組的第二個字符排列組合作為當(dāng)前數(shù)據(jù)對應(yīng)的字符排列組合,依次類推得到所有數(shù)據(jù)的ID號,且得到的ID號不會重復(fù),本申請實施例中的標(biāo)記賦值主要用于表征當(dāng)前數(shù)據(jù)匹配的字符組中的字符排列組合的編號。如圖3所示,上述實施例具體實現(xiàn)步驟如下:步驟S201,將包括了M個字符的字符組的字符集合按照ASCII碼從小到大進(jìn)行排序,獲取得到當(dāng)前數(shù)據(jù)對應(yīng)的字符組set,并將當(dāng)前數(shù)據(jù)所對應(yīng)的字符組的標(biāo)記賦值為n。步驟S202,從當(dāng)前字符組set依次取得一個字符,計算它的階乘(如果是第一個那么階乘就是(m-1)階乘,其他類推)。步驟S203,用標(biāo)記賦值n除以步驟S202中取得的階乘,得到一個整數(shù)商,這個整數(shù)商如果是k就從當(dāng)前字符組set取第k個字符放到結(jié)果字符集中,其他類推。步驟S204,用標(biāo)記賦值n除以步驟S202取得的階乘得到一個余數(shù),這個余數(shù)為當(dāng)前數(shù)據(jù)對應(yīng)的新標(biāo)記賦值。步驟S205,從當(dāng)前字符組中去掉步驟S203計算所得的字符。步驟S206,判斷當(dāng)前字符組中的字符是否處理完畢,在處理完畢的情況下,執(zhí)行步驟S207,否則,重復(fù)執(zhí)行步驟S202至步驟S205,直到字符組中的所有字符處理完畢,以獲取當(dāng)前數(shù)據(jù)對應(yīng)的結(jié)果字符集,所得的結(jié)果字符集就是該數(shù)據(jù)的字符排序組合。步驟S207,判斷標(biāo)記賦值是否大于1,在檢測到數(shù)據(jù)所對應(yīng)的字符組的標(biāo)記賦值n大于1的情況下,返回重復(fù)執(zhí)行步驟S201至步驟S206,直到所有數(shù)據(jù)對應(yīng)的字符組都處理完畢。步驟S208,獲取所有數(shù)據(jù)所對應(yīng)的字符排序組合。上述實施例對數(shù)據(jù)進(jìn)行處理生成ID的方案可以由數(shù)據(jù)得到一個字符組,而ID中字符的排列也可以得到一個字符組,兩個字符組相同,所以ID和數(shù)據(jù)之間建立了特定關(guān)系。本申請上述實施例中所利用的哈希HASH算法可以利用MD5(MessageDigestAlgorithmMD5,中文名為消息摘要算法第五版),根據(jù)已知的鍵值生成128位數(shù)據(jù),取前60位轉(zhuǎn)成整數(shù)就是HASH值,也可以取后60位進(jìn)行轉(zhuǎn)換,只要算法固定即可。通常情況下優(yōu)選采用一致性哈希算法實現(xiàn),具體是對已知的鍵值根據(jù)HASH算法計算得到HASH值,計算的HASH值做為位置編號映射到一個可以包含2的60次個元素的環(huán)中,該位置保存的就是已知的鍵值。需要說明的是,在附圖的流程圖示出的步驟可以在諸如一組計算機可執(zhí)行指令的計算機系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。從以上的描述中,可以看出,本申請實現(xiàn)了如下技術(shù)效果:根據(jù)字符集得到數(shù)據(jù)對應(yīng)的唯一的ID,當(dāng)ID的長度是10位時,理論上可以保存5.5e17數(shù)據(jù),適合海量數(shù)據(jù)的存儲。由于在ID和數(shù)據(jù)之間建立了特定的字符,根據(jù)ID可計算出該字符,根據(jù)數(shù)據(jù)也可以計算出該字符,因此得到的ID值可用于分布式存儲和查詢(如果ID和數(shù)據(jù)沒有特定關(guān)系,根據(jù)ID來分離數(shù)據(jù)就做不到用數(shù)據(jù)來查找ID,反之亦然)。顯然,本領(lǐng)域的技術(shù)人員應(yīng)該明白,上述的本申請的各模塊或各步驟可以用通用的計算裝置來實現(xiàn),它們可以集中在單個的計算裝置上,或者分布在多個計算裝置所組成的網(wǎng)絡(luò)上,可選地,它們可以用計算裝置可執(zhí)行的程序代碼來實現(xiàn),從而,可以將它們存儲在存儲裝置中由計算裝置來執(zhí)行,或者將它們分別制作成各個集成電路模塊,或者將它們中的多個模塊或步驟制作成單個集成電路模塊來實現(xiàn)。這樣,本申請不限制于任何特定的硬件和軟件結(jié)合。以上所述僅為本申請的優(yōu)選實施例而已,并不用于限制本申請,對于本領(lǐng)域的技術(shù)人員來說,本申請可以有各種更改和變化。凡在本申請的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請的保護(hù)范圍之內(nèi)。
當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1