Skip to content

jyeshe/snowflexid

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SnowflexId

Generator of Snowflake ID which is smaller and faster than UUID (but not random).

It's ordered by timestamp after Elixir time (epoch since 2011-01-09) and avoid colissions in cluster based on process generator id which is here called by node id.

The ID is an integer that fits into a PostgreSQL biginit and it's composed by: 41 bits of timestamp with millisecond precision, using a custom epoch. 10 bits of node id - a range from 0 through 1023. 12 bits of a sequence number - a range from 0 through 4095.

Usage

The generator is available in 2 flavors: A. Sequence (erlang counter) B. Table (erlang ets)

A. Sequence

This option is not thread-safe due to sequence restart after reaching the bits limit. But it's faster due to erlang counter and it might be usefull when generating inside a GenServer.

B. Table

This is arround 2.5x slower than Sequence but it's a thread-safe table that serves multiple node ids.

Configuration

This is optional if you want to setup a custom epoch (in milliseconds).

config :snowflexid, :custom_epoch, 1294566368000

Installation

def deps do
  [
    {:snowflexid, "~> 0.1.0"}
  ]
end

About

Elixir Snowflake like ID generator

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages