#snowflake-id #thread-safe #snowflake #id-generator #serde #timestamp #ids

snowcloud

一个小型库,用于创建自定义雪花,并提供线程安全和非线程安全的生成器

5 个版本 (3 个重大更改)

0.4.0 2023年4月20日
0.3.0 2023年4月14日
0.2.0 2023年4月3日
0.1.1 2023年3月27日
0.1.0 2023年3月26日

#949编码

每月下载 43

MIT 许可证

125KB
2.5K SLoC

雪云

文档 | Crates.io

一个小型库,用于基于时间戳、静态 ID 和序列计数器实现自定义 ID。该模块提供了两种类型的生成器,线程安全和非线程安全版本。它们允许在需要特定行为时进行不同类型的 ID 等待。每个生成器都能使用不同的雪花类型,以便支持不同的雪花格式。

// 43 bit timestamp, 8 bit primary id, 12 bit sequence
type MyFlake = snowcloud::i64::SingleIdFlake<43, 8, 12>;
type MyCloud = snowcloud::Generator<MyFlake>;

// 2023/03/23 9:00:00 in milliseconds, timestamps will start from this
// date
const START_TIME: u64 = 1679587200000;

let mut cloud = MyCloud::new(START_TIME, 1)
    .expect("failed to create MyCloud");
let flake = cloud.next_id()
    .expect("failed to create snowflake");

println!("{}", flake.id());

查看文档以获取更多信息

功能

  • 整数类型:支持使用 i64 / u64 作为底层整数类型
  • ID 段:支持不同数量的 ID 段,雪花中的 1/2 静态 ID 以及时间戳和序列
  • 序列化和反序列化:支持使用 serde 将雪花序列化和反序列化为整数或字符串

状态

可以添加更多功能。

  • 尽可能使用 Atomics(或合理的方式)。
  • 其他辅助方法或结构体,如果它们是常见的用例。
  • 尝试提高性能,以便库不会成为瓶颈
  • 其他事项?

由于 API 相对简单,因此可能不会有太多更改,但作为预防措施,此版本号不会在最终确定之前进行重大更改(欢迎提出建议)。

贡献

欢迎修复、改进或建议。

依赖项

~175KB