Package: uuid6
uuid6New time-based UUID formats which are suited for use as a database key.This module extends immutable UUID objects (the UUID class) with the functionsuuid6(),uuid7(), anduuid8()fromthe IETF draft.Installpipinstalluuid6Usageimportuuid6my_uuid=uuid6.uuid6()print(my_uuid)assertmy_uuid<uuid6.uuid6()my_uuid=uuid6.uuid7()print(my_uuid)assertmy_uuid<uuid6.uuid7()my_uuid=uuid6.uuid8()print(my_uuid)assertmy_uuid<uuid6.uuid8()importuuidmy_uuid=uuid.UUID(hex="C232AB00-9414-11EC-B3C8-9E6BDECED846")assertuuid6.uuid1_to_uuid6(my_uuid)==uuid.UUID(hex="1EC9414C-232A-6B00-B3C8-9E6BDECED846")Which UUID version should I use?Implementations SHOULD utilize UUID version 7 over UUID version 1 and 6 if possible.UUID version 7 features a time-ordered value field derived from the widely implemented and well known Unix Epoch timestamp source, the number of milliseconds since midnight 1 Jan 1970 UTC, leap seconds excluded. As well as improved entropy characteristics over versions 1 or 6.If your use case requires greater granularity than UUID version 7 can provide, you might consider UUID version 8. UUID version 8 doesn't provide as good entropy characteristics as UUID version 7, but it utilizes timestamp with nanosecond level of precision.Functionsuuid6.uuid1_to_uuid6(uuid1)Generate a UUID version 6 object from a UUID version 1 object.uuid6.uuid6(node=None,clock_seq=None)Generate a UUID from a host ID, sequence number, and the current time. Ifnodeis not given, a random 48-bit number is chosen. Ifclock_seqis given, it is used as the sequence number; otherwise a random 14-bit sequence number is chosen.uuid6.uuid7()Generate a UUID from a random number, and the current time.uuid6.uuid8()Generate a UUID from a random number, and the current time.UUID Version 6UUID version 6 is a field-compatible version of UUIDv1, reordered for improved DB locality. It is expected that UUIDv6 will primarily be used in contexts where there are existing v1 UUIDs. Systems that do not involve legacy UUIDv1SHOULDuse UUIDv7 instead.UUIDv6 Field and Bit Layout0                   1                   2                   3
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |                           time_high                           |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |           time_mid            |  ver  |       time_low        |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |var|         clock_seq         |             node              |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |                              node                             |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+UUID Version 7UUID version 7 features a time-ordered value field derived from the widely implemented and well known Unix Epoch timestamp source, the number of milliseconds seconds since midnight 1 Jan 1970 UTC, leap seconds excluded. UUID version 7 also has improved entropy characteristics over versions 1 or 6.UUIDv7 Field and Bit Layout0                   1                   2                   3
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |                           unix_ts_ms                          |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |          unix_ts_ms           |  ver  |       rand_a          |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |var|                        rand_b                             |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |                            rand_b                             |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+UUID Version 8UUID version 8 provides an RFC-compatible format for experimental or vendor-specific use cases.This implementation ofuuid8()sacrifices some entropy for granularity compared touuid7(), while being otherwise compatible.UUIDv8 Field and Bit Layout0                   1                   2                   3
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |                           unix_ts_ms                          |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |          unix_ts_ms           |  ver  |      subsec_a         |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |var|   subsec_b    |         rand                              |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |                             rand                              |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+unix_ts_ms: 48 bit big-endian unsigned number of Unix epoch timestamp with millisecond level of precisionver: The 4 bit UUIDv8 version (1000)subsec_a: 12 bits allocated to sub-second precision valuesvar: 2 bit UUID variant (10)subsec_b: 8 bits allocated to sub-second precision valuesrand: The remaining 54 bits are filled withcryptographically strong random data20 extra bits dedicated to sub-second precision provide nanosecond resolution. Theunix_ts_ms,subsec_a,  andsubsec_bfields guarantee the order of UUIDs generated within the same nanosecond by monotonically incrementing the timer.PerformanceRun the shell scriptbench.shto test on your own machine.ResultsMacBook Air 2020Python 3.10.4
Mean +- std dev: 870 ns +- 11 ns
Mean +- std dev: 1.17 us +- 0.01 us
Mean +- std dev: 2.18 us +- 0.02 us
Mean +- std dev: 1.60 us +- 0.02 us
Mean +- std dev: 1.78 us +- 0.02 us
+-----------+--------+-----------------------+-----------------------+-----------------------+-----------------------+
| Benchmark | uuid1  | uuid4                 | uuid6                 | uuid7                 | uuid8                 |
+===========+========+=======================+=======================+=======================+=======================+
| timeit    | 870 ns | 1.17 us: 1.35x slower | 2.18 us: 2.51x slower | 1.60 us: 1.84x slower | 1.78 us: 2.04x slower |
+-----------+--------+-----------------------+-----------------------+-----------------------+-----------------------+