ranyefet / cuid

Collision-resistant ids, in Elixir

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

cuid

Collision-resistant ids optimized for horizontal scaling and sequential lookup performance, written in Elixir.

For full rationale behind CUIDs refer to the main project site.

Usage

Add Cuid as a dependency in your mix.exs file:

defp deps do:
    [{:cuid, "~> 0.1.0"}]
end

Run mix deps.get to fetch and compile Cuid. It works as a process

{:ok, pid} = Cuid.start_link
Cuid.generate(pid)  # => ch72gsb320000udocl363eofy

Each CUID is made by the following groups: c - h72gsb32 - 0000 - udoc - l363eofy

  • c identifies this as a cuid, and allows you to use it in html entity ids. The fixed value helps keep the ids sequential.
  • h72gsb32 is a timestamp
  • 0000 is a counter
  • udoc is a fingerprint. The first two characters are based on the process ID and the next two are based on the hostname. This is the same method used in the Node implementation
  • l363eofy random (uses :random.uniform)

TODOs

  • Optimize (it takes 15s to run 200000 generations in my MBP)

Credit

About

Collision-resistant ids, in Elixir

License:MIT License


Languages

Language:Elixir 100.0%