เครื่องมือนี้ทำอะไร
เครื่องมือนี้สร้าง ULID ในเบราว์เซอร์ของคุณ ULID คือตัวระบุขนาด 128 บิตแบบเดียวกับ UUID แต่เขียนเป็น 26 ตัวอักษร และเรียงลำดับตามเวลาที่สร้าง ULID จึงเหมาะกับ primary key ในฐานข้อมูล ID ของ event และ log ชื่อไฟล์ และทุกสิ่งที่คุณต้องการแสดงตามลำดับการสร้างโดยไม่ต้องมีคอลัมน์ timestamp แยก
ULID มีสองส่วน:
- Timestamp (10 ตัวแรก): มิลลิวินาทีนับจาก Unix epoch ขนาด 48 บิต ใช้ได้ถึงปี 10889
- ส่วนสุ่ม (16 ตัวหลัง): 80 บิตจากตัวสร้างเลขสุ่มเชิงการเข้ารหัสของเบราว์เซอร์
ULID ใช้ชุดตัวอักษร Base32 ของ Crockford 0123456789ABCDEFGHJKMNPQRSTVWXYZ ซึ่งตัด I, L, O และ U ออก ทำให้ ID อ่านออกเสียงง่ายและพิมพ์ผิดยาก และไม่มีอักขระที่ต้อง escape ใน URL
วิธีใช้งาน
- เลือกจำนวน ID ที่ต้องการ ตั้งแต่ 1 ถึง 1000
- เปิด Monotonic หาก ID ต้องรักษาลำดับแม้หลายตัวจะถูกสร้างในมิลลิวินาทีเดียวกัน ส่วนสุ่มจะถูกเพิ่มค่าทีละหนึ่งสำหรับแต่ละ ID ใหม่
- เปิด ตัวพิมพ์เล็ก หากระบบของคุณเก็บ ID เป็นตัวพิมพ์เล็ก ULID ไม่แยกตัวพิมพ์เล็กใหญ่ และรูปแบบมาตรฐานคือตัวพิมพ์ใหญ่
- คัดลอกรายการหรือดาวน์โหลดเป็นไฟล์ข้อความ กด สร้าง อีกครั้งเพื่อได้ชุดใหม่
ตัวอย่าง
01ARZ3NDEKTSV4RRFFQ69G5FAV
ในที่นี้ 01ARZ3NDEK คือ timestamp 1469922850259 (2016-07-30 23:54:10.259 UTC) และ TSV4RRFFQ69G5FAV คือส่วนสุ่ม ULID สองตัวที่สร้างห่างกันหนึ่งวินาทีจะมีอักขระสองสามตัวแรกเหมือนกัน นี่คือเหตุผลที่การเรียงสตริงธรรมดาจะเรียงตามลำดับเวลาได้
เปรียบเทียบ ULID กับ UUID
UUID v4 แบบสุ่มทำให้แถวใหม่กระจายไปทั่ว B-tree index ซึ่งทำให้การ insert ในตารางขนาดใหญ่ช้าลง ULID ส่วนใหญ่มีค่าเพิ่มขึ้นเรื่อย ๆ แถวใหม่จึงไปอยู่ท้าย index เหมือนกับจำนวนเต็มแบบ auto-increment ขณะที่ยังคงไม่ซ้ำกันข้ามเครื่องโดยไม่ต้องประสานงานกัน ข้อแลกเปลี่ยนคือ ULID เปิดเผยเวลาที่สร้างโดยประมาณ หากเรื่องนี้สำคัญ ให้ใช้ UUID v4
คำถามที่พบบ่อย
› ULID คืออะไร?
ULID (Universally Unique Lexicographically Sortable Identifier) คือ ID ขนาด 128 บิต เขียนเป็นอักขระ Crockford Base32 จำนวน 26 ตัว 10 ตัวแรกเข้ารหัส timestamp ระดับมิลลิวินาที และ 16 ตัวหลังเป็นค่าสุ่ม
› ULID หรือ UUID ควรใช้อะไร?
ใช้ ULID เมื่อต้องการ ID ที่เรียงตามเวลาที่สร้าง เช่น ใช้เป็นคีย์ในฐานข้อมูลหรือ ID ของ log ใช้ UUID v4 เมื่อ ID ต้องไม่เปิดเผยเวลาที่สร้าง UUID v7 เป็นทางเลือกตามมาตรฐานที่เรียงตามเวลาได้เช่นกัน
› โหมด monotonic ทำอะไร?
ID ที่สร้างในมิลลิวินาทีเดียวกันปกติจะได้ส่วนสุ่มที่เป็นอิสระต่อกัน ลำดับภายในมิลลิวินาทีนั้นจึงเป็นแบบสุ่ม ในโหมด monotonic ส่วนสุ่มจะถูกเพิ่มค่าทีละหนึ่งแทน ทุก ID ในชุดจึงเรียงอยู่หลัง ID ก่อนหน้าอย่างเคร่งครัด
› ID ถูกสร้างอย่างปลอดภัยไหม?
ใช่ ส่วนสุ่มมาจากตัวสร้างเลขสุ่มเชิงการเข้ารหัสของเบราว์เซอร์ และไม่มีอะไรถูกส่งไปยังเซิร์ฟเวอร์