2014-11-05 15:39 i3096 [permalink]
Of the 5 existing versions of UUID, version 4, based on a mostly random value, is most widely in use. Though chances of a collision are astronomically low, it is not nihil. Also key sequentiality is lost.
In this day and age of highly connected systems, and highly standardised administration thereof, these issues are addressed by this proposal, while still using the available provisions made for UUID values.
UUID with value:
after this AND-mask is applied:
consists otherwise of values with this provenance:
A (16 bits): A unique identifier assigned to a corporation, organization or institution that assumes ownership of the software generating the UUIDs, as registered by a single global (online?) registry.
See http://yoy.be/UUIDv6 (for now? see below. if this will find any acceptance and/or could accrue some budget to host something definitive, it'll move)
B (16 bits): A unique identifier assigned to the specific application, database or software suite, as registered by above corporation, organization or institution, optionally also publically registered in the single global registry.
C (16 bits): A unique identifier assigned to the specific instance or installation of this application, database or software suite.
D (12 bits): reserved for future use, use only 000 for now
E (12 bits): A unique identifier assigned to a certain set or collection of entities within this application or database.
F (16 bits): A range identifier assigned from a central storage in the application or database to one single of possibly many sources of UUIDv6 values.
G (32 bits): A unique index into the assigned range.
If the range is depleted by having generated all possible UUID values with this range, and no new range identifier(s) are readily available, the UUID value source should fall back to UUID v4 values, based on 122 random bits.
Optionally the number of bits used by F and G may use a different partition of the total of 48 bits. Take care when making changes to this, so the values generated by the new partition will not collide with any values currently in use.
Listed here for these few first entries, may get moved to a more permanent location later:
0001;(testing/staging/private use);for testing, staging or private use only
0001;0001;(testing/staging/private use);for testing, staging or private use only