UUID
UUID
UUIDs are just 128 bit
pieces of data, that is displayed as (128/4) = 32 hexadecimal digits
, like this : 2a8a7da6-8bc5-11ed-9228-0242ac140003
Pros
- hide the real number of records that a table may have
Compare different version of the UUID
Version | Features | Using Scenario |
---|---|---|
v1 | Uniqueness , orderable |
Specify the uuid from different device and create time |
v3 | Non-Random UUIDs , MD5 Hash function |
If the namespace and input name are the SAME, then you will get the SAME uuid |
v4 | Randomness , No inherent logic |
the entire uuid is random, irrespective of the time or the device |
v5 | Non-Random UUIDs , SHA1 Hash function |
If the namespace and input name are the SAME, then you will get the SAME uuid |
UUID Example
UUID v1
Uniqueness
,orderable
(device id + time)
Device | UUID v1 |
---|---|
Computer A | 5f7e563c-8bc4-11ed-bec0-aaaaaaaaaaaa |
Computer A | 5f7e62da-8bc4-11ed-bec0-aaaaaaaaaaaa |
Computer A | 5f7e68ca-8bc4-11ed-bec0-aaaaaaaaaaaa |
Computer B | 5f7e563c-8bc4-11ed-bec0-bbbbbbbbbbbb |
Computer B | 5f7e62da-8bc4-11ed-bec0-bbbbbbbbbbbb |
Computer B | 5f7e68ca-8bc4-11ed-bec0-bbbbbbbbbbbb |
UUID v3
Non-Random UUIDs
、MD5 Hash function
Namespace | Name | Example | UUID v3 |
---|---|---|---|
5f7e563c-8bc4-11ed-bec0-0242ac140003 |
KJ |
Uuid::uuid3(’5f7e563c-8bc4-11ed-bec0-0242ac140003 ’, ‘KJ ’) |
bb5fc59b-dda5-34dd-b777-a9219e068fa5 |
5f7e563c-8bc4-11ed-bec0-0242ac140003 |
Kay |
Uuid::uuid3(’5f7e563c-8bc4-11ed-bec0-0242ac140003 ’, ‘Kay ’) |
677dfb56-79c9-3de6-9c36-82114fcc0145 |
5f7e563c-8bc4-11ed-bec0-0242ac140003 |
Jay |
Uuid::uuid3(’5f7e563c-8bc4-11ed-bec0-0242ac140003 ’, ‘Jay ’) |
0edf8586-c0c6-33e2-94ee-e76ac5772e4a |
UUID v4
Randomness
,No inherent logic
Device | UUID v4 |
---|---|
Computer A | 80f84d78-0c88-414c-b05b-dd17ba0ccb65 |
Computer A | 4fc7e6bd-e15a-45f0-884d-bb4cbb0c596f |
Computer A | 31736994-1e92-4714-bd7f-bb3013e5dbfa |
Computer B | 39ff7491-6c66-4a7c-a705-15b1f2b2e138 |
Computer B | 0bd9312c-849b-4c75-96f3-7e2845865da5 |
Computer B | 45474299-f665-456a-900a-f972b2332953 |
UUID v5
Non-Random UUIDs
、SHA1 Hash function
Namespace | Name | Example | UUID v5 |
---|---|---|---|
5f7e563c-8bc4-11ed-bec0-0242ac140003 |
KJ |
Uuid::uuid5(’5f7e563c-8bc4-11ed-bec0-0242ac140003 ’, ‘KJ ’) |
ef6ece10-d825-5a02-b6fa-f56962cd7041 |
5f7e563c-8bc4-11ed-bec0-0242ac140003 |
Kay |
Uuid::uuid5(’5f7e563c-8bc4-11ed-bec0-0242ac140003 ’, ‘Kay ’) |
45786586-5a6c-5903-becb-b29fa77421ac |
5f7e563c-8bc4-11ed-bec0-0242ac140003 |
Jay |
Uuid::uuid5(’5f7e563c-8bc4-11ed-bec0-0242ac140003 ’, ‘Jay ’) |
30858268-a085-5f4f-80a9-940a1a5a306c |
Question
Is there a chance that a UUID could be duplicated?
The short answer is no. With the sheer number of possible combinations (2^128),
it would be almost impossible to generate a duplicate unless you are generating trillions of IDs
EVERY SECOND, for many years.
Store the uuid as string or uuid type?
To put some perspective, an index of UUIDs for a table with 1,000,000 rows would weight around 16MB
. If you stored it like a string, you would have an index weighting around 288MB
. Never store UUID like strings. NEVER.
Reference
- A Complete Guide to UUID Versions (v1, v4, v5) - With Examples
- How to make a GUID
- UUID 原理與實作分析 - 該如何挑選適合的 UUID 版本 | Yuanchieh’s Blog
- Which UUID version to use? - Stack Overflow
- Laravel: The mysterious “Ordered UUID” | by Italo Baeza Cabrera | ITNEXT
- Unix / Epoch Hex Timestamp Conversions
- Unix Hex Timestamp Converter
- Online UUID Generator Tool
- UUID Versions Explained | UUIDTools.com
- UUID Decoder | UUIDTools.com
- Your Guide To UUID In Java | coderolls