Categorygithub.com/adityarathod/snowflakey
repository
0.0.0-20240527062541-21e064411cd1
Repository: https://github.com/adityarathod/snowflakey.git
Documentation: pkg.go.dev

# Packages

No description provided by the author
No description provided by the author
No description provided by the author

# README

Snowflakey

A tiny library to implement Snowflake IDs in Golang.

I'm still learning Golang and its best practices, so contributions welcome!

Usage

See the provided examples.

Supported implementations

Original (Twitter) snowflake

Reference material citation: Wikipedia article (linked above)

  • 1 bit: reserved for sign bit (to fit in an int64)
  • 41 bits: timestamp (millisecond precision, after an arbitrary, recent epoch date, since UNIX epoch time won't fit here)
  • 10 bits: machine ID (server identifier, in theory this means you can have up to 2^10 = 1024 servers generating snowflakes in parallel without possibility of collisions)
  • 12 bits: machine-generated sequence number (for further collision avoidance at the millisecond-level)

RFC-style diagram:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|S|                       Timestamp                             |
+-+                 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                   |    Machine ID     |   Machine Seq. Num.   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Planned implementations

  • Instagram snowflakes
  • Mastodon snowflakes