2015-03-17 8 views
5

Sto guardando il Instagram blog post about sharded ID generation. Questo post sul blog descrive la generazione di identificatori a 64 bit. Loro meccanismo alloca 41 dei 64 bit a un timestamp millisecondo, e dicono:Quanti anni di timestamp in millisecondi possono essere rappresentati da 41 bit?

  • 41 bit per il tempo in millisecondi (ci dà 41 anni di ID con un'epoca personalizzato)

È un errore di battitura? Ho calcolato che è possibile memorizzare 69 anni di timestamp in millisecondi in 41 bit. Ecco come:

  • Max millisecondi immagazzinati in 41 bit: (2^41) -1 = 2199023255551 ms
  • diviso per (1000 * 60 * 60 * 24 * 365) ms/anno = 69 anni

Quindi, dove sbaglio?

+0

La tua matematica si verifica, quindi è un errore di battitura o stanno facendo qualcosa con quei bit diversi da quello che tu e io pensiamo che stiano facendo. :-) – templatetypedef

+1

@templatetypedef grazie. Mi faceva sentire stupido/mi faceva impazzire. –

+0

Google 'millisecondi 2199023255551', molti risultati supportano la tua teoria – DeDee

risposta

8

Non ti sbagli sul calcolo.

(2^41)-1 ms 
    == 2199023255.551 s 
    == 610839.7932086 hr 
    == 25451.65805036 days 
    == 69.6828 Julian years 
    == 69.6843 Gregorian Years 

Che allinea strettamente con il risultato (69 years).

Tuttavia, il sito si collega a non dire che 41 bits dà loro

41 anni di ID con un'epoca personalizzato

"Epoca" in questo contesto si riferisce probabilmente alla data di inizio . Dato che quell'articolo è stato pubblicato "3 anni fa", o in 2012, possiamo calcolare che la loro epoca inizi nel 2012 + 41 - 69 == 1984. Questa data è stata probabilmente scelta come a reference.

+0

Quale programma hai usato per ottenere quell'output? – favilo

+0

Oh, l'ho appena scritto a mano. Probabilmente ho fatto le conversioni in Google o a mano –

Problemi correlati