la idea de cambio de bit en twitter copo de nieve IdWorker

¿Quién puede explicar el código que es el núcleo del copo de nieve de Twitter?

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

Quiero saber que el pensamiento del algoritmo, ¿por qué se implementa?

preguntado el 02 de julio de 12 a las 02:07

1 Respuestas

El servicio de copos de nieve de Twitter crea identificaciones únicas en un entorno distribuido. Varios procesos de trabajo pueden asignar identificaciones únicas cada uno. Los identificadores constan de tres componentes: la hora, un identificador de trabajador y un número de secuencia. La línea de código que muestra simplemente cambia esos tres componentes para que no se superpongan en el resultado de 64 bits y los junta para crear un solo resultado de 64 bits.

Respondido 02 Jul 12, 03:07

hola, Ned Batchelder, eso significa que puedo cambiar su algoritmo por mí mismo, como el siguiente código: long nextId = ((timestamp - twepoch) << 2) | (this.workerId << 3) | (esta.secuencia<<5); y es que como su respuesta? - snageyang

Estoy probando lo anterior del código por concurrencia 10 subprocesos: long nextId = ((timestamp - twepoch) << 2) | (this.workerId << 3) | (this.sequence<<5), el resultado de id se puede repetir, ¿qué pasa con el código? - snageyang

No dije que pudieras cambiar el código de cualquier manera y que continuaría funcionando. Las cantidades de cambio dependen del tamaño de los tres componentes. Es importante que no se superpongan. - Ned Batchelder

No puedo entender que el desplazamiento a la izquierda equivale a timestampLeftShift,workerIdShift y por qué la secuencia no se desplaza a la izquierda. Gracias. - snageyang

@snageyang: No tengo idea de lo que estás tratando de lograr. Experimente con diferentes valores de desplazamiento para ver qué hacen. - Ned Batchelder

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.