คำจำกัดความ
UUID คืออะไร?
UUID (Universally Unique Identifier) หรือ GUID (Globally Unique Identifier) คือรหัสเฉพาะที่มีความยาว 128 บิต ใช้สำหรับระบุข้อมูลอย่างไม่ซ้ำกัน โดยไม่ต้องอาศัยศูนย์กลาง
UUID v4 สร้างจากตัวเลขสุ่ม มีรูปแบบ xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx โดย x เป็นเลขฐาน 16 ที่สุ่ม และ y เป็น 8, 9, a หรือ b
ใช้งาน
ใช้งาน UUID ที่ไหนบ้าง?
UUID ถูกใช้งานอย่างแพร่หลายในระบบซอฟต์แวร์สมัยใหม่ ตั้งแต่ฐานข้อมูลไปจนถึงระบบกระจาย (distributed systems) ตัวอย่างการใช้งานที่พบบ่อย ได้แก่:
- Primary Key ในฐานข้อมูล (แทน auto-increment)
- Session ID และ Token สำหรับ authentication
- Tracking ID สำหรับ analytics และ logging
- File naming เพื่อป้องกันชื่อซ้ำ
- Distributed systems ที่ต้องการ ID ที่ไม่ซ้ำกันจากหลายเซิร์ฟเวอร์
เวอร์ชัน
UUID เวอร์ชันต่างๆ
UUID มีหลายเวอร์ชัน แต่ละเวอร์ชันมีวิธีสร้างและจุดประสงค์ที่แตกต่างกัน เวอร์ชันที่นิยมใช้มากที่สุดคือ v4 ซึ่งสร้างจากตัวเลขสุ่ม:
- v1 — สร้างจาก timestamp + MAC address
- v3 — สร้างจาก namespace + name (MD5 hash)
- v4 — สร้างจากตัวเลขสุ่ม (ใช้มากที่สุด)
- v5 — สร้างจาก namespace + name (SHA-1 hash)
- v7 — สร้างจาก timestamp + random (ใหม่ เรียงตามเวลาได้)
กรณีใช้งานจริง
กรณีใช้งานจริง
- สร้าง primary key สำหรับ record ใหม่ในฐานข้อมูล PostgreSQL หรือ MongoDB แทนการใช้ auto-increment
- ตั้งชื่อไฟล์ที่อัปโหลดบน S3 หรือ cloud storage เพื่อป้องกันชื่อซ้ำและเดา URL ไม่ได้
- สร้าง correlation ID สำหรับ request tracing ใน microservices เพื่อติดตาม request ข้าม service
- กำหนด idempotency key สำหรับ payment API เพื่อป้องกันการทำรายการซ้ำเมื่อ network retry
- สร้าง session token สำหรับระบบ authentication ที่ต้องการ ID ที่ไม่สามารถเดาได้
แนวปฏิบัติ
เคล็ดลับและแนวปฏิบัติที่ดี
- ใช้ UUID v7 แทน v4 เมื่อต้องการ sortable ID ใน database เพราะเรียงตามเวลาได้โดยไม่ต้อง index เพิ่ม
- เก็บ UUID เป็น binary(16) ในฐานข้อมูลแทน varchar(36) เพื่อประหยัดพื้นที่ storage ได้ 60%
- อย่าใช้ UUID v1 ใน public API เพราะสามารถดึง MAC address และเวลาสร้างออกมาได้ เสี่ยงด้าน security
- ใช้ lowercase format เป็นมาตรฐานตาม RFC 4122 เพื่อความสอดคล้องในระบบ
- สร้าง UUID หลายตัวพร้อมกันด้วยเครื่องมือนี้เมื่อต้องเตรียม test data หรือ seed database
หลีกเลี่ยง
ข้อผิดพลาดที่พบบ่อย
- ใช้ Math.random() สร้าง UUID เอง ซึ่งไม่ cryptographically secure และอาจซ้ำได้ ควรใช้ crypto.randomUUID()
- เก็บ UUID เป็น string ใน database โดยไม่สร้าง index ทำให้ query ช้ามากเมื่อข้อมูลเยอะ
- ใช้ UUID เป็น short URL หรือ user-facing ID ซึ่งยาวเกินไป ควรใช้ NanoID หรือ short hash แทน
- สับสนระหว่าง UUID v4 กับ v1 ใน distributed system โดยไม่เข้าใจ trade-off ระหว่าง randomness กับ time-ordering
เปรียบเทียบ
เปรียบเทียบกับเครื่องมืออื่น
UUID Generator ของเราใช้ crypto.randomUUID() ที่ built-in ในเบราว์เซอร์ ปลอดภัยระดับ cryptographic ต่างจากเครื่องมือบางตัวที่ใช้ Math.random() ซึ่งไม่ปลอดภัย
เมื่อเทียบกับ command-line อย่าง uuidgen หรือ library เช่น uuid npm package เครื่องมือนี้ไม่ต้องติดตั้งอะไร สร้างได้ทีละหลายตัว และคัดลอกได้ทันที เหมาะสำหรับ developer ที่ต้องการ UUID เร็วๆ
UUID ที่สร้างจากเครื่องมือนี้ใช้ crypto.randomUUID() ซึ่งเป็น cryptographically secure random number generator เหมาะสำหรับใช้งานทั่วไป