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 |
#173 in Unix APIs
81KB
1.5K
SLoC
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:
- 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. Withoutstd
, this crate provides limited functionality available underno_std
environments.global_gen
(impliesstd
) enables thenew()
,new_string()
,new_sync()
, andnew_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
~210KB