#unique-id #distributed-id #snowflake-id #generate #distributed-systems #thread-safe #epoch

snowgen

使用雪花算法生成唯一、基于时间的ID的Rust库

1 个不稳定版本

0.1.0 2023年3月18日

#2091 in 算法

MIT/Apache

13KB
147

License: MIT License: Apache 2.0

雪花生成器

Snowgen 是一个基于Rust的生成唯一、分布式ID的库。它受到Twitter的雪花ID生成器的启发,并为分布式系统中的唯一ID生成提供了一种高效、线程安全的解决方案。

特性

  • 可自定义ID的每个组件的纪元、节点ID、机器ID和位长度
  • 线程安全,确保在多线程环境中也能生成唯一的ID
  • 构建器模式,便于配置和验证

入门指南

将以下行添加到您的 Cargo.toml 文件中的 [dependencies]

snowgen = "0.1.0"

用法

use snowgen::{SnowgenBuilder, Epoch};

fn main() {
    // Create a new Snowgen builder with default values
    let builder = SnowgenBuilder::new();

    // Customize the builder
    let snowgen = builder
        .node_id(1)
        .machine_id(2)
        .epoch(Epoch::MillisecondsSinceUnixEpoch(1615890112000))
        .timestamp_bits(41)
        .node_id_bits(5)
        .machine_id_bits(5)
        .sequence_bits(12)
        .build()
        .unwrap();

    // Generate a unique ID
    let unique_id = snowgen.next_id().unwrap();
    println!("Generated ID: {}", unique_id);
}

基准测试结果

single_thread_snowgen time:   [243.83 ns 244.11 ns 244.41 ns]
                        change: [-0.3326% -0.0319% +0.2692%] (p = 0.84 > 0.05)
                        No change in performance detected.
Found 4 outliers among 100 measurements (4.00%)
  1 (1.00%) low severe
  3 (3.00%) low mild

multi_thread_snowgen  time:   [52.552 µs 52.991 µs 53.352 µs]
                        change: [-0.8495% -0.0131% +0.7323%] (p = 0.98 > 0.05)
                        No change in performance detected.
Found 5 outliers among 100 measurements (5.00%)
  2 (2.00%) low severe
  2 (2.00%) high mild

许可证

本项目采用许可证

无运行时依赖