สร้างตัวระบุที่ไม่ซ้ำกันทั่วโลก (UUID) สำหรับแอปพลิเคชันต่างๆ สร้าง UUID เวอร์ชัน 1 (ตามเวลา) และเวอร์ชัน 4 (แบบสุ่ม) เพื่อใช้ในระบบกระจาย ฐานข้อมูล และอื่นๆ
UUID (Universally Unique Identifier) เป็นหมายเลข 128 บิตที่ใช้ในการระบุข้อมูลในระบบคอมพิวเตอร์ UUID ได้รับการมาตรฐานโดย Open Software Foundation (OSF) เป็นส่วนหนึ่งของ Distributed Computing Environment (DCE) ตัวระบุเหล่านี้ถูกออกแบบมาให้มีเอกลักษณ์เฉพาะตัวทั้งในเชิงพื้นที่และเวลา ทำให้เหมาะสมกับการใช้งานต่างๆ ในระบบกระจายและอื่นๆ
เครื่องมือสร้าง UUID นี้ช่วยให้คุณสามารถสร้าง UUID เวอร์ชัน 1 (ตามเวลา) และเวอร์ชัน 4 (สุ่ม) ตัวระบุนั้นมีประโยชน์ในสถานการณ์ต่างๆ ที่ต้องการการระบุที่ไม่ซ้ำกัน เช่น คีย์ฐานข้อมูล ระบบกระจาย และโปรโตคอลเครือข่าย
UUID มักจะแสดงเป็น 32 หลักฐานฐานสิบหก แสดงในห้ากลุ่มที่แยกด้วยขีดกลางในรูปแบบ 8-4-4-4-12 รวมทั้งหมด 36 ตัวอักษร (32 ตัวอักษรและ 4 ขีดกลาง) ตัวอย่างเช่น:
1550e8400-e29b-41d4-a716-446655440000
2
128 บิตของ UUID จะแบ่งออกเป็นฟิลด์เฉพาะ โดยแต่ละฟิลด์มีข้อมูลที่แตกต่างกันขึ้นอยู่กับเวอร์ชันของ UUID:
นี่คือแผนภาพที่แสดงโครงสร้าง UUID:
มีหลายเวอร์ชันของ UUID แต่ละเวอร์ชันมีวิธีการสร้างที่แตกต่างกัน:
เครื่องมือนี้มุ่งเน้นไปที่การสร้าง UUID เวอร์ชัน 1 และเวอร์ชัน 4
UUID เวอร์ชัน 1 ถูกสร้างขึ้นโดยใช้ส่วนประกอบต่อไปนี้:
สูตรในการสร้าง UUID เวอร์ชัน 1 สามารถแสดงได้ดังนี้:
1UUID = (timestamp * 2^64) + (clock_sequence * 2^48) + node
2
UUID เวอร์ชัน 4 ถูกสร้างขึ้นโดยใช้เครื่องกำเนิดหมายเลขสุ่มที่มีความแข็งแกร่งทางการเข้ารหัส สูตรคือ:
1UUID = random_128_bit_number
2
โดยมีบิตเฉพาะที่ถูกตั้งค่าเพื่อระบุเวอร์ชัน (4) และตัวแปร
UUID มีการใช้งานมากมายในหลายโดเมนของวิทยาการคอมพิวเตอร์และวิศวกรรมซอฟต์แวร์:
คีย์ฐานข้อมูล: UUID มักถูกใช้เป็นคีย์หลักในฐานข้อมูล โดยเฉพาะในระบบกระจายที่หลายโหนดอาจสร้างบันทึกพร้อมกัน
ระบบกระจาย: ในระบบกระจายขนาดใหญ่ UUID ช่วยในการระบุทรัพยากร ธุรกรรม หรือเหตุการณ์อย่างไม่ซ้ำกันในหลายโหนดหรือศูนย์ข้อมูล
การระบุเนื้อหา: UUID สามารถใช้ในการสร้างตัวระบุที่ไม่ซ้ำกันสำหรับเนื้อหาในระบบจัดเก็บข้อมูลที่อิงตามที่อยู่
การจัดการเซสชัน: แอปพลิเคชันเว็บมักใช้ UUID เพื่อจัดการเซสชันของผู้ใช้ โดยมั่นใจว่าแต่ละเซสชันมีตัวระบุที่ไม่ซ้ำกัน
การระบุอุปกรณ์ IoT: ในแอปพลิเคชัน Internet of Things (IoT) UUID สามารถใช้ในการระบุอุปกรณ์แต่ละตัวในเครือข่ายอย่างไม่ซ้ำกัน
แม้ว่า UUID จะถูกใช้อย่างแพร่หลาย แต่ก็มีแนวทางทางเลือกในการสร้างตัวระบุที่ไม่ซ้ำกัน:
ID ที่เพิ่มขึ้นอัตโนมัติ: ง่ายและใช้บ่อยในระบบฐานข้อมูลเดียว แต่ไม่เหมาะสำหรับสภาพแวดล้อมที่กระจาย
ID ที่อิงตามเวลา: สามารถมีประโยชน์สำหรับข้อมูลที่เรียงตามเวลา แต่สามารถพบปัญหาการชนกันในสถานการณ์ที่มีการเข้าถึงพร้อมกันสูง
Snowflake IDs: พัฒนาโดย Twitter ID เหล่านี้รวมเวลาที่ระบุและหมายเลขของผู้ทำงานเพื่อสร้าง ID ที่ไม่ซ้ำกันในระบบกระจาย
ULID (Universally Unique Lexicographically Sortable Identifier): ทางเลือกที่ใหม่กว่าที่มุ่งหวังให้เป็นมิตรกับมนุษย์และเรียงลำดับได้มากกว่า UUID
แนวคิดของ UUID ถูกนำเสนอครั้งแรกใน Apollo Network Computing System และต่อมาได้รับการมาตรฐานโดย Open Software Foundation (OSF) เป็นส่วนหนึ่งของ Distributed Computing Environment (DCE) ในปี 1990 สเปคเริ่มต้นถูกเผยแพร่ในปี 1997 ในฐานะ ISO/IEC 11578:1996 และต่อมาได้รับการแก้ไขในปี 2005 เป็นส่วนหนึ่งของ ISO/IEC 9834-8:2005
เหตุการณ์สำคัญในประวัติศาสตร์ของ UUID:
เมื่อเวลาผ่านไป UUID ได้กลายเป็นเครื่องมือที่สำคัญในระบบกระจายและการออกแบบฐานข้อมูล โดยมีการใช้งานและการปรับใช้ที่หลากหลายในภาษาการเขียนโปรแกรมและแพลตฟอร์มต่างๆ
นี่คือตัวอย่างการสร้าง UUID ในภาษาการเขียนโปรแกรมต่างๆ:
1import uuid
2
3## สร้าง UUID เวอร์ชัน 4 (สุ่ม)
4random_uuid = uuid.uuid4()
5print(f"UUID เวอร์ชัน 4: {random_uuid}")
6
7## สร้าง UUID เวอร์ชัน 1 (ตามเวลา)
8time_based_uuid = uuid.uuid1()
9print(f"UUID เวอร์ชัน 1: {time_based_uuid}")
10
1const { v1: uuidv1, v4: uuidv4 } = require('uuid');
2
3// สร้าง UUID เวอร์ชัน 4 (สุ่ม)
4const randomUuid = uuidv4();
5console.log(`UUID เวอร์ชัน 4: ${randomUuid}`);
6
7// สร้าง UUID เวอร์ชัน 1 (ตามเวลา)
8const timeBasedUuid = uuidv1();
9console.log(`UUID เวอร์ชัน 1: ${timeBasedUuid}`);
10
1import java.util.UUID;
2
3public class UuidGenerator {
4 public static void main(String[] args) {
5 // สร้าง UUID เวอร์ชัน 4 (สุ่ม)
6 UUID randomUuid = UUID.randomUUID();
7 System.out.println("UUID เวอร์ชัน 4: " + randomUuid);
8
9 // สร้าง UUID เวอร์ชัน 1 (ตามเวลา)
10 UUID timeBasedUuid = UUID.fromString(new com.eaio.uuid.UUID().toString());
11 System.out.println("UUID เวอร์ชัน 1: " + timeBasedUuid);
12 }
13}
14
1require 'securerandom'
2
3## สร้าง UUID เวอร์ชัน 4 (สุ่ม)
4random_uuid = SecureRandom.uuid
5puts "UUID เวอร์ชัน 4: #{random_uuid}"
6
7## Ruby ไม่มีวิธีในตัวสำหรับ UUID เวอร์ชัน 1
8## คุณจะต้องใช้ gem เช่น 'uuidtools' สำหรับสิ่งนั้น
9
1<?php
2// สร้าง UUID เวอร์ชัน 4 (สุ่ม)
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 เวอร์ชัน 4: " . $randomUuid . "\n";
11
12// PHP ไม่มีวิธีในตัวสำหรับ UUID เวอร์ชัน 1
13// คุณจะต้องใช้ไลบรารีเช่น 'ramsey/uuid' สำหรับสิ่งนั้น
14?>
15
ค้นพบเครื่องมือเพิ่มเติมที่อาจมีประโยชน์สำหรับการทำงานของคุณ