ksuid
ulid
ksuid | ulid | |
---|---|---|
39 | 4 | |
5,110 | 720 | |
1.5% | 1.0% | |
3.1 | 0.0 | |
almost 2 years ago | over 2 years ago | |
Go | Python | |
MIT License | Apache License 2.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
ksuid
- A brief history of the UUID (2017)
- What happens after 100 years?
-
Zero Downtime Postgres Upgrades
OP here - we avoid sequences in all but one part of our application due to a dependency. We use [KSUIDs][1] and UUID v4 in various places. This one "gotcha" applies to any sequence, so it's worth calling out as general advice when running a migration like this.
[1]: https://segment.com/blog/a-brief-history-of-the-uuid/
-
Bye Sequence, Hello UUIDv7
UUID v4 isn't large enough to prevent collisions, that is why segment.io created https://github.com/segmentio/ksuid which is 160bit vs the 128bit of a UUIDv4.
- You Don't Need UUID
- A Brief History of the UUID
-
Type-safe, K-sortable, globally unique identifier inspired by Stripe IDs
Assuming you don't need to use UUIDv7 (or any UUID's) then https://github.com/segmentio/ksuid provides a much bigger keyspace. You could just append a string prefix if you wanted to namespace, but the chance of collisions of a KSUID is many times smaller than a UUID of any version.
-
Unexpected downsides of UUID keys in PostgreSQL
KSUID's are have temporal-lexicographical order plus 128 bits of entropy, which is more than UUIDv4.
https://github.com/segmentio/ksuid
-
UUIDs are so much better than autoincrementing ids and it's not even close
That's why you use ksuid (https://segment.com/blog/a-brief-history-of-the-uuid/) or, if you're willing to go with a draft spec you could go with the new UUID formats https://www.ietf.org/archive/id/draft-ietf-uuidrev-rfc4122bi...
-
What Happened to UUIDv2?
Interesting in more history of UUIDs? Twilio Segment's blog has an amazing history lesson about how they came to be.
ulid
-
Plan B for UUIDs: double AES-128
I really like ULID for this problem (e.g: https://github.com/ahawker/ulid)
- same number of bytes as UUID
- start with a date, so has great locality. Plus you get extra information in the uid that you can extract.
- can be created from an existing date or uuid, and exported to a uuid, so there is a migration path
-
New UUID Formats from IETF
As the author of a popular ULID implementation in python[1], the spec has no stewardship anymore. The specification repo[2] has plenty of open issues and no real guidance or communication beyond language implementation authors discussing corner cases. The monotonic functionality is ambiguous (at best) and is implemented differently per-languages [3].
Functionality, UUIDv7 might be the _same_ but the hope would be for a more rigid specification for interoperability.
[1]: https://github.com/ahawker/ulid
[2]: https://github.com/ulid/spec
[3]: https://github.com/ulid/spec/issues/11
-
Sortable Collision-Free UUIDs
Looks similar to ULID[0] (I am the author of a popular python implementation[1]).
It appears to have a similar constraint that two ID's generated within the same timestamp (ms, ns) have no strong guarantee of ordering. That might not be a deal breaker depending on your use case but something to consider.
* https://github.com/ulid/spec
* https://github.com/ahawker/ulid
- Usando ULIDs para criar ordem em dados não ordenados
What are some alternatives?
uuid7 - UUID version 7, which are time-sortable (following the Peabody RFC4122 draft)
python-ulid - ULID implementation for Python
nanoid - A tiny and fast Go unique string generator
EXREX - Irregular methods on regular expressions
ulid-mssql - Implementation of ULID generator For Microsoft SQL Server
xeger - Library to generate random strings from regular expressions.