2012-07-02 33 views
1

誰可以解釋代碼,它是twitter雪花的核心。想到twitter雪花中的位移IdWorker

long nextId = ((timestamp - twepoch) << this.timestampLeftShift) 
      | (this.workerId << this.workerIdShift) | (this.sequence); 

我想知道,該算法的思考,爲什麼它會實現?

回答

2

Twitter的雪花服務在分佈式環境中創建獨特的ID。許多工作進程都可以分配唯一的ID。 ID由三部分組成:時間,工作人員ID和序列號。您顯示的代碼行簡單地移動了這三個組件,以便它們在64位結果中不重疊,或者將它們組合在一起以創建單個64位結果。

+0

喜奈德巴徹爾德,這意味着我自己可以如代碼的下改變它的算法: 長nextId =((時間戳 - twepoch)<< 2) | (this.workerId << 3)| (this.sequence << 5); 這是作爲你的答案嗎? – snageyang

+0

即時通過併發測試上面的代碼10 thread:long nextId =((timestamp - twepoch)<< 2)| (this.workerId << 3)| (this.sequence << 5),id的結果可以重複,代碼如何。 – snageyang

+0

我沒有說你可以改變代碼,它會繼續工作。移位量取決於三個組件的大小。它們不重疊很重要。 –