uuid la gi

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 độ quý hiếm có một không hai lâu năm 128 bit. Một chuỗi UUID chuẩn chỉnh dùng chữ số hex (octet):

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

Bạn đang xem: uuid la gi

Mục đích của UUID sinh rời khỏi là vị vì:

  • Dữ liệu rộng lớn, loại khóa chủ yếu tự động imcrement cần thiết nhiều byte nhằm lưu rộng lớn. Và khóa chủ yếu loại này sẽ không thích hợp khi tuy nhiên khối hệ thống có tương đối nhiều server, nhiều client đồng thời truy vấn bên trên toàn trái đất.
  • Nếu người sử dụng khóa chủ yếu loại tự động imcrement, rất có thể dễ dàng và đơn giản truy rời khỏi được nhập database sở hữu từng nào record. Thường thấy ở đường đi loại "domain.com/user/12345".

Bởi vậy UUID thành lập nhằm mục đích xử lý những yếu đuối điểm bên trên. Vậy nếu như bạn vừa đủ sức thi công một khối hệ thống với rất nhiều server, đáp ứng mặt hàng tỉ tỉ user hoặc chỉ giản dị và đơn giản là không thích nhằm lộ id ra phía bên ngoài, hãy suy nghĩ cho tới UUID.

Trong bài bác này, tất cả chúng ta tiếp tục nằm trong tìm hiểu hiểu về UUID nhập Java, trải qua class UUID.

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

Chúng tớ nằm trong coi ví dụ về chuỗi UUID:

123e4567-e89b-42d3-a456-556642440000
xxxxxxxx-xxxx-Bxxx-Axxx-xxxxxxxxxxxx

A thay mặt cho tới thay đổi thể (variant) xác lập bố cục tổng quan (layout) của UUID. Tất cả những bit không giống nhập UUID tùy thuộc vào setting của những bit nhập ngôi trường thay đổi thể (variant field). Biến thể được xác lập vị 3 bit cần thiết 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 nhập UUID là 'a '. Tương đương nhị phân của 'a' (=10xx) hiển thị thay đổi thể là 2. B thay mặt cho tới phiên bạn dạng (version). Phiên bạn dạng nhập UUID (giá trị của B) là 4.

Java hỗ trợ những công thức nhằm lôi ra variant (biến thể) và 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 bạn dạng không giống nhau cho tới UUID thay đổi thể 2: Time Based (UUIDv1), DCE Security (UUIDv2), Name Based (UUIDv3 và UUIDv5), Random (UUIDv4).

Xem thêm: dto la gi

Java sở hữu hỗ trợ một implementation cho tới v3 và v4, tuy nhiên cũng hỗ trợ một constructor sẽ giúp người tiêu dùng tạo ra ngẫu nhiên loại UUID nào:

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

Version 3 & 5

Các UUID được tạo ra bằng phương pháp dùng hàm băm của namespace và name. Các toan danh namespace là những UUID tương tự Domain Name System (DNS), Object Identifiers (OIDs), URLs,...

UUID = hash(NAMESPACE_IDENTIFIER + NAME)

Sự khác lạ có một không hai thân ái UUIDv3 và UUIDv5 là Thuật toán băm (Hashing Algorithm) - v3 dùng MD5 (128 bit) trong những lúc v5 dùng SHA-1 (160 bit). Nói một cơ hội giản dị và đơn giản, tất cả chúng ta hạn chế thành quả băm trở thành 128 bit và tiếp sau đó thay cho thế 4 bit cho tới version (phiên bản) và 2 bit cho tới variant (biến thể).

Và đấy là cơ hội tạo ra UUID loại 3 nhập java:

String source = namespace + name;
byte[] bytes = source.getBytes("UTF-8");
UUID uuid = UUID.nameUUIDFromBytes(bytes);

Java ko hỗ trợ implementation cho tới UUID loại 5.

Version 4

Implementation của UUID v4 nhập Java dùng những số tình cờ. Class được java implement là SecureRandom. Nó dùng một độ quý hiếm ko thể dự đoán muốn tạo rời khỏi những số tình cờ nhằm mục đích tách tỷ trọng trùng. Để sinh chuỗi UUID v4, các bạn sử dụng:

Xem thêm: dai hoc ngan hang co tot khong

UUID uuid = UUID.randomUUID();

Bạn rất có thể sinh unique key dùng ‘SHA-256' và 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

Cả UUIDv3 và UUIDv5 đều phải sở hữu những điểm đảm bảo chất lượng tuy nhiên những khối hệ thống không giống nhau rất có thể dẫn đến và một UUID bằng phương pháp dùng và một namespace và name. Chúng cơ bạn dạng được dùng muốn tạo UUID phân cấp cho.

Vì cả nhị hàm băm MD5 và SHA1 đều bị hư đốn, nên tốt nhất có thể khuyện các bạn dùng v5. Nếu các bạn chỉ việc tạo ra UUID giản dị và đơn giản, loại 4 rất có thể đáp ứng nhu cầu đảm bảo chất lượng cho tới phần mềm của doanh nghiệp.