Ulid
ulid-mssql
Ulid | ulid-mssql | |
---|---|---|
2 | 1 | |
842 | 40 | |
4.3% | - | |
5.9 | 4.2 | |
13 days ago | 4 months ago | |
C# | TSQL | |
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.
Ulid
-
How to use performant Guid as primary keys in databases. UUID Version 7 to the rescue!
Side note, an interesting thing to add to your benchmarks would be ULID https://github.com/Cysharp/Ulid
-
New UUID Formats – IETF Draft
I’m using Postgres so I actually have it a little easier with its native sort order. I switched from NUlid that I was using from years back to this one [0], and the default .ToGuid() gets the desired sort order when used with Npgsql. Likewise though, no db-side generation of uuid - then again, isn’t that the benefit of using globally unique identifiers in the first place, to avoid needing to rely on the db to generate conflict-free identifiers, skipping HiLo or sequences, etc.
Anyway, nice to meet another .NET Ulid user in the wild!
0: https://github.com/Cysharp/Ulid
ulid-mssql
-
New UUID Formats – IETF Draft
Yeah, it's a small world.
I actually took the opposite path and explored several of the micro-optimized ULID libraries in C# before settling down with NUlid which I decided had the cleanest API and documentation (and reasonably good response times to GitHub issues). The implementation of Cysharp's lib has a lot of Unsafe code, which I understand why they took that path (given the focus on Unity code), but I'm hesitant about it and I liked a lot better (conceptually) how much more Span code mcb2001's CSharp.Ulid library had and if I were to micro-optimize a library that's much more the path that I would take. (But so far micro-optimizations of that sort haven't been a priority in my real world usage and I'll take the well tested library with the nice API.) I created a couple simple extension methods to do the specific "ToSqlGuid()" and "ToUlidFromSql()" that I desired for the SQL Server sort order. (Which is just shuffling the first six bytes of a ULID byte array to the end of the GUID byte array and vice versa.)
I actually trust that I can at least generate ULIDs in SQL Server, again because the part I care to be sorted/needs to be correct (the timestamp) fits into the non-endian-issue portion of a GUID in SQL Server. I've been using just the generator function from ulid-mssql [1] (I used it mostly just for DB migrations and it was nice to have for that). It was debugging the endian issues and Base-32 encoding issues of the "ULID GUID to string" functions where I gave up and decided I didn't trust doing that in database.
[1] https://github.com/rmalayter/ulid-mssql
What are some alternatives?
uuid6-ietf-draft - Next Generation UUID Formats
ksuid - K-Sortable Globally Unique IDs
uulid.go - ULID-UUID compatibility library for generating and parsing ULIDs.
Entity Framework - EF Core is a modern object-database mapper for .NET. It supports LINQ queries, change tracking, updates, and schema migrations.
lexid - fast lexicographically orderable/sortable ID generator
shortuuid.rb - Convert UUIDs & numbers into space efficient and URL-safe Base62 strings, or any other alphabet.
shortuuid.go - Encode large numbers and UUIDs into space efficient strings
shortuuid - A generator library for concise, unambiguous and URL-safe UUIDs.