2012-07-02 35 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

我没有说你可以改变代码,它会继续工作。移位量取决于三个组件的大小。它们不重叠很重要。 –