Tạo các Định danh Độc nhất Toàn cầu (UUID) cho nhiều ứng dụng khác nhau. Tạo cả UUID phiên bản 1 (dựa trên thời gian) và UUID phiên bản 4 (ngẫu nhiên) để sử dụng trong các hệ thống phân tán, cơ sở dữ liệu và nhiều hơn nữa.
Một Định danh Độc nhất Toàn cầu (UUID) là một số 128-bit được sử dụng để xác định thông tin trong các hệ thống máy tính. UUID được tiêu chuẩn hóa bởi Quỹ Phần mềm Mở (OSF) như một phần của Môi trường Tính toán Phân tán (DCE). Những định danh này được thiết kế để độc nhất trên cả không gian và thời gian, khiến chúng trở nên lý tưởng cho nhiều ứng dụng trong các hệ thống phân tán và hơn thế nữa.
Công cụ tạo UUID này cho phép bạn tạo ra cả UUID phiên bản 1 (dựa trên thời gian) và phiên bản 4 (ngẫu nhiên). Những định danh này hữu ích trong nhiều tình huống mà việc xác định độc nhất là cần thiết, chẳng hạn như khóa cơ sở dữ liệu, hệ thống phân tán và giao thức mạng.
Một UUID thường được biểu diễn dưới dạng 32 ký tự thập lục phân, được hiển thị trong năm nhóm phân tách bằng dấu gạch ngang, theo hình thức 8-4-4-4-12, tổng cộng là 36 ký tự (32 ký tự alphanumeric và 4 dấu gạch ngang). Ví dụ:
1550e8400-e29b-41d4-a716-446655440000
2
128 bit của một UUID được chia thành các trường cụ thể, mỗi trường mang thông tin khác nhau tùy thuộc vào phiên bản UUID:
Dưới đây là một sơ đồ minh họa cấu trúc UUID:
Có nhiều phiên bản UUID, mỗi phiên bản có phương pháp tạo riêng:
Công cụ này tập trung vào việc tạo ra UUID phiên bản 1 và phiên bản 4.
UUID phiên bản 1 được tạo ra bằng cách sử dụng các thành phần sau:
Công thức để tạo UUID phiên bản 1 có thể được biểu diễn như sau:
1UUID = (timestamp * 2^64) + (clock_sequence * 2^48) + node
2
UUID phiên bản 4 được tạo ra bằng cách sử dụng một bộ sinh số ngẫu nhiên mạnh mẽ về mặt mật mã. Công thức là đơn giản:
1UUID = random_128_bit_number
2
Với các bit cụ thể được đặt để chỉ định phiên bản (4) và biến thể.
UUID có nhiều ứng dụng trong các lĩnh vực khác nhau của khoa học máy tính và kỹ thuật phần mềm:
Khóa cơ sở dữ liệu: UUID thường được sử dụng làm khóa chính trong các cơ sở dữ liệu, đặc biệt trong các hệ thống phân tán nơi nhiều nút có thể tạo ra bản ghi đồng thời.
Hệ thống phân tán: Trong các hệ thống phân tán quy mô lớn, UUID giúp xác định độc nhất các tài nguyên, giao dịch hoặc sự kiện trên nhiều nút hoặc trung tâm dữ liệu.
Địa chỉ nội dung: UUID có thể được sử dụng để tạo ra các định danh độc nhất cho nội dung trong các hệ thống lưu trữ dựa trên địa chỉ nội dung.
Quản lý phiên: Các ứng dụng web thường sử dụng UUID để quản lý phiên người dùng, đảm bảo mỗi phiên đều có một định danh độc nhất.
Xác định thiết bị IoT: Trong các ứng dụng Internet of Things (IoT), UUID có thể được sử dụng để xác định độc nhất từng thiết bị trong một mạng.
Mặc dù UUID được sử dụng rộng rãi, vẫn có các phương pháp thay thế để tạo ra các định danh độc nhất:
ID tự tăng: Đơn giản và thường được sử dụng trong các hệ thống cơ sở dữ liệu đơn, nhưng không phù hợp cho các môi trường phân tán.
ID dựa trên thời gian: Có thể hữu ích cho dữ liệu theo thứ tự thời gian nhưng có thể gặp vấn đề trùng lặp trong các kịch bản có độ đồng thời cao.
ID Snowflake: Được phát triển bởi Twitter, các ID này kết hợp dấu thời gian và số công nhân để tạo ra ID độc nhất trong các hệ thống phân tán.
ULID (Định danh Độc nhất Toàn cầu Có thể Sắp xếp): Một phương pháp thay thế gần đây hơn nhằm trở nên thân thiện hơn với con người và có thể sắp xếp hơn so với UUID.
Khái niệm UUID lần đầu tiên được giới thiệu trong Hệ thống Máy tính Mạng Apollo và sau đó được tiêu chuẩn hóa bởi Quỹ Phần mềm Mở (OSF) như một phần của Môi trường Tính toán Phân tán (DCE) vào những năm 1990. Đặc tả ban đầu được công bố vào năm 1997 dưới dạng ISO/IEC 11578:1996 và sau đó được sửa đổi vào năm 2005 như một phần của ISO/IEC 9834-8:2005.
Các cột mốc quan trọng trong lịch sử UUID:
Theo thời gian, UUID đã trở thành một công cụ thiết yếu trong các hệ thống phân tán và thiết kế cơ sở dữ liệu, với nhiều triển khai và điều chỉnh trên các ngôn ngữ lập trình và nền tảng khác nhau.
Dưới đây là các ví dụ về việc tạo UUID trong các ngôn ngữ lập trình khác nhau:
1import uuid
2
3## Tạo một UUID phiên bản 4 (ngẫu nhiên)
4random_uuid = uuid.uuid4()
5print(f"UUID phiên bản 4: {random_uuid}")
6
7## Tạo một UUID phiên bản 1 (dựa trên thời gian)
8time_based_uuid = uuid.uuid1()
9print(f"UUID phiên bản 1: {time_based_uuid}")
10
1const { v1: uuidv1, v4: uuidv4 } = require('uuid');
2
3// Tạo một UUID phiên bản 4 (ngẫu nhiên)
4const randomUuid = uuidv4();
5console.log(`UUID phiên bản 4: ${randomUuid}`);
6
7// Tạo một UUID phiên bản 1 (dựa trên thời gian)
8const timeBasedUuid = uuidv1();
9console.log(`UUID phiên bản 1: ${timeBasedUuid}`);
10
1import java.util.UUID;
2
3public class UuidGenerator {
4 public static void main(String[] args) {
5 // Tạo một UUID phiên bản 4 (ngẫu nhiên)
6 UUID randomUuid = UUID.randomUUID();
7 System.out.println("UUID phiên bản 4: " + randomUuid);
8
9 // Tạo một UUID phiên bản 1 (dựa trên thời gian)
10 UUID timeBasedUuid = UUID.fromString(new com.eaio.uuid.UUID().toString());
11 System.out.println("UUID phiên bản 1: " + timeBasedUuid);
12 }
13}
14
1require 'securerandom'
2
3## Tạo một UUID phiên bản 4 (ngẫu nhiên)
4random_uuid = SecureRandom.uuid
5puts "UUID phiên bản 4: #{random_uuid}"
6
7## Ruby không có phương thức tích hợp để tạo UUID phiên bản 1
8## Bạn sẽ cần sử dụng một gem như 'uuidtools' cho điều đó
9
1<?php
2// Tạo một UUID phiên bản 4 (ngẫu nhiên)
3$randomUuid = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
4 mt_rand(0, 0xffff), mt_rand(0, 0xffff),
5 mt_rand(0, 0xffff),
6 mt_rand(0, 0x0fff) | 0x4000,
7 mt_rand(0, 0x3fff) | 0x8000,
8 mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
9);
10echo "UUID phiên bản 4: " . $randomUuid . "\n";
11
12// PHP không có phương thức tích hợp để tạo UUID phiên bản 1
13// Bạn sẽ cần sử dụng một thư viện như 'ramsey/uuid' cho điều đó
14?>
15
Khám phá thêm các công cụ có thể hữu ích cho quy trình làm việc của bạn