Thanks to visit codestin.com
Credit goes to lib.rs

19 releases (8 stable)

2.0.1 Sep 15, 2024
1.1.1 Sep 11, 2024
1.0.0 Sep 28, 2023
0.5.0 Sep 23, 2023
0.2.1 Mar 26, 2023

#544 in Encoding


Used in uuinfo

Apache-2.0

81KB
1.5K SLoC

SCRU64: Sortable, Clock-based, Realm-specifically Unique identifier

Crates.io License

SCRU64 ID offers compact, time-ordered unique identifiers generated by distributed nodes. SCRU64 has the following features:

  • 63-bit non-negative integer storable as signed/unsigned 64-bit integer
  • Sortable by generation time (as integer and as text)
  • 12-digit case-insensitive textual representation (Base36)
  • ~38-bit Unix epoch-based timestamp that ensures useful life until year 4261
  • Variable-length node/machine ID and counter fields that share 24 bits
// pass node ID through environment variable
// (e.g., SCRU64_NODE_SPEC=42/8 command ...)

// generate a new identifier object
let x = scru64::new_sync();
println!("{}", x); // e.g., "0u2r85hm2pt3"
println!("{}", x.to_u64()); // as a 64-bit unsigned integer

// generate a textual representation directly
println!("{}", scru64::new_string_sync()); // e.g., "0u2r85hm2pt4"

See SCRU64 Specification for details.

SCRU64's uniqueness is realm-specific, i.e., dependent on the centralized assignment of node ID to each generator. If you need decentralized, globally unique time-ordered identifiers, consider SCRU128.

Crate features

Default features:

  • std integrates the library with, among others, the system clock to draw current timestamps. Without std, this crate provides limited functionality available under no_std environments.
  • global_gen (implies std) enables the new(), new_string(), new_sync(), and new_string_sync() primary entry point functions as well as the process-wide global generator under the hood.

Optional features:

  • serde enables serialization/deserialization via serde.

License

Licensed under the Apache License, Version 2.0.

See also

Dependencies

~215KB