webe_id

Crates.iowebe_id
lib.rswebe_id
version0.2.0
sourcesrc
created_at2019-11-09 00:05:45.966969
updated_at2020-09-13 05:41:09.512532
descriptionUnique ID generator based on Snowflake, but for us wizards
homepagehttps://webewizard.com
repositoryhttps://github.com/WebeWizard/WebeID
max_upload_size
id179513
size7,921
Justin Leis (WebeWizard)

documentation

README

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).
Commit count: 10

cargo fmt