Git Product home page Git Product logo

hexafreeze's Introduction

Hexafreeze

A library to asynchronously generate Snowflake IDs.

What is a snowflake

Snowflakes were developed by twitter for creating time sortable ids, which are able to be quickly generated without syncronisation even in distributed compute clusters.

Snowflakes have the following layout:

Snowflake ID layout

Usage

First you need to include dependencies. These are the recommended features. Tokio may be slimmed down by enabling individual features instead of full.

[dependencies]
hexafreeze = "0.5"
tokio = {version = "1", features = ["full"]}

[Generator] is the interface for the generation of snowflakes. Snowflakes require an epoch, basically the start time of the Snowflake, it needs to be in the past and be less than ~ 69 years ago. [DEFAULT_EPOCH] should be fine for most applications until 2079. It is thread-safe, therefore you do not need a Mutex to contain it. It is also safe to clone, since it uses [Arc] internally. It is recommend to use the same generator in all places in a rust application, something like once_cell may be useful for this.

use hexafreeze::Generator;
use hexafreeze::DEFAULT_EPOCH;

#[tokio::main]
async fn main() {
    // If your system is not distributed using `0` as the `node_id` is perfectly fine.
    // The `DEFAULT_EPOCH` always needs to be dereferenced.
    let gen = Generator::new(0, *DEFAULT_EPOCH).unwrap();

    // The `generate` function is async and non-blocking.
    let id: i64 = gen.generate().await.unwrap();
}

Details

  • Unlike Twitter's reference implementation, the sequence does not get reset every millisecond.

hexafreeze's People

Contributors

blocklisted avatar

Stargazers

 avatar Christoph Grabo avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.