3 unstable releases

0.2.0 Sep 13, 2020
0.1.1 Nov 9, 2019
0.1.0 Nov 9, 2019

#11 in #snowflake-id

Custom license

7KB
71 lines

WebeID

Unique ID generator based on Snowflake, but for us wizards

A 64bit unique ID

Definition

5 bytes - time in milliseconds since custom epoch. (total of 34.84 years)
1 byte - node id (total of 256 nodes)
2 bytes - incrementing sequence number

Assumptions made for this ID

  • Technology will quickly advance to the point where 128bit IDs (like GUID) will be acceptably performant in extremely large database tables.
    • This means that we don't need large time range and we likely won't ever make use of the "future use" bit that Snowflake and Sonyflake have.
  • The developer using this is a hobbyist or small production.
    • Very likely won't scale up ID creation to 1000's of distributed machines.
    • Use of these IDs is unlikely to outlive the max time frame of 34.84 years

Advantages

  • Custom epoch.
  • Security from system time rewinds.
  • Security from sequence overflows.
  • Supports fast id creation, up to 65536 id's per node per millisecond.
  • Data sections are divisible on common 8bit byte boundaries,
    • Parsing sections does not require bit operations. Convert to big-endian byte array with ".to_be_bytes()" and then use the slice indexes 0-4, 5, 6-7
    • The first 6 bytes become highly repeated (and therefore compressable) when generating many IDs per second.

Notes

  • I could have chosen intervals of 10ms like Sony's Sonyflake, which would put the total timeframe up to 348.4 years
    • Higher sequences per 10ms means that IDs would be even more compressable.
    • However; My bet is that processors in the future, even in just a few years, will be able to blow past the max sequence range in 10ms (causing duplicates).

No runtime deps