1. Đôi nét

UUID (Viết tắt của Universally unique Identifier), còn được gọi là GUID (Globally unique Identifier) là 1 giá trị duy nhất dài 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 sinh ra là vì vì:

Dữ liệu lớn, hình dạng khóa chính tự động imcrement yêu cầu nhiều byte để lưu hơn. Cùng khóa thiết yếu kiểu này không tương xứng khi nhưng hệ thống có khá nhiều server, các client cùng lúc truy vấn trên toàn ráng giới.

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

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

Bởi vậy UUID ra đời nhằm mục đích khắc phục đều yếu điểm trên. Vậy nếu như bạn đủ sức xây dựng một hệ thống với những server, ship hàng 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 suy nghĩ tới UUID.

Trong bài bác này, bọn họ sẽ cùng khám phá về UUID trong Java, trải qua class UUID.

2. Cấu tạo chuỗi UUID

Chúng ta cùng xem ví dụ như về chuỗi UUID:

123e4567-e89b-42d3-a456-556642440000xxxxxxxx-xxxx-Bxxx-Axxx-xxxxxxxxxxxxA thay mặt cho đổi thay thể (variant) khẳng định bố viên (layout) của UUID. Tất cả các bit không giống trong UUID phụ thuộc vào vào setting của những bit trong trường phát triển thành thể (variant field). Thay đổi thể được xác minh bởi 3 bit quan trọng 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 trong UUID là "a ". Tương tự nhị phân của "a" (=10xx) hiển thị đổi mới thể là 2.B thay mặt cho phiên bạn dạng (version). Phiên bạn dạng trong UUID (giá trị của B) là 4.

Java hỗ trợ các phương thức để mang ra variant (biến thể) với version (phiên bản) của UUID như sau:

Java có cung ứng một implementation mang lại v3 và v4, dẫu vậy cũng cung cấp một constructor sẽ giúp đỡ người cần sử dụng tạo bất kỳ 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 phương pháp sử dụng hàm băm của namespace cùng name. Các định danh namespace là những UUID hệt như Domain Name System (DNS), Object Identifiers (OIDs), URLs,...

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

Và đấy là cách tạo thành UUID nhiều loại 3 vào java:

String source = namespace + name;byte bytes = source.getBytes("UTF-8");UUID uuid = UUID.nameUUIDFromBytes(bytes);Java không cung ứng implementation đến UUID các loại 5.

Xem thêm: Back Order Là Gì - Giải Đáp Order Là Gì

Version 4

Implementation của UUID v4 trong Java sử dụng những số ngẫu nhiên. Class được java implement là SecureRandom. Nó sử dụng một giá trị cần thiết đoán trước để tạo nên các số ngẫu nhiên nhằm mục đích giảm xác suất trùng.Để sinh chuỗi UUID v4, chúng ta sử dụng:

UUID uuid = UUID.randomUUID();Bạn có thể sinh unique key áp dụng ‘SHA-256" cùng UUID như sau:

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

3. Kết luận

Vì cả nhị hàm băm MD5 cùng SHA1 đầy đủ bị hỏng, nên tốt nhất khuyện bạn áp dụng v5. Giả dụ bạn chỉ việc tạo UUID đối chọi giản, các loại 4 rất có thể đáp ứng tốt cho áp dụng của bạn.