Skip to content

rlopzc/tsid-zig

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

50 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TSID

Zig port for the famous TSID generator created by Fabio Lima.

Build for Zig 0.13.0.

Status

  • Thread safety with Atomic.value
  • TSID.toString / TSID.fromString Crockford's Base32 representation
  • Benchmarks vs UUIDs libs
  • Benchmarks vs other TSIDs implementations

Installation

Include it as library:

zig fetch --save git+https://github.com/rlopzc/tsid-zig

In your build.zig:

const tsid = b.dependency("tsid-zig", .{});
exe.root_module.addImport("tsid", tsid.module("tsid"));

Usage

const TSID = @import("tsid").TSID;
const TsidFactory = @import("tsid").Factory;

// Build a TSID Factory supporting 1024 nodes, with a Node ID = 500
var tsid_factory = TsidFactory.init_1024_nodes(500);

// Generate a TSID
const tsid = tsid_factory.create();

// Get the Crockford's Base32 string
tsid.toString();

// Get the u64 number
tsid.number;

// Build a TSID from a String
const tsid_from_str = try TSID.fromString("0H0596Q9R05TZ");

Benchmarks

I compared this TSID generation vs other UUIDs implementations from the community. If you want to run this benchmarks, run zig build run-bench.

Here are the results.

benchmark              runs     total time     time/run (avg ± σ)     (min ... max)                p75        p99        p995
-----------------------------------------------------------------------------------------------------------------------------
r4gus/uuid v4          65535    1.873ms        28ns ± 19ns            (20ns ... 200ns)             30ns       131ns      131ns
r4gus/uuid v7          65535    3.112ms        47ns ± 22ns            (40ns ... 3.967us)           50ns       150ns      151ns
karlseguin/zul UUID v4 65535    1.894ms        28ns ± 47ns            (20ns ... 11.131us)          30ns       131ns      131ns
karlseguin/zul UUID v7 65535    3.846ms        58ns ± 19ns            (50ns ... 3.607us)           60ns       160ns      160ns
rlopzc/tsid-zig 256    65535    3.453ms        52ns ± 16ns            (50ns ... 4.188us)           60ns       61ns       61ns
rlopzc/tsid-zig 1024   65535    3.446ms        52ns ± 16ns            (50ns ... 4.028us)           51ns       61ns       61ns
rlopzc/tsid-zig 4096   65535    3.445ms        52ns ± 19ns            (50ns ... 3.927us)           51ns       61ns       61ns

Useful links

About

TSID generator for Zig

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages