UUID คืออะไร? คำอธิบายที่สมบูรณ์ของตัวระบุที่ไม่ซ้ำสากล
ตอบด่วน
UUID คือ identifier 128-bit แสดงเป็น 36 อักขระ (hex 32 หลัก และ hyphen 4 ตัว) UUID ไม่ซ้ำโดยไม่ประสานงาน —ความน่าจะเป็น collision น้อยมาก UUID v4 (random) เป็นเวอร์ชันทั่วไป ใช้ UUID Generator ฟรีของเรา
การแนะนำ
UUID (Universally Unique Identifier) หรือ GUID (Globally Unique Identifier) ในคำศัพท์ Microsoft คือ identifier 128-bit ที่เกือบการันตีว่าไม่ซ้ำโดยไม่ต้องประสานงานกลาง UUID กำหนดโดย RFC 4122 ใช้เป็น primary key ฐานข้อมูล, request ID, session token และ identifier ระบบกระจาย เวอร์ชันทั่วไปคือ UUID v4 ที่ใช้ bit สุ่ม
ทีละขั้นตอน
-
ทำความเข้าใจโครงสร้าง UUID
UUID คือ 128 บิต ซึ่งแสดงเป็นเลขฐานสิบหก 32 หลักใน 5 กลุ่ม: 8-4-4-4-12 คั่นด้วยเครื่องหมายขีดกลาง (เช่น 550e8400-e29b-41d4-a716-446655440000) หลักที่ 13 ระบุรุ่น (4 สำหรับ v4) และหลักที่ 17 ระบุรุ่น
-
เรียนรู้เวอร์ชัน UUID
v1: ตามเวลา (การประทับเวลา + ที่อยู่ MAC) — เรียงลำดับเวลาแต่ข้อมูลประจำตัวรั่วไหล v3: ตามชื่อที่มีการแฮช MD5 v4: สุ่ม — พบบ่อยที่สุด ไม่ต้องกังวลเรื่องความเป็นส่วนตัว v5: ตามชื่อที่มีการแฮช SHA-1 v6 และ v7: เรียงลำดับตามเวลาพร้อมความเป็นส่วนตัวที่ได้รับการปรับปรุงมากกว่า v1
-
ทำความเข้าใจความน่าจะเป็นของการชนกัน
UUID v4 มีค่าที่เป็นไปได้ 2^122 ค่า ความน่าจะเป็นที่จะเกิดการชนกันระหว่าง UUID จำนวน 103 ล้านล้าน UUID คือ 50% สำหรับการใช้งานจริง (ID หลายล้านรายการ) ความน่าจะเป็นของการชนกันจะเป็นศูนย์ คุณสามารถสร้าง UUID ได้อย่างอิสระโดยไม่ต้องมีการประสานงาน
-
ใช้ UUID อย่างเหมาะสม
ใช้ v4 สำหรับกรณีการใช้งานเกือบทั้งหมด (รหัสฐานข้อมูล, รหัสคำขอ, โทเค็นเซสชัน) ใช้ v7 หากคุณต้องการ ID ที่เรียงลำดับตามเวลาสำหรับตำแหน่งฐานข้อมูล หลีกเลี่ยง v1 ในบริบทที่คำนึงถึงความปลอดภัย — มันฝังการประทับเวลาและที่อยู่ MAC
ตัวอย่าง
UUID v4 (สุ่ม)
ป้อนข้อมูล: สร้างด้วย crypto.getRandomValues
เอาท์พุต: 550e8400-e29b-41d4-a716-446655440000
UUID v1 (ตามเวลา)
ป้อนข้อมูล: การประทับเวลา + ที่อยู่ MAC
เอาท์พุต: a3bbf0ee-d6e4-11ed-a5b3-3c9703e8b4a1
ไม่มี UUID
ป้อนข้อมูล: All zeros
เอาท์พุต: 00000000-0000-0000-0000-000000000000
ปัญหาทั่วไป
- การใช้ Math.random() สำหรับ UUID —ไม่มีการเข้ารหัสที่ปลอดภัย ใช้ crypto.getRandomValues() หรือ crypto.randomUUID() ในเบราว์เซอร์
- การจัดเก็บ UUID เป็นสตริง — สตริง UUID คือ 36 ไบต์ เก็บไว้เป็นประเภท UUID (16 ไบต์) ซึ่งมีประสิทธิภาพมากกว่า ใช้ประเภท UUID ดั้งเดิมในฐานข้อมูลเมื่อพร้อมใช้งาน
- การใช้ v1 ในบริบทที่คำนึงถึงความปลอดภัย —v1 จะฝังการประทับเวลาและที่อยู่ MAC ไว้ ซึ่งสามารถรั่วไหลข้อมูลเกี่ยวกับเวลาและสถานที่ที่ถูกสร้างขึ้นได้ ใช้ v4 สำหรับการไม่เปิดเผยตัวตน
- สมมติว่า UUID มีลักษณะเฉพาะอย่างแท้จริง - มีลักษณะเฉพาะในทางปฏิบัติ (ความน่าจะเป็นของการชนกันมีน้อยมาก) แต่ไม่รับประกันว่าจะไม่ซ้ำกันในทางคณิตศาสตร์
เคล็ดลับ
- ใช้ UUID v4 สำหรับกรณีการใช้งานเกือบทั้งหมด —เป็นการสุ่ม ไม่ต้องกังวลเรื่องความเป็นส่วนตัว และได้รับการสนับสนุนจากฐานข้อมูลสมัยใหม่ทั้งหมด
- ใช้ crypto.randomUUID() ในเบราว์เซอร์สมัยใหม่สำหรับตัวสร้าง v4 ในตัวที่ไม่มีไลบรารี
- จัดเก็บ UUID เป็นประเภท UUID/GUID ในฐานข้อมูล (16 ไบต์) แทนที่จะเป็นสตริง (36 ไบต์) เพื่อการจัดเก็บและประสิทธิภาพดัชนีที่ดีขึ้น
- ใช้ UUID Generator ของเราเพื่อสร้าง UUID ในเบราว์เซอร์ของคุณได้ทันที ไม่ต้องสมัคร เป็นส่วนตัวโดยสมบูรณ์