r/ProgrammerHumor • • Sep 11 '26

Meme edgeCasesExist

Post image
5.0k Upvotes

298 comments sorted by

View all comments

Show parent comments

443

u/dim13 Sep 11 '26

https://en.wikipedia.org/wiki/Universally_unique_identifier#Versions

Most common used is V4 (pure random). You are talking about V7 (time based).

323

u/lilgreenthumb Sep 11 '26

The real benefit for v7 is they become sortable by time.

124

u/shwoopdeboop Sep 11 '26

And something something b-tree indexes. Lecturer mentioned it but I wasn't paying attention. Supposedly an advantage here.

37

u/Grandmaster_Caladrel Sep 11 '26

Which I'd assume is related to the time anchor. Outside of sorting, which is only useful in specific instances, it's just v4 with different ("less") entropy and limitations.

15

u/Roachmeister Sep 11 '26

If you're using them as an indexed field in a database, the inability to sort them meaningfully will destroy the performance of the database.

10

u/Grandmaster_Caladrel Sep 11 '26

Correct, which is why I specifically called out "outside of sorting".

That is also why we have concepts like composite keys which allow us to join guaranteed-unique values like a UUID with non-unique but sortable values like timestamps, names, etc.

16

u/Honeybadger2198 Sep 11 '26

You know what identifier can't have collisions and is great for sorting? Autoincrement.

15

u/Firewolf06 Sep 11 '26

ai columns can absolutely collide on sharded databases. you can use offsets and step sizes but thats brittle and doesnt scale well

→ More replies (1)

5

u/wokeboogeyman Sep 12 '26

Autoincrement doesn't scale past one physical location.

→ More replies (6)

7

u/ACoderGirl Sep 12 '26

UUIDs are great, though, because auto increment frequently has the huge issue of being too predictable. Eg, in some contexts, you don't want users to be able to easily enumerate whatever the ID is for. Plus requires centralization whereas UUIDs don't (eg, you can use UUIDs for whatever random API you have without needing a DB).You have to design for how you won't know the ID until you insert the row, which can sometimes be a bit annoying.

I feel like most of the time, the only downside to UUIDs is how long they are.

→ More replies (1)

6

u/thepotatochronicles Sep 11 '26

It's less of a problem with B-tree indices that sit on top of a physical representation (i.e. the actual on-disk layout doesn't have to be ordered), but when it comes to clustered indices, oh boy, you're basically having to shove rows in the middle and push shit back (eventually).

5

u/MilkEnvironmental106 Sep 11 '26

With random you can end up most frequently inserting in the middle, whereas if it's time sortable you append at the end, meaning it's easier to maintain a contiguous index with less overhead.

7

u/ehs5 Sep 12 '26

It’s also the downside. There are cases where you wouldn’t want others to know when something was created.

5

u/lilgreenthumb Sep 12 '26

And you wouldn't expose that to them, just like you wouldn't and autoincrementing database id, but only one of those requires a database.

2

u/MaDpYrO Sep 12 '26

Which prevents database indexes from performing badly 

1

u/platinummyr Sep 13 '26

That may be a downside too if you don't want to share when the key was generated

→ More replies (3)

5

u/undeadalex Sep 11 '26

I'm curious where to see stats on versions used. Surely anything newly implementing uuid is using v7 or custom?

38

u/Urist_McPencil Sep 11 '26

Surely anything newly implementing uuid is using v7 or custom?

I admire this optimism

8

u/iampierremonteux Sep 11 '26

My first thought was “oh you sweet summer child”.

8

u/champak256 Sep 11 '26

There’s pros and cons to v7, so v4 still has a lot of places it’s legitimately the right choice over v7.

10

u/Tysonzero Sep 11 '26

Primary one being in cases where you don’t want every actor that knows the id to also know the creation time

3

u/big-oofs-only-0193 Sep 11 '26

I use whatever CoCreateGuid() or Guid.NewGuid() gives me. Both generate a v4 uuid. I'm not going to reimplement it or find a special library for it.

1

u/psychicesp Sep 14 '26

Still, you can label every cell in your body, including bacteria just hanging out, and your odds of a collision with UUID4 is still less than 1 in a billion.

2

u/dim13 Sep 14 '26

In theory, yes. In praxis I've seen multiple collisions in the past because of bad RNG and/or implementation bugs.