UUID长度(以及JAVA生成短8位UUID)

一、UUID的介绍

UUID(Universally Unique Identifier)是一个32位数字,在所有计算机中都可以唯一识别。它由36个字符组成,用于标识个体,类似于身份证,但具有全球唯一性。

UUID一般由以下几部分构成:时间戳、分隔符、版本号、分隔符、节点标识符等。

const uuidv1 = require('uuid/v1');
const uuidv4 = require('uuid/v4');

console.log(uuidv1()); // 时间戳+MAC地址+随机数生成的UUID
console.log(uuidv4()); // 随机生成的UUID

二、UUID长度

UUID的长度是由其中的字符数量决定的。普遍使用的UUID为36个字符,但并不代表所有UUID长度都是这样。以下介绍几种常见的UUID长度。

1. UUIDv1

UUIDv1是由时间戳、MAC地址和随机数生成的,长度为36个字符。

example: 550e8400-e29b-41d4-a716-446655440000

2. UUIDv3和v5

UUIDv3和v5是由命名空间、名称和哈希值生成的,长度也是36个字符。

example: 6ba7b810-9dad-11d1-80b4-00c04fd430c8

3. UUIDv4

UUIDv4是完全随机生成的,长度也是36个字符。

example: 1bd7a26f-c617-4e88-94ed-5ecf3b566ad4

三、UUID长度对于数据库的影响

UUID的长度与数据库索引有着密切的关系。如果UUID长度太长,将会导致索引效率低下。因此,需要在生成UUID时注意选择合适的版本。

1. UUIDv1与索引

UUIDv1中的时间信息可以保证UUID的有序性,因此在大数据的场景下,使用UUIDv1可以提升数据库的查询效率。但UUIDv1的节点标识符长度为12个字符,且随机生成的MAC地址通常为6个字符。若在使用UUIDv1的同时,不进行节点标识符的截取或者替换,则将导致索引效率低下。

example: 550e8400-e29b-41d4-a716-446655440000

2. UUIDv4与索引

UUIDv4完全随机生成,节点标识符和时间信息均为随机值,因此不容易出现相同的UUID。但UUIDv4中包含了多次分隔符,使得UUID长度变长,可能导致索引效率低下。

example: 1bd7a26f-c617-4e88-94ed-5ecf3b566ad4

四、结论

UUID的长度可以从版本和索引两个方面进行控制。在大数据的场景下,UUIDv1比UUIDv4更适合进行索引,但需要注意节点标识符长度。

// 获取UUIDv1中的节点标识符
const mac = uuidv1().split('-')[3];

// 将节点标识符截取为3个字符
const node = mac.substring(0, 3);

// 将节点标识符替换为3个字符的随机字符串
const node = uuidv4().substring(0, 3);

Published by

风君子

独自遨游何稽首 揭天掀地慰生平