本公開(kāi)涉及分布式系統(tǒng)領(lǐng)域,尤其涉及一種訪問(wèn)用戶數(shù)據(jù)的方法和裝置。
背景技術(shù):
分布式系統(tǒng)(distributed system)是建立在網(wǎng)絡(luò)之上的軟件系統(tǒng),是將系統(tǒng)的應(yīng)用層、數(shù)據(jù)層或其它部分構(gòu)架成分布(物理和邏輯上的都可以)狀(通常是網(wǎng)狀)。構(gòu)建分布式系統(tǒng)通常是為了增強(qiáng)系統(tǒng)的可擴(kuò)展性、穩(wěn)定性和執(zhí)行效率。比如在線游戲通常就是分布式系統(tǒng)。分布式數(shù)據(jù)庫(kù)也可以稱作分布式系統(tǒng)。
隨著移動(dòng)互聯(lián)網(wǎng)的高速發(fā)展,電子商務(wù)的需求日益增加,越來(lái)越多的人選擇使用電商平臺(tái)購(gòu)買商品和服務(wù)。隨著業(yè)務(wù)的復(fù)雜度日益提高,很多電商平臺(tái)提供的商品日益增多。電商系統(tǒng)需要引入分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)來(lái)應(yīng)對(duì)日益增加的數(shù)據(jù)處理需求。
技術(shù)實(shí)現(xiàn)要素:
為克服相關(guān)技術(shù)中存在的問(wèn)題,本公開(kāi)提供一種訪問(wèn)用戶數(shù)據(jù)的方法和裝置。
根據(jù)本公開(kāi)實(shí)施例的第一方面,提供一種訪問(wèn)用戶數(shù)據(jù)的方法,應(yīng)用于分布式系統(tǒng),所述分布式系統(tǒng)包括多個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)中存儲(chǔ)的用戶數(shù)據(jù)所對(duì)應(yīng)的用戶的身份標(biāo)識(shí)號(hào)碼連續(xù)。所述方法包括:接收訪問(wèn)指令,所述訪問(wèn)指令用于指示訪問(wèn)身份標(biāo)識(shí)號(hào)碼為從N到M的用戶的用戶數(shù)據(jù);響應(yīng)于所述訪問(wèn)指令,確定存儲(chǔ)有身份標(biāo)識(shí)號(hào)碼為N的用戶的用戶數(shù)據(jù)的第一節(jié)點(diǎn);確定所述第一節(jié)點(diǎn)中所存儲(chǔ)的用戶的身份標(biāo)識(shí)號(hào)碼的最大值X;根據(jù)X來(lái)訪問(wèn)身份標(biāo)識(shí)號(hào)碼為從N到M的用戶的用戶數(shù)據(jù)。
可選地,所述響應(yīng)于所述訪問(wèn)指令,確定存儲(chǔ)有身份標(biāo)識(shí)號(hào)碼為N的用戶的用戶數(shù)據(jù)的第一節(jié)點(diǎn)的步驟包括:響應(yīng)于所述訪問(wèn)指令,確定身份標(biāo)識(shí)號(hào)碼為N的用戶的用戶數(shù)據(jù)所在的二級(jí)索引;根據(jù)身份標(biāo)識(shí)號(hào)碼為N的用戶的用戶數(shù)據(jù)所在的二級(jí)索引,確定存儲(chǔ)有身份標(biāo)識(shí)號(hào)碼為N的用戶的用戶數(shù)據(jù)的第一節(jié)點(diǎn)。
可選地,所述響應(yīng)于所述訪問(wèn)指令,確定身份標(biāo)識(shí)號(hào)碼為N的用戶的用戶數(shù)據(jù)所在的二級(jí)索引的步驟包括:響應(yīng)于所述訪問(wèn)指令,根據(jù)哈希散列函數(shù)確定身份標(biāo)識(shí)號(hào)碼為N的用戶的用戶數(shù)據(jù)所在的二級(jí)索引。
可選地,所述根據(jù)X來(lái)訪問(wèn)身份標(biāo)識(shí)號(hào)碼為從N到M的用戶的用戶數(shù)據(jù)的步驟包括:當(dāng)X大于或等于M時(shí),在所述第一節(jié)點(diǎn)中順序訪問(wèn)身份標(biāo)識(shí)號(hào)碼為從N到M的用戶的用戶數(shù)據(jù)。
可選地,所述根據(jù)X來(lái)訪問(wèn)身份標(biāo)識(shí)號(hào)碼為從N到M的用戶的用戶數(shù)據(jù)的步驟包括:當(dāng)X小于M時(shí),在所述第一節(jié)點(diǎn)中順序訪問(wèn)身份標(biāo)識(shí)號(hào)碼為從N到X的用戶的用戶數(shù)據(jù);確定存儲(chǔ)有身份標(biāo)識(shí)號(hào)碼為X+1的用戶的用戶數(shù)據(jù)的第二節(jié)點(diǎn);確定所述第二節(jié)點(diǎn)中所存儲(chǔ)的用戶的身份標(biāo)識(shí)號(hào)碼的最大值Y;當(dāng)Y大于或等于M時(shí),在所述第二節(jié)點(diǎn)中順序訪問(wèn)身份標(biāo)識(shí)號(hào)碼從X+1到M的用戶的用戶數(shù)據(jù);當(dāng)Y小于M時(shí),在所述第二節(jié)點(diǎn)中順序訪問(wèn)身份標(biāo)識(shí)號(hào)碼為從X+1到Y(jié)的用戶的用戶數(shù)據(jù),并確定存儲(chǔ)有身份標(biāo)識(shí)號(hào)碼為Y+1的用戶的用戶數(shù)據(jù)的第三節(jié)點(diǎn),直至身份標(biāo)識(shí)號(hào)碼為從N到M的用戶的用戶數(shù)據(jù)全部訪問(wèn)完畢為止。
根據(jù)本公開(kāi)實(shí)施例的第二方面,提供一種訪問(wèn)用戶數(shù)據(jù)的裝置,應(yīng)用于分布式系統(tǒng),所述分布式系統(tǒng)包括多個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)中存儲(chǔ)的用戶數(shù)據(jù)所對(duì)應(yīng)的用戶的身份標(biāo)識(shí)號(hào)碼連續(xù)。所述裝置包括:接收模塊,用于接收訪問(wèn)指令,所述訪問(wèn)指令用于指示訪問(wèn)身份標(biāo)識(shí)號(hào)碼為從N到M的用戶的用戶數(shù)據(jù);節(jié)點(diǎn)確定模塊,用于響應(yīng)于所述訪問(wèn)指令,確定存儲(chǔ)有身份標(biāo)識(shí)號(hào)碼為N的用戶的用戶數(shù)據(jù)的第一節(jié)點(diǎn);最大值確定模塊,用于確定所述第一節(jié)點(diǎn)中所存儲(chǔ)的用戶的身份標(biāo)識(shí)號(hào)碼的最大值X;訪問(wèn)模塊,用于根據(jù)X來(lái)訪問(wèn)身份標(biāo)識(shí)號(hào)碼為從N到M的用戶的用戶數(shù)據(jù)。
本公開(kāi)的實(shí)施例提供的技術(shù)方案可以包括以下有益效果:
在分布式系統(tǒng)的每個(gè)節(jié)點(diǎn)中存儲(chǔ)的用戶數(shù)據(jù),其對(duì)應(yīng)的用戶的身份標(biāo)識(shí)號(hào)碼都連續(xù),并且需要順序訪問(wèn)身份標(biāo)識(shí)號(hào)碼為從N到M的用戶的用戶數(shù)據(jù)的情況下,先查找到身份標(biāo)識(shí)號(hào)碼為N的用戶的用戶數(shù)據(jù)所在的節(jié)點(diǎn)。這樣,根據(jù)所查找到的節(jié)點(diǎn)其存儲(chǔ)的用戶的身份標(biāo)識(shí)號(hào)碼的最大值X,能夠確定一部分用戶數(shù)據(jù)(因?yàn)槠渖矸輼?biāo)識(shí)號(hào)碼連續(xù))存儲(chǔ)在所查找到的節(jié)點(diǎn)中。因此,減少了需要查找其用戶數(shù)據(jù)所存儲(chǔ)的節(jié)點(diǎn)的用戶的數(shù)量,從而加快了用戶數(shù)據(jù)的訪問(wèn)速度。
應(yīng)當(dāng)理解的是,以上的一般描述和后文的細(xì)節(jié)描述僅是示例性和解釋性的,并不能限制本公開(kāi)。
附圖說(shuō)明
此處的附圖被并入說(shuō)明書中并構(gòu)成本說(shuō)明書的一部分,示出了符合本公開(kāi)的實(shí)施例,并與說(shuō)明書一起用于解釋本公開(kāi)的原理。
圖1是根據(jù)一示例性實(shí)施例示出的一種訪問(wèn)用戶數(shù)據(jù)的方法的流程圖;
圖2是根據(jù)另一示例性實(shí)施例示出的一種訪問(wèn)用戶數(shù)據(jù)的方法的流程圖;
圖3是根據(jù)又一示例性實(shí)施例示出的一種訪問(wèn)用戶數(shù)據(jù)的方法的流程圖;
圖4是根據(jù)又一示例性實(shí)施例示出的一種訪問(wèn)用戶數(shù)據(jù)的方法的流程圖;
圖5是根據(jù)又一示例性實(shí)施例示出的一種訪問(wèn)用戶數(shù)據(jù)的方法的流程圖;
圖6是根據(jù)一示例性實(shí)施例示出的一種訪問(wèn)用戶數(shù)據(jù)的裝置的框圖;
圖7是根據(jù)另一示例性實(shí)施例示出的一種訪問(wèn)用戶數(shù)據(jù)的裝置的框圖;
圖8是根據(jù)又一示例性實(shí)施例示出的一種訪問(wèn)用戶數(shù)據(jù)的裝置的框圖;
圖9是根據(jù)又一示例性實(shí)施例示出的一種訪問(wèn)用戶數(shù)據(jù)的裝置的框圖;
圖10是根據(jù)又一示例性實(shí)施例示出的一種訪問(wèn)用戶數(shù)據(jù)的裝置的框圖;
圖11是根據(jù)一示例性實(shí)施例示出的一種訪問(wèn)用戶數(shù)據(jù)的裝置的框圖;
圖12是根據(jù)一示例性實(shí)施例示出的一種訪問(wèn)用戶數(shù)據(jù)的裝置的框圖。
具體實(shí)施方式
這里將詳細(xì)地對(duì)示例性實(shí)施例進(jìn)行說(shuō)明,其示例表示在附圖中。下面的描述涉及附圖時(shí),除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實(shí)施例中所描述的實(shí)施方式并不代表與本公開(kāi)相一致的所有實(shí)施方式。相反,它們僅是與如所附權(quán)利要求書中所詳述的、本公開(kāi)的一些方面相一致的裝置和方法的例子。
分布式系統(tǒng)通常包括多個(gè)節(jié)點(diǎn)。以電商類分布式存儲(chǔ)系統(tǒng)為例,每個(gè)節(jié)點(diǎn)可以為一個(gè)存儲(chǔ)服務(wù)器。不論實(shí)際存儲(chǔ)服務(wù)器有多少,單個(gè)用戶的數(shù)據(jù)通常存儲(chǔ)在同一臺(tái)服務(wù)器上。數(shù)據(jù)分配方法通?;诠I⒘?,不同的電商可以采用不同的哈希散列函數(shù)。例如用戶的身份標(biāo)識(shí)(Identification,ID)號(hào)碼為123的用戶,通過(guò)對(duì)ID的散列計(jì)算,獲得鍵值為2,那么此用戶的用戶數(shù)據(jù)就存在2號(hào)服務(wù)器上。
數(shù)據(jù)哈希散列破壞了數(shù)據(jù)的有序性,基于哈希散列的數(shù)據(jù),對(duì)順序掃描并不能有效地支持,而對(duì)隨機(jī)訪問(wèn)操作的支持較好。例如需要掃描ID為1至1000的所有用戶的某個(gè)域的值,那么對(duì)于每個(gè)用戶,都需要計(jì)算確定出其用戶數(shù)據(jù)所存儲(chǔ)的節(jié)點(diǎn),然后根據(jù)計(jì)算結(jié)果,在所確定的節(jié)點(diǎn)中訪問(wèn)數(shù)據(jù)。因此,在順序掃描數(shù)據(jù)的場(chǎng)景中,根據(jù)相關(guān)技術(shù),并不會(huì)因?yàn)閿?shù)據(jù)的有序性而有更高的訪問(wèn)效率。
鑒于此,發(fā)明人想到,如果系統(tǒng)對(duì)于順序訪問(wèn)數(shù)據(jù)的需求比較大,那么訪問(wèn)處理的速度還存在一定的改進(jìn)空間。本公開(kāi)的方法適用于每個(gè)節(jié)點(diǎn)中存儲(chǔ)的用戶數(shù)據(jù)所對(duì)應(yīng)的用戶的身份標(biāo)識(shí)號(hào)碼連續(xù)的情況。例如,分布式系統(tǒng)包括多個(gè)節(jié)點(diǎn),1號(hào)節(jié)點(diǎn)存儲(chǔ)有ID號(hào)碼為從1到1000的用戶的用戶數(shù)據(jù),2號(hào)節(jié)點(diǎn)存儲(chǔ)有ID號(hào)碼為從1001到2000的用戶的用戶數(shù)據(jù),以此類推。
圖1是根據(jù)一示例性實(shí)施例示出的一種訪問(wèn)用戶數(shù)據(jù)的方法的流程圖。所述方法應(yīng)用于分布式系統(tǒng),所述分布式系統(tǒng)包括多個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)中存儲(chǔ)的用戶數(shù)據(jù)所對(duì)應(yīng)的用戶的身份標(biāo)識(shí)號(hào)碼連續(xù)。如圖1所示,所述方法可以包括以下步驟。
在步驟S11中,接收訪問(wèn)指令,所述訪問(wèn)指令用于指示訪問(wèn)身份標(biāo)識(shí)號(hào)碼為從N到M的用戶的用戶數(shù)據(jù)。
如上所述,本公開(kāi)的方法適用于需要按照用戶的ID號(hào)碼順序訪問(wèn)的情況。其中,N和M都是正整數(shù),且M大于N。例如,N=1,M=4000,表示需要順序訪問(wèn)ID號(hào)碼為1-4000的用戶的用戶數(shù)據(jù)。
在步驟S12中,響應(yīng)于訪問(wèn)指令,確定存儲(chǔ)有身份標(biāo)識(shí)號(hào)碼為N的用戶的用戶數(shù)據(jù)的第一節(jié)點(diǎn)。
也就是,確定訪問(wèn)指令所指示的ID號(hào)碼中,ID號(hào)碼數(shù)值最小的用戶的用戶數(shù)據(jù)所存儲(chǔ)的節(jié)點(diǎn),并將該節(jié)點(diǎn)確定為第一節(jié)點(diǎn)。在相關(guān)技術(shù)中,查找某一個(gè)ID的用戶數(shù)據(jù)所在的節(jié)點(diǎn),可以通過(guò)多種方法來(lái)實(shí)現(xiàn)。例如,通過(guò)哈希散列的方法。由于每個(gè)節(jié)點(diǎn)中存儲(chǔ)的ID都是連續(xù)的,因此,在找到該第一節(jié)點(diǎn)后,如果N不是該第一節(jié)點(diǎn)中存儲(chǔ)的最后一個(gè)ID,則該第一節(jié)點(diǎn)中還存儲(chǔ)有與N后向連續(xù)的一個(gè)或多個(gè)ID的用戶數(shù)據(jù),而其中至少有一部分是訪問(wèn)指令中所指示訪問(wèn)的(ID在N-M之間的)用戶數(shù)據(jù)。那么,這一部分ID就不需要再用常規(guī)方法來(lái)查找它們存儲(chǔ)在哪個(gè)節(jié)點(diǎn)中了。
在步驟S13中,確定所述第一節(jié)點(diǎn)中所存儲(chǔ)的用戶的身份標(biāo)識(shí)號(hào)碼的最大值X。
一節(jié)點(diǎn)中存儲(chǔ)有哪些ID的用戶數(shù)據(jù),在數(shù)據(jù)存儲(chǔ)的時(shí)候就可以被記錄來(lái)下。因此,當(dāng)確定了一節(jié)點(diǎn)后,該節(jié)點(diǎn)中存儲(chǔ)的用戶ID的最大值可以很容易地獲得。
在步驟S14中,根據(jù)X來(lái)訪問(wèn)身份標(biāo)識(shí)號(hào)碼為從N到M的用戶的用戶數(shù)據(jù)。
由上所述,根據(jù)第一節(jié)點(diǎn)中存儲(chǔ)的用戶ID的最大值X,可以確定從N到M的ID號(hào)碼的用戶數(shù)據(jù)是否全部存儲(chǔ)在第一節(jié)點(diǎn)中,或者,可以確定從N到M中有多少個(gè)ID號(hào)碼的用戶數(shù)據(jù)存儲(chǔ)在第一節(jié)點(diǎn)中,進(jìn)而確定還有多少未存儲(chǔ)在第一節(jié)點(diǎn)中的ID的用戶數(shù)據(jù)需要查找。其中,除去N之外,從N+1到X的ID號(hào)碼的用戶數(shù)據(jù),就可以直接在第一節(jié)點(diǎn)中訪問(wèn),而不需要再利用常規(guī)的查找方法來(lái)查找其所在的節(jié)點(diǎn)位置了。
通過(guò)以上技術(shù)方案,在分布式系統(tǒng)的每個(gè)節(jié)點(diǎn)中存儲(chǔ)的用戶數(shù)據(jù),其對(duì)應(yīng)的用戶的ID號(hào)碼都連續(xù),并且需要順序訪問(wèn)ID號(hào)碼為從N到M的用戶的用戶數(shù)據(jù)的情況下,先查找到ID號(hào)碼為N的用戶的用戶數(shù)據(jù)所在的節(jié)點(diǎn)。這樣,根據(jù)所查找到的節(jié)點(diǎn)其存儲(chǔ)的用戶的ID號(hào)碼的最大值X,能夠確定一部分用戶數(shù)據(jù)(因?yàn)槠銲D號(hào)碼連續(xù))存儲(chǔ)在所查找到的節(jié)點(diǎn)中。因此,減少了需要查找其用戶數(shù)據(jù)所存儲(chǔ)的節(jié)點(diǎn)的用戶的數(shù)量,從而加快了用戶數(shù)據(jù)的訪問(wèn)速度。
其中,還可以通過(guò)預(yù)先設(shè)置的二級(jí)索引來(lái)查找第一節(jié)點(diǎn)。圖2是根據(jù)另一示例性實(shí)施例示出的一種訪問(wèn)用戶數(shù)據(jù)的方法的流程圖。如圖2所示,在圖1的基礎(chǔ)上,響應(yīng)于所述訪問(wèn)指令,確定存儲(chǔ)有ID號(hào)碼為N的用戶的用戶數(shù)據(jù)的第一節(jié)點(diǎn)的步驟(步驟S12)可以包括以下步驟。
在步驟S121中,響應(yīng)于訪問(wèn)指令,確定ID號(hào)碼為N的用戶的用戶數(shù)據(jù)所在的二級(jí)索引。
如上所述,可以預(yù)先建立查找節(jié)點(diǎn)的二級(jí)索引,通過(guò)常用的方法可以查找到ID號(hào)碼為N的用戶的用戶數(shù)據(jù)所在的二級(jí)索引。
在步驟S122中,根據(jù)ID號(hào)碼為N的用戶的用戶數(shù)據(jù)所在的二級(jí)索引,確定存儲(chǔ)有ID號(hào)碼為N的用戶的用戶數(shù)據(jù)的第一節(jié)點(diǎn)。
根據(jù)所確定的二級(jí)索引中的指針,能夠查找到ID號(hào)碼為N的用戶在該二級(jí)索引下的具體節(jié)點(diǎn)位置,將查找到的節(jié)點(diǎn)確定為第一節(jié)點(diǎn)。
該實(shí)施例中,通過(guò)設(shè)置二級(jí)索引,加快了查找節(jié)點(diǎn)的速度,從而加快了用戶數(shù)據(jù)的訪問(wèn),節(jié)省了時(shí)間,提升了用戶體驗(yàn)。
在圖2的實(shí)施例中,可以采用哈希散列的方式來(lái)查找二級(jí)索引。圖3是根據(jù)又一示例性實(shí)施例示出的一種訪問(wèn)用戶數(shù)據(jù)的方法的流程圖。如圖3所示,在圖2的基礎(chǔ)上,響應(yīng)于訪問(wèn)指令,確定身份標(biāo)識(shí)號(hào)碼為N的用戶的用戶數(shù)據(jù)所在的二級(jí)索引的步驟(步驟S121)可以包括步驟S1211。
在步驟S1211中,響應(yīng)于訪問(wèn)指令,根據(jù)哈希散列函數(shù)確定ID號(hào)碼為N的用戶的用戶數(shù)據(jù)所在的二級(jí)索引。
例如,用戶的身份標(biāo)識(shí)(Identification,ID)號(hào)碼為123的用戶,通過(guò)對(duì)ID的散列計(jì)算,獲得鍵值為2,那么此用戶的用戶數(shù)據(jù)就存在2號(hào)二級(jí)索引上,再根據(jù)2號(hào)二級(jí)索引中的指針來(lái)確定ID號(hào)碼為123的用戶所在的節(jié)點(diǎn)位置。
該實(shí)施例中,哈希散列函數(shù)能夠很好地支持隨機(jī)訪問(wèn),從而能夠適用于二級(jí)索引隨機(jī)布置的情況,且可靠性較高。
由上所述,可以根據(jù)第一節(jié)點(diǎn)中的最大ID值X確定N到M的ID號(hào)碼是否全部存儲(chǔ)在第一節(jié)點(diǎn)中。如果是,則無(wú)需再次查找節(jié)點(diǎn)位置。圖4是根據(jù)又一示例性實(shí)施例示出的一種訪問(wèn)用戶數(shù)據(jù)的方法的流程圖。如圖4所示,在圖1的基礎(chǔ)上,根據(jù)X來(lái)訪問(wèn)ID號(hào)碼為從N到M的用戶的用戶數(shù)據(jù)的步驟(步驟S14)可以包括步驟S141。
在步驟S141中,當(dāng)X大于或等于M時(shí),在第一節(jié)點(diǎn)中順序訪問(wèn)ID號(hào)碼為從N到M的用戶的用戶數(shù)據(jù)。
也就是,當(dāng)X大于或等于M時(shí),可以確定N到M的ID號(hào)碼全部存儲(chǔ)在第一節(jié)點(diǎn)中,此時(shí),只要在第一節(jié)點(diǎn)中從N開(kāi)始按照ID號(hào)碼順序地訪問(wèn)用戶數(shù)據(jù)就能夠?qū)D號(hào)碼為從N到M的用戶的用戶數(shù)據(jù)全部訪問(wèn)完畢。這樣就省去了為N+1到M查找節(jié)點(diǎn)位置(M-N次查找)的步驟,從而加快了用戶數(shù)據(jù)的訪問(wèn)速度。
例如,N=1,M=650,查找到ID號(hào)碼為1的用戶數(shù)據(jù)存儲(chǔ)在一節(jié)點(diǎn)中,則將該節(jié)點(diǎn)確定為第一節(jié)點(diǎn)。在該第一節(jié)點(diǎn)中存儲(chǔ)的ID號(hào)碼最大值為1000(該節(jié)點(diǎn)中存儲(chǔ)的ID號(hào)碼為1-1000),即X=1000。X>M,則ID號(hào)碼為2-650的用戶的用戶數(shù)據(jù)不需要再查找其存儲(chǔ)的節(jié)點(diǎn)位置,直接可以從第一節(jié)點(diǎn)中訪問(wèn)。
如果N到M的ID號(hào)碼并沒(méi)有全部存儲(chǔ)在第一節(jié)點(diǎn)中,則還需再次查找一些用戶數(shù)據(jù)所在的節(jié)點(diǎn)位置。圖5是根據(jù)又一示例性實(shí)施例示出的一種訪問(wèn)用戶數(shù)據(jù)的方法的流程圖。如圖5所示,在圖1的基礎(chǔ)上,根據(jù)X來(lái)訪問(wèn)ID號(hào)碼為從N到M的用戶的用戶數(shù)據(jù)的步驟(步驟S14)可以包括以下步驟。
在步驟S142中,當(dāng)X小于M時(shí),在第一節(jié)點(diǎn)中順序訪問(wèn)ID號(hào)碼為從N到X的用戶的用戶數(shù)據(jù)。
也就是,當(dāng)X小于M時(shí),第一節(jié)點(diǎn)中存儲(chǔ)的比N大的全部ID號(hào)碼都包括在N-M中。因此,先在第一節(jié)點(diǎn)中訪問(wèn)存儲(chǔ)的ID號(hào)碼為N-X的用戶數(shù)據(jù)。
在步驟S143中,確定存儲(chǔ)有ID號(hào)碼為X+1的用戶的用戶數(shù)據(jù)的第二節(jié)點(diǎn)。
接下來(lái),還有ID號(hào)碼為X+1到M的用戶數(shù)據(jù)沒(méi)有訪問(wèn)??梢园凑张c上述從步驟S12開(kāi)始的相似的方案來(lái)繼續(xù)查找ID號(hào)碼為X+1的用戶的用戶數(shù)據(jù)所在的節(jié)點(diǎn),將該節(jié)點(diǎn)確定為第二節(jié)點(diǎn)。
在步驟S144中,確定所述第二節(jié)點(diǎn)中所存儲(chǔ)的用戶的ID號(hào)碼的最大值Y(與步驟S13相似)。
在步驟S145中,當(dāng)Y大于或等于M時(shí),在所述第二節(jié)點(diǎn)中順序訪問(wèn)ID號(hào)碼從X+1到M的用戶的用戶數(shù)據(jù)(與步驟S141相似)。
在步驟S146中,當(dāng)Y小于M時(shí),在所述第二節(jié)點(diǎn)中順序訪問(wèn)ID號(hào)碼為從X+1到Y(jié)的用戶的用戶數(shù)據(jù)(與步驟S142相似),并確定存儲(chǔ)有ID號(hào)碼為Y+1的用戶的用戶數(shù)據(jù)的第三節(jié)點(diǎn)(與步驟S12相似),直至ID號(hào)碼為從N到M的用戶的用戶數(shù)據(jù)全部訪問(wèn)完畢為止。
該實(shí)施例中,每查找到一個(gè)節(jié)點(diǎn)位置,就將該節(jié)點(diǎn)中在所需范圍(N到M)內(nèi)的ID的用戶數(shù)據(jù)進(jìn)行訪問(wèn),如果在所需范圍內(nèi)還有未訪問(wèn)的ID,則繼續(xù)查找下一個(gè)節(jié)點(diǎn)位置,直到所需范圍內(nèi)的ID全部被訪問(wèn)為止。這樣,每個(gè)節(jié)點(diǎn)內(nèi)就可能會(huì)有一部分ID號(hào)碼連續(xù)的用戶,省去了查找其節(jié)點(diǎn)位置的步驟。
例如,1號(hào)節(jié)點(diǎn)中存儲(chǔ)有ID號(hào)為1-1000的用戶的用戶數(shù)據(jù),2號(hào)節(jié)點(diǎn)中存儲(chǔ)有ID號(hào)為1001-2000的用戶的用戶數(shù)據(jù),3號(hào)節(jié)點(diǎn)中存儲(chǔ)有ID號(hào)為2001-3000的用戶的用戶數(shù)據(jù)。則訪問(wèn)ID號(hào)碼為51-2550的用戶的用戶數(shù)據(jù),可以通過(guò)以下步驟來(lái)實(shí)施。
1)查詢ID號(hào)碼為51的用戶所在的二級(jí)索引,通過(guò)該二級(jí)索引的指針,確定出所在的1號(hào)節(jié)點(diǎn)。
2)確定出1號(hào)節(jié)點(diǎn)中所存儲(chǔ)的ID號(hào)碼的最大值為1000。
3)不需要查詢二級(jí)索引,直接訪問(wèn)1號(hào)節(jié)點(diǎn)中ID號(hào)碼為51-1000的用戶的用戶數(shù)據(jù)。
4)查詢ID號(hào)碼為1001的用戶所在的二級(jí)索引,通過(guò)該二級(jí)索引的指針,確定出所在的2號(hào)節(jié)點(diǎn)。
5)確定出2號(hào)節(jié)點(diǎn)中所存儲(chǔ)的ID號(hào)碼的最大值為2000。
6)不需要查詢二級(jí)索引,直接訪問(wèn)2號(hào)節(jié)點(diǎn)中ID號(hào)碼為1001-2000的用戶的用戶數(shù)據(jù)。
7)查詢ID號(hào)碼為2001的用戶所在的二級(jí)索引,通過(guò)該二級(jí)索引的指針,確定出所在的3號(hào)節(jié)點(diǎn)。
8)確定出3號(hào)節(jié)點(diǎn)中所存儲(chǔ)的ID號(hào)碼的最大值為3000。
9)不需要查詢二級(jí)索引,直接訪問(wèn)3號(hào)節(jié)點(diǎn)中ID號(hào)碼為2001-2550的用戶的用戶數(shù)據(jù)。
這樣,在2500個(gè)(ID號(hào)碼為51-2550)用戶中只查找了51、1001和2001這三個(gè)ID號(hào)碼所在的節(jié)點(diǎn)位置,而省去了其余絕大部分ID號(hào)碼所在節(jié)點(diǎn)的查詢步驟,從而加快了用戶數(shù)據(jù)的訪問(wèn)速度。
本公開(kāi)還提供一種訪問(wèn)用戶數(shù)據(jù)的裝置,該裝置應(yīng)用于分布式系統(tǒng),所述分布式系統(tǒng)包括多個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)中存儲(chǔ)的用戶數(shù)據(jù)所對(duì)應(yīng)的用戶的身份標(biāo)識(shí)號(hào)碼連續(xù)。圖6是根據(jù)一示例性實(shí)施例示出的一種訪問(wèn)用戶數(shù)據(jù)的裝置的框圖。如圖6所示,所述訪問(wèn)用戶數(shù)據(jù)的裝置10可以包括接收模塊11、節(jié)點(diǎn)確定模塊12、最大值確定模塊13和訪問(wèn)模塊14。
接收模塊11用于接收訪問(wèn)指令,所述訪問(wèn)指令用于指示訪問(wèn)身份標(biāo)識(shí)號(hào)碼為從N到M的用戶的用戶數(shù)據(jù)。
節(jié)點(diǎn)確定模塊12用于響應(yīng)于訪問(wèn)指令,確定存儲(chǔ)有身份標(biāo)識(shí)號(hào)碼為N的用戶的用戶數(shù)據(jù)的第一節(jié)點(diǎn)。
最大值確定模塊13用于確定第一節(jié)點(diǎn)中所存儲(chǔ)的用戶的身份標(biāo)識(shí)號(hào)碼的最大值X。
訪問(wèn)模塊14用于根據(jù)X來(lái)訪問(wèn)身份標(biāo)識(shí)號(hào)碼為從N到M的用戶的用戶數(shù)據(jù)。
圖7是根據(jù)另一示例性實(shí)施例示出的一種訪問(wèn)用戶數(shù)據(jù)的裝置的框圖。如圖7所示,在圖6的基礎(chǔ)上,所述節(jié)點(diǎn)確定模塊12可以包括二級(jí)索引確定子模塊121和第一節(jié)點(diǎn)確定子模塊122。
二級(jí)索引確定子模塊121用于響應(yīng)于所述訪問(wèn)指令,確定身份標(biāo)識(shí)號(hào)碼為N的用戶的用戶數(shù)據(jù)所在的二級(jí)索引。
第一節(jié)點(diǎn)確定子模塊122用于根據(jù)身份標(biāo)識(shí)號(hào)碼為N的用戶的用戶數(shù)據(jù)所在的二級(jí)索引,確定存儲(chǔ)有身份標(biāo)識(shí)號(hào)碼為N的用戶的用戶數(shù)據(jù)的第一節(jié)點(diǎn)。
圖8是根據(jù)又一示例性實(shí)施例示出的一種訪問(wèn)用戶數(shù)據(jù)的裝置的框圖。如圖8所示,在圖7的基礎(chǔ)上,所述二級(jí)索引確定子模塊121可以包括二級(jí)索引哈希確定子模塊1211。
二級(jí)索引哈希確定子模塊1211用于響應(yīng)于所述訪問(wèn)指令,根據(jù)哈希散列函數(shù)確定身份標(biāo)識(shí)號(hào)碼為N的用戶的用戶數(shù)據(jù)所在的二級(jí)索引。
圖9是根據(jù)又一示例性實(shí)施例示出的一種訪問(wèn)用戶數(shù)據(jù)的裝置的框圖。如圖9所示,在圖6的基礎(chǔ)上,所述訪問(wèn)模塊14可以包括第一訪問(wèn)子模塊141。
第一訪問(wèn)子模塊141用于當(dāng)X大于或等于M時(shí),在所述第一節(jié)點(diǎn)中順序訪問(wèn)身份標(biāo)識(shí)號(hào)碼為從N到M的用戶的用戶數(shù)據(jù)。
圖10是根據(jù)又一示例性實(shí)施例示出的一種訪問(wèn)用戶數(shù)據(jù)的裝置的框圖。如圖10所示,在圖6的基礎(chǔ)上,所述訪問(wèn)模塊14可以包括第二訪問(wèn)子模塊142、第二節(jié)點(diǎn)確定子模塊143、最大值確定子模塊144、第三訪問(wèn)子模塊145和第四訪問(wèn)子模塊146。
第二訪問(wèn)子模塊142用于當(dāng)X小于M時(shí),在所述第一節(jié)點(diǎn)中順序訪問(wèn)身份標(biāo)識(shí)號(hào)碼為從N到X的用戶的用戶數(shù)據(jù)。
第二節(jié)點(diǎn)確定子模塊143用于確定存儲(chǔ)有身份標(biāo)識(shí)號(hào)碼為X+1的用戶的用戶數(shù)據(jù)的第二節(jié)點(diǎn)。
最大值確定子模塊144用于確定所述第二節(jié)點(diǎn)中所存儲(chǔ)的用戶的身份標(biāo)識(shí)號(hào)碼的最大值Y。
第三訪問(wèn)子模塊145用于當(dāng)Y大于或等于M時(shí),在所述第二節(jié)點(diǎn)中順序訪問(wèn)身份標(biāo)識(shí)號(hào)碼從X+1到M的用戶的用戶數(shù)據(jù)。
第四訪問(wèn)子模塊146用于當(dāng)Y小于M時(shí),在所述第二節(jié)點(diǎn)中順序訪問(wèn)身份標(biāo)識(shí)號(hào)碼為從X+1到Y(jié)的用戶的用戶數(shù)據(jù),并確定存儲(chǔ)有身份標(biāo)識(shí)號(hào)碼為Y+1的用戶的用戶數(shù)據(jù)的第三節(jié)點(diǎn),直至身份標(biāo)識(shí)號(hào)碼為從N到M的用戶的用戶數(shù)據(jù)全部訪問(wèn)完畢為止。
關(guān)于上述實(shí)施例中的裝置,其中各個(gè)模塊執(zhí)行操作的具體方式已經(jīng)在有關(guān)該方法的實(shí)施例中進(jìn)行了詳細(xì)描述,此處將不做詳細(xì)闡述說(shuō)明。
通過(guò)以上技術(shù)方案,在分布式系統(tǒng)的每個(gè)節(jié)點(diǎn)中存儲(chǔ)的用戶數(shù)據(jù),其對(duì)應(yīng)的用戶的ID號(hào)碼都連續(xù),并且需要順序訪問(wèn)ID號(hào)碼為從N到M的用戶的用戶數(shù)據(jù)的情況下,先查找到ID號(hào)碼為N的用戶的用戶數(shù)據(jù)所在的節(jié)點(diǎn)。這樣,根據(jù)所查找到的節(jié)點(diǎn)其存儲(chǔ)的用戶的ID號(hào)碼的最大值X,能夠確定一部分用戶數(shù)據(jù)(因?yàn)槠銲D號(hào)碼連續(xù))存儲(chǔ)在所查找到的節(jié)點(diǎn)中。因此,減少了需要查找其用戶數(shù)據(jù)所存儲(chǔ)的節(jié)點(diǎn)的用戶的數(shù)量,從而加快了用戶數(shù)據(jù)的訪問(wèn)速度。
圖11是根據(jù)一示例性實(shí)施例示出的一種訪問(wèn)用戶數(shù)據(jù)的裝置1100的框圖。例如,裝置1100可以是移動(dòng)電話,計(jì)算機(jī),數(shù)字廣播終端,消息收發(fā)設(shè)備,游戲控制臺(tái),平板設(shè)備,醫(yī)療設(shè)備,健身設(shè)備,個(gè)人數(shù)字助理等。
參照?qǐng)D11,裝置1100可以包括以下一個(gè)或多個(gè)組件:處理組件1102,存儲(chǔ)器1104,電力組件1106,多媒體組件1108,音頻組件1110,輸入/輸出(I/O)的接口1112,傳感器組件1114,以及通信組件1116。
處理組件1102通常控制裝置1100的整體操作,諸如與顯示,電話呼叫,數(shù)據(jù)通信,相機(jī)操作和記錄操作相關(guān)聯(lián)的操作。處理組件1102可以包括一個(gè)或多個(gè)處理器1120來(lái)執(zhí)行指令,以完成上述訪問(wèn)用戶數(shù)據(jù)的方法的全部或部分步驟。此外,處理組件1102可以包括一個(gè)或多個(gè)模塊,便于處理組件1102和其他組件之間的交互。例如,處理組件1102可以包括多媒體模塊,以方便多媒體組件1108和處理組件1102之間的交互。
存儲(chǔ)器1104被配置為存儲(chǔ)各種類型的數(shù)據(jù)以支持在裝置1100的操作。這些數(shù)據(jù)的示例包括用于在裝置1100上操作的任何應(yīng)用程序或方法的指令,聯(lián)系人數(shù)據(jù),電話簿數(shù)據(jù),消息,圖片,視頻等。存儲(chǔ)器1104可以由任何類型的易失性或非易失性存儲(chǔ)設(shè)備或者它們的組合實(shí)現(xiàn),如靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM),電可擦除可編程只讀存儲(chǔ)器(EEPROM),可擦除可編程只讀存儲(chǔ)器(EPROM),可編程只讀存儲(chǔ)器(PROM),只讀存儲(chǔ)器(ROM),磁存儲(chǔ)器,快閃存儲(chǔ)器,磁盤或光盤。
電力組件1106為裝置1100的各種組件提供電力。電力組件1106可以包括電源管理系統(tǒng),一個(gè)或多個(gè)電源,及其他與為裝置1100生成、管理和分配電力相關(guān)聯(lián)的組件。
多媒體組件1108包括在所述裝置1100和用戶之間的提供一個(gè)輸出接口的屏幕。在一些實(shí)施例中,屏幕可以包括液晶顯示器(LCD)和觸摸面板(TP)。如果屏幕包括觸摸面板,屏幕可以被實(shí)現(xiàn)為觸摸屏,以接收來(lái)自用戶的輸入信號(hào)。觸摸面板包括一個(gè)或多個(gè)觸摸傳感器以感測(cè)觸摸、滑動(dòng)和觸摸面板上的手勢(shì)。所述觸摸傳感器可以不僅感測(cè)觸摸或滑動(dòng)動(dòng)作的邊界,而且還檢測(cè)與所述觸摸或滑動(dòng)操作相關(guān)的持續(xù)時(shí)間和壓力。在一些實(shí)施例中,多媒體組件1108包括一個(gè)前置攝像頭和/或后置攝像頭。當(dāng)裝置1100處于操作模式,如拍攝模式或視頻模式時(shí),前置攝像頭和/或后置攝像頭可以接收外部的多媒體數(shù)據(jù)。每個(gè)前置攝像頭和后置攝像頭可以是一個(gè)固定的光學(xué)透鏡系統(tǒng)或具有焦距和光學(xué)變焦能力。
音頻組件1110被配置為輸出和/或輸入音頻信號(hào)。例如,音頻組件1110包括一個(gè)麥克風(fēng)(MIC),當(dāng)裝置1100處于操作模式,如呼叫模式、記錄模式和語(yǔ)音識(shí)別模式時(shí),麥克風(fēng)被配置為接收外部音頻信號(hào)。所接收的音頻信號(hào)可以被進(jìn)一步存儲(chǔ)在存儲(chǔ)器1104或經(jīng)由通信組件1116發(fā)送。在一些實(shí)施例中,音頻組件1110還包括一個(gè)揚(yáng)聲器,用于輸出音頻信號(hào)。
I/O接口1112為處理組件1102和外圍接口模塊之間提供接口,上述外圍接口模塊可以是鍵盤,點(diǎn)擊輪,按鈕等。這些按鈕可包括但不限于:主頁(yè)按鈕、音量按鈕、啟動(dòng)按鈕和鎖定按鈕。
傳感器組件1114包括一個(gè)或多個(gè)傳感器,用于為裝置1100提供各個(gè)方面的狀態(tài)評(píng)估。例如,傳感器組件1114可以檢測(cè)到裝置1100的打開(kāi)/關(guān)閉狀態(tài),組件的相對(duì)定位,例如所述組件為裝置1100的顯示器和小鍵盤,傳感器組件1114還可以檢測(cè)裝置1100或裝置1100一個(gè)組件的位置改變,用戶與裝置1100接觸的存在或不存在,裝置1100方位或加速/減速和裝置1100的溫度變化。傳感器組件1114可以包括接近傳感器,被配置用來(lái)在沒(méi)有任何的物理接觸時(shí)檢測(cè)附近物體的存在。傳感器組件1114還可以包括光傳感器,如CMOS或CCD圖像傳感器,用于在成像應(yīng)用中使用。在一些實(shí)施例中,該傳感器組件1114還可以包括加速度傳感器,陀螺儀傳感器,磁傳感器,壓力傳感器或溫度傳感器。
通信組件1116被配置為便于裝置1100和其他設(shè)備之間有線或無(wú)線方式的通信。裝置1100可以接入基于通信標(biāo)準(zhǔn)的無(wú)線網(wǎng)絡(luò),如WiFi,2G或3G,或它們的組合。在一個(gè)示例性實(shí)施例中,通信組件1116經(jīng)由廣播信道接收來(lái)自外部廣播管理系統(tǒng)的廣播信號(hào)或廣播相關(guān)信息。在一個(gè)示例性實(shí)施例中,所述通信組件1116還包括近場(chǎng)通信(NFC)模塊,以促進(jìn)短程通信。例如,在NFC模塊可基于射頻識(shí)別(RFID)技術(shù),紅外數(shù)據(jù)協(xié)會(huì)(IrDA)技術(shù),超寬帶(UWB)技術(shù),藍(lán)牙(BT)技術(shù)和其他技術(shù)來(lái)實(shí)現(xiàn)。
在示例性實(shí)施例中,裝置1100可以被一個(gè)或多個(gè)應(yīng)用專用集成電路(ASIC)、數(shù)字信號(hào)處理器(DSP)、數(shù)字信號(hào)處理設(shè)備(DSPD)、可編程邏輯器件(PLD)、現(xiàn)場(chǎng)可編程門陣列(FPGA)、控制器、微控制器、微處理器或其他電子元件實(shí)現(xiàn),用于執(zhí)行上述訪問(wèn)用戶數(shù)據(jù)的方法。
在示例性實(shí)施例中,還提供了一種包括指令的非臨時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),例如包括指令的存儲(chǔ)器1104,上述指令可由裝置1100的處理器1120執(zhí)行以完成上述訪問(wèn)用戶數(shù)據(jù)的方法。例如,所述非臨時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以是ROM、隨機(jī)存取存儲(chǔ)器(RAM)、CD-ROM、磁帶、軟盤和光數(shù)據(jù)存儲(chǔ)設(shè)備等。
圖12是根據(jù)一示例性實(shí)施例示出的一種訪問(wèn)用戶數(shù)據(jù)的裝置1200的框圖。例如,裝置1200可以被提供為一服務(wù)器。參照?qǐng)D12,裝置1200包括處理組件1222,其進(jìn)一步包括一個(gè)或多個(gè)處理器,以及由存儲(chǔ)器1232所代表的存儲(chǔ)器資源,用于存儲(chǔ)可由處理組件1222的執(zhí)行的指令,例如應(yīng)用程序。存儲(chǔ)器1232中存儲(chǔ)的應(yīng)用程序可以包括一個(gè)或一個(gè)以上的每一個(gè)對(duì)應(yīng)于一組指令的模塊。此外,處理組件1222被配置為執(zhí)行指令,以執(zhí)行上述訪問(wèn)用戶數(shù)據(jù)的方法。
裝置1200還可以包括一個(gè)電源組件1226被配置為執(zhí)行裝置1200的電源管理,一個(gè)有線或無(wú)線網(wǎng)絡(luò)接口1250被配置為將裝置1200連接到網(wǎng)絡(luò),和一個(gè)輸入輸出(I/O)接口1258。裝置1200可以操作基于存儲(chǔ)在存儲(chǔ)器1232的操作系統(tǒng),例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,F(xiàn)reeBSDTM或類似。
本領(lǐng)域技術(shù)人員在考慮說(shuō)明書及實(shí)踐本公開(kāi)后,將容易想到本公開(kāi)的其它實(shí)施方案。本申請(qǐng)旨在涵蓋本公開(kāi)的任何變型、用途或者適應(yīng)性變化,這些變型、用途或者適應(yīng)性變化遵循本公開(kāi)的一般性原理并包括本公開(kāi)未公開(kāi)的本技術(shù)領(lǐng)域中的公知常識(shí)或慣用技術(shù)手段。說(shuō)明書和實(shí)施例僅被視為示例性的,本公開(kāi)的真正范圍和精神由下面的權(quán)利要求指出。
應(yīng)當(dāng)理解的是,本公開(kāi)并不局限于上面已經(jīng)描述并在附圖中示出的精確結(jié)構(gòu),并且可以在不脫離其范圍進(jìn)行各種修改和改變。本公開(kāi)的范圍僅由所附的權(quán)利要求來(lái)限制。