Project

General

Profile

Actions

Feature #19735

closed

Add support for UUID version 7

Added by nevans (Nicholas Evans) about 1 year ago. Updated 10 months ago.

Status:
Closed
Assignee:
-
Target version:
-
[ruby-core:113926]

Description

Although the specification for UUIDv7 is still in draft, the UUIDv7 algorithm has been stable as the RFC progresses to completion.

Version 7 UUIDs can be very useful, because they are lexographically sortable, which can improve e.g: database index locality. See section 6.10 of the draft specification for further explanation:

https://datatracker.ietf.org/doc/draft-ietf-uuidrev-rfc4122bis/

require 'random/formatter'
Random.uuid_v7 # => "0188ca50-fcc0-7881-b5c5-6d55cd8fc373"
Random.uuid_v7 # => "0188ca51-0069-7304-be2e-0c3cd908789b"
Random.uuid_v7 # => "0188ca51-04aa-7b57-a6ec-c49573412a9d"
Random.uuid_v7 # => "0188ca51-0853-7979-ae37-485460e9f4f1"
# or
prng = Random.new
prng.uuid_v7 # => "0188ca51-5e72-7950-a11d-def7ff977c98"

PR here: https://github.com/ruby/securerandom/pull/19

Actions #1

Updated by nevans (Nicholas Evans) about 1 year ago

  • Tracker changed from Bug to Feature
  • Backport deleted (3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN)

Updated by nevans (Nicholas Evans) about 1 year ago

  • Description updated (diff)

I edited the description: the draft RFC URL previously pointed to the 6th revision of draft-ietf-uuidrev-rfc4122bis (https://www.ietf.org/archive/id/draft-ietf-uuidrev-rfc4122bis-06.html). But the 7th revision has already been posted. The URL now points to the IETF Datatracker page (https://datatracker.ietf.org/doc/draft-ietf-uuidrev-rfc4122bis/) which references all drafts and will be updated with a link to the final RFC, once it's accepted.

Updated by nevans (Nicholas Evans) about 1 year ago

  • Description updated (diff)

I hadn't realized that "random/formatter" belonged to securerandom. I closed the ruby PR and created a new PR here: https://github.com/ruby/securerandom/pull/19. There was also another earlier PR which looks almost identical to my original PR: https://github.com/ruby/securerandom/pull/15. I updated my PR to provide an alternative tradeoff: allow up to 12 bits of extra timestamp precision, at the cost of code complexity and a small performance penalty. I personally would be satisfied with either PR.

Updated by usa (Usaku NAKAMURA) 10 months ago

We core committers discussed this issue on DevMeeting, and we accepted it.
Go ahead

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like1Like1