SCRU64: Sortable, Clock-based, Realm-specifically Unique identifier
SCRU64 ID offers compact, time-ordered unique identifiers generated by distributed nodes. SCRU64 has the following features:
- ~62-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
set_var;
// generate a new identifier object
let x = new;
println!; // e.g., "0u2r85hm2pt3"
println!; // as a 64-bit unsigned integer
// generate a textual representation directly
println!; // 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:
stdintegrates the library with, among others, the system clock to draw current timestamps. Withoutstd, this crate provides limited functionality available underno_stdenvironments.global_gen(impliesstd) enables the primarynew()andnew_string()functions and the process-wide global generator under the hood.
Optional features:
serdeenables serialization/deserialization via serde.tokio(together withglobal_gen) enables theasync_tokio::new()andasync_tokio::new_string()functions, the non-blocking counterpart ofnew()andnew_string().
License
Licensed under the Apache License, Version 2.0.