เครื่องสร้าง UUID
UUID ที่สร้างขึ้น
UUID Generator
Introduction
UUID (Universally Unique Identifier) เป็นหมายเลข 128 บิตที่ใช้ในการระบุข้อมูลในระบบคอมพิวเตอร์ UUID ได้รับการมาตรฐานโดย Open Software Foundation (OSF) เป็นส่วนหนึ่งของ Distributed Computing Environment (DCE) ตัวระบุเหล่านี้ถูกออกแบบมาให้มีเอกลักษณ์เฉพาะตัวทั้งในเชิงพื้นที่และเวลา ทำให้เหมาะสมกับการใช้งานต่างๆ ในระบบกระจายและอื่นๆ
เครื่องมือสร้าง UUID นี้ช่วยให้คุณสามารถสร้าง UUID เวอร์ชัน 1 (ตามเวลา) และเวอร์ชัน 4 (สุ่ม) ตัวระบุนั้นมีประโยชน์ในสถานการณ์ต่างๆ ที่ต้องการการระบุที่ไม่ซ้ำกัน เช่น คีย์ฐานข้อมูล ระบบกระจาย และโปรโตคอลเครือข่าย
How UUIDs Work
UUID Structure
UUID มักจะแสดงเป็น 32 หลักฐานฐานสิบหก แสดงในห้ากลุ่มที่แยกด้วยขีดกลางในรูปแบบ 8-4-4-4-12 รวมทั้งหมด 36 ตัวอักษร (32 ตัวอักษรและ 4 ขีดกลาง) ตัวอย่างเช่น:
550e8400-e29b-41d4-a716-446655440000
128 บิตของ UUID จะแบ่งออกเป็นฟิลด์เฉพาะ โดยแต่ละฟิลด์มีข้อมูลที่แตกต่างกันขึ้นอยู่กับเวอร์ชันของ UUID:
- 32 บิตสำหรับฟิลด์ time_low
- 16 บิตสำหรับฟิลด์ time_mid
- 16 บิตสำหรับฟิลด์ time_hi_and_version
- 8 บิตสำหรับฟิลด์ clock_seq_hi_and_reserved
- 8 บิตสำหรับฟิลด์ clock_seq_low
- 48 บิตสำหรับฟิลด์ node
นี่คือแผนภาพที่แสดงโครงสร้าง UUID:
UUID Versions
มีหลายเวอร์ชันของ UUID แต่ละเวอร์ชันมีวิธีการสร้างที่แตกต่างกัน:
- เวอร์ชัน 1 (ตามเวลา): ใช้เวลาปัจจุบันและที่อยู่ MAC ของคอมพิวเตอร์
- เวอร์ชัน 2 (DCE Security): คล้ายกับเวอร์ชัน 1 แต่รวมถึงตัวระบุโดเมนท้องถิ่น
- เวอร์ชัน 3 (ตามชื่อ, MD5): สร้างโดยการแฮชตัวระบุเนมสเปซและชื่อ
- เวอร์ชัน 4 (สุ่ม): สร้างโดยใช้หมายเลขสุ่มหรือหมายเลขสุ่มเทียม
- เวอร์ชัน 5 (ตามชื่อ, SHA-1): คล้ายกับเวอร์ชัน 3 แต่ใช้การแฮช SHA-1
เครื่องมือนี้มุ่งเน้นไปที่การสร้าง UUID เวอร์ชัน 1 และเวอร์ชัน 4
Formula
Version 1 UUID Generation
UUID เวอร์ชัน 1 ถูกสร้างขึ้นโดยใช้ส่วนประกอบต่อไปนี้:
- Timestamp: ค่าที่เป็น 60 บิตที่แสดงถึงจำนวนช่วงเวลา 100 นาโนวินาทีตั้งแต่วันที่ 15 ตุลาคม 1582 (วันที่มีการปฏิรูปเกรกอเรียนในปฏิทินคริสต์)
- Clock sequence: ค่าที่เป็น 14 บิตที่ใช้เพื่อหลีกเลี่ยงการซ้ำซ้อนในกรณีที่นาฬิกาถูกตั้งกลับ
- Node: ค่าที่เป็น 48 บิต ซึ่งมักจะได้มาจากที่อยู่ MAC ของคอมพิวเตอร์
สูตรในการสร้าง UUID เวอร์ชัน 1 สามารถแสดงได้ดังนี้:
UUID = (timestamp * 2^64) + (clock_sequence * 2^48) + node
Version 4 UUID Generation
UUID เวอร์ชัน 4 ถูกสร้างขึ้นโดยใช้เครื่องกำเนิดหมายเลขสุ่มที่มีความแข็งแกร่งทางการเข้ารหัส สูตรคือ:
UUID = random_128_bit_number
โดยมีบิตเฉพาะที่ถูกตั้งค่าเพื่อระบุเวอร์ชัน (4) และตัวแปร
Use Cases
UUID มีการใช้งานมากมายในหลายโดเมนของวิทยาการคอมพิวเตอร์และวิศวกรรมซอฟต์แวร์:
-
คีย์ฐานข้อมูล: UUID มักถูกใช้เป็นคีย์หลักในฐานข้อมูล โดยเฉพาะในระบบกระจายที่หลายโหนดอาจสร้างบันทึกพร้อมกัน
-
ระบบกระจาย: ในระบบกระจายขนาดใหญ่ UUID ช่วยในการระบุทรัพยากร ธุรกรรม หรือเหตุการณ์อย่างไม่ซ้ำกันในหลายโหนดหรือศูนย์ข้อมูล
-
การระบุเนื้อหา: UUID สามารถใช้ในการสร้างตัวระบุที่ไม่ซ้ำกันสำหรับเนื้อหาในระบบจัดเก็บข้อมูลที่อิงตามที่อยู่
-
การจัดการเซสชัน: แอปพลิเคชันเว็บมักใช้ UUID เพื่อจัดการเซสชันของผู้ใช้ โดยมั่นใจว่าแต่ละเซสชันมีตัวระบุที่ไม่ซ้ำกัน
-
การระบุอุปกรณ์ IoT: ในแอปพลิเคชัน Internet of Things (IoT) UUID สามารถใช้ในการระบุอุปกรณ์แต่ละตัวในเครือข่ายอย่างไม่ซ้ำกัน
Alternatives
แม้ว่า UUID จะถูกใช้อย่างแพร่หลาย แต่ก็มีแนวทางทางเลือกในการสร้างตัวระบุที่ไม่ซ้ำกัน:
-
ID ที่เพิ่มขึ้นอัตโนมัติ: ง่ายและใช้บ่อยในระบบฐานข้อมูลเดียว แต่ไม่เหมาะสำหรับสภาพแวดล้อมที่กระจาย
-
ID ที่อิงตามเวลา: สามารถมีประโยชน์สำหรับข้อมูลที่เรียงตามเวลา แต่สามารถพบปัญหาการชนกันในสถานการณ์ที่มีการเข้าถึงพร้อมกันสูง
-
Snowflake IDs: พัฒนาโดย Twitter ID เหล่านี้รวมเวลาที่ระบุและหมายเลขของผู้ทำงานเพื่อสร้าง ID ที่ไม่ซ้ำกันในระบบกระจาย
-
ULID (Universally Unique Lexicographically Sortable Identifier): ทางเลือกที่ใหม่กว่าที่มุ่งหวังให้เป็นมิตรกับมนุษย์และเรียงลำดับได้มากกว่า UUID
History
แนวคิดของ 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:
- 1980s: Apollo Computer พัฒนาคอนเซ็ปต์ UUID สำหรับระบบการคอมพิวเตอร์เครือข่ายของพวกเขา
- 1997: สเปค UUID แรกถูกเผยแพร่ในฐานะ ISO/IEC 11578:1996
- 2005: สเปค UUID ได้รับการแก้ไขและเผยแพร่เป็นส่วนหนึ่งของ ISO/IEC 9834-8:2005
- 2009: RFC 4122 กำหนดรูปแบบ UUID และอัลกอริธึมการสร้างที่ใช้ในปัจจุบัน
เมื่อเวลาผ่านไป UUID ได้กลายเป็นเครื่องมือที่สำคัญในระบบกระจายและการออกแบบฐานข้อมูล โดยมีการใช้งานและการปรับใช้ที่หลากหลายในภาษาการเขียนโปรแกรมและแพลตฟอร์มต่างๆ
Code Examples
นี่คือตัวอย่างการสร้าง UUID ในภาษาการเขียนโปรแกรมต่างๆ:
import uuid
## สร้าง UUID เวอร์ชัน 4 (สุ่ม)
random_uuid = uuid.uuid4()
print(f"UUID เวอร์ชัน 4: {random_uuid}")
## สร้าง UUID เวอร์ชัน 1 (ตามเวลา)
time_based_uuid = uuid.uuid1()
print(f"UUID เวอร์ชัน 1: {time_based_uuid}")
References
- Leach, P., Mealling, M., & Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://tools.ietf.org/html/rfc4122
- International Organization for Standardization. (2005). Information technology – Open Systems Interconnection – Procedures for the operation of OSI Registration Authorities: Generation and registration of Universally Unique Identifiers (UUIDs) and their use as ASN.1 Object Identifier components. ISO/IEC 9834-8:2005. https://www.iso.org/standard/62795.html
- Universally unique identifier. (2023). In Wikipedia. https://en.wikipedia.org/wiki/Universally_unique_identifier
- Snowflake ID. (2023). In Wikipedia. https://en.wikipedia.org/wiki/Snowflake_ID
- ULID Spec. (n.d.). GitHub. https://github.com/ulid/spec