1. Đôi nét

UUID (Viết tắt của Universally Unique Identifier), nói một cách khác là GUID (Globally Unique Identifier) là 1 trong những quý giá duy nhất lâu năm 128 bit. Một chuỗi UUID chuẩn sử dụng chữ số hex (octet):

0710a5ca-f57e-11e9-802a-5aa538984bd8

*
Mục đích của UUID xuất hiện là vày vì:

Dữ liệu mập, hình dáng khóa chính auto imcrement phải những byte để lưu giữ hơn. Và khóa bao gồm mẫu mã này sẽ không phù hợp Lúc nhưng khối hệ thống có tương đối nhiều VPS, nhiều client đồng thời truy cập trên toàn quả đât.

Bạn đang xem: Uuid là gì

vì vậy UUID thành lập và hoạt động nhằm mục tiêu hạn chế và khắc phục đa số điểm yếu trên. Vậy nếu như khách hàng vừa sức xây dựng một hệ thống với rất nhiều hệ thống, Ship hàng mặt hàng tỉ tỉ user hoặc chỉ đơn giản và dễ dàng là không muốn để lộ id ra ngoài, hãy nghĩ tới UUID.

Trong bài bác này, chúng ta đã cùng tò mò về UUID vào Java, thông qua class UUID.

2. Cấu trúc chuỗi UUID

Chúng ta thuộc xem ví dụ về chuỗi UUID:

123e4567-e89b-42d3-a456-556642440000xxxxxxxx-xxxx-Bxxx-Axxx-xxxxxxxxxxxxA thay mặt cho đổi thay thể (variant) xác định bố cục (layout) của UUID. Tất cả những bit khác trong UUID phụ thuộc vào setting của các bit vào ngôi trường vươn lên là thể (variant field). Biến thể được xác định vày 3 bit đặc trưng độc nhất của A:

MSB1 MSB2 MSB3 0 X X reserved (0) 1 0 X current variant (2) 1 1 0 reserved for Microsoft (6) 1 1 1 reserved for future (7)Giá trị của A vào UUID là "a ". Tương đương nhị phân của "a" (=10xx) hiển thị biến đổi thể là 2.B thay mặt đại diện mang đến phiên bản (version). Phiên bản trong UUID (giá trị của B) là 4.

Java hỗ trợ những cách tiến hành để đưa ra variant (biến hóa thể) với version (phiên bản) của UUID như sau:

UUID uuid = UUID.randomUUID();int variant = uuid.variant();int version = uuid.version();Đây là 5 phiên phiên bản khác biệt đến UUID trở nên thể 2: Time Based (UUIDv1), DCE Security (UUIDv2), Name Based (UUIDv3 và UUIDv5), Random (UUIDv4).

Xem thêm: Left Outer Join Là Gì - Câu Lệnh Sql Join: Các Loại Join Trong Sql

Java tất cả cung cấp một implementation đến v3 với v4, tuy vậy cũng hỗ trợ một constructor để giúp đỡ người dùng chế tạo ra bất kỳ các loại UUID nào:

UUID uuid = new UUID(long mostSigBits, long leastSigBits);

Version 3 và 5

Các UUID được tạo bằng cách sử dụng hàm băm của namespace và name. Các định danh namespace là những UUID giống hệt như Domain Name System (DNS), Object Identifiers (OIDs), URLs,...

UUID = hash(NAMESPACE_IDENTIFIER + NAME)Sự khác hoàn toàn tuyệt nhất giữa UUIDv3 với UUIDv5 là Thuật toán thù băm (Hashing Algorithm) - v3 áp dụng MD5 (128 bit) trong lúc v5 sử dụng SHA-1 (160 bit).Nói một giải pháp dễ dàng, bọn họ cắt sút tác dụng băm thành 128 bit cùng tiếp nối sửa chữa 4 bit cho version (phiên bản) với 2 bit đến variant (biến chuyển thể).

Và đó là biện pháp sinh sản UUID nhiều loại 3 trong java:

String source = namespace + name;byte<> bytes = source.getBytes("UTF-8");UUID uuid = UUID.nameUUIDFromBytes(bytes);Java ko hỗ trợ implementation mang đến UUID một số loại 5.

Version 4

Implementation của UUID v4 trong Java thực hiện các số bỗng dưng. Class được java implement là SecureRandom. Nó sử dụng một cực hiếm cấp thiết đoán trước nhằm tạo ra những số thiên nhiên nhằm mục tiêu sút Tỷ Lệ trùng.Để sinch chuỗi UUID v4, chúng ta sử dụng:

UUID uuid = UUID.randomUUID();Quý khách hàng hoàn toàn có thể sinch unique key thực hiện ‘SHA-256" và UUID nhỏng sau:

MessageDigest salt = MessageDigest.getInstance("SHA-256");salt.update(UUID.randomUUID().toString().getBytes("UTF-8"));String digest = bytesToHex(salternative text.digest());

3. Kết luận

Cả UUIDv3 với UUIDv5 đều có mọi điểm giỏi nhưng mà những khối hệ thống khác nhau có thể tạo ra cùng một UUID bằng cách sử dụng và một namespace và name. Chúng cơ bản được sử dụng nhằm sản xuất UUID phân cấp cho.

Vì cả nhị hàm băm MD5 cùng SHA1 những bị hư, buộc phải cực tốt kthị trấn bạn sử dụng v5. Nếu chúng ta chỉ việc tạo nên UUID dễ dàng và đơn giản, nhiều loại 4 có thể thỏa mãn nhu cầu tốt đến vận dụng của chúng ta.

Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *