- Buildkite นำมาตรฐาน UUIDv7 แบบใหม่มาใช้เป็น PK เพื่อแทนที่ระบบ PK แบบลำดับเดิมและคีย์รองแบบ UUID
- UUIDs (Universally Unique Identifiers) คือรหัสระบุที่ไม่ซ้ำกันซึ่งสามารถสร้างได้อย่างอิสระ และถูกใช้อย่างแพร่หลายในระบบกระจายและฐานข้อมูล
- UUIDs มีข้อดีหลายอย่างเหนือกว่าตัวระบุจำนวนเต็มแบบลำดับ เช่น ความคาดเดาได้ยาก การป้องกันการเปิดเผยข้อมูลภายในที่อ่อนไหว และการเพิ่มชั้นการป้องกันอีกระดับ
- อย่างไรก็ตาม ความสุ่มของ UUID มาตรฐานที่ไม่ได้เรียงตามเวลาสามารถก่อให้เกิดปัญหาด้านประสิทธิภาพของฐานข้อมูลได้
- เพื่อแก้ปัญหานี้ Buildkite ได้ทดลองใช้ UUID ที่เรียงตามเวลาและเข้ากันได้กับ UUIDv4 ซึ่งช่วยลดอัตรา Write Ahead Log (WAL) ของฐานข้อมูลหลักลงได้ 50%
- UUID เวอร์ชัน 7 (UUIDv7) เข้ารหัส Unix timestamp ระดับมิลลิวินาทีไว้ใน 48 บิตที่สำคัญที่สุด และสร้างอีก 74 บิตที่เหลือแบบสุ่ม
- Buildkite ตัดสินใจใช้ UUIDv7 เป็นคีย์หลักของทุกตารางใหม่ ซึ่งช่วยตัดความจำเป็นในการประสานการสร้างตัวระบุและทำให้ตรรกะของแอปพลิเคชันง่ายขึ้น
- มีการพิจารณาทางเลือกอื่น เช่น การใช้งาน ShardingID ของ Instagram และการใช้งานคีย์หลักแบบประกอบของ Shopify แต่สุดท้ายทีมเลือก UUIDv7
- การเปลี่ยนไปใช้ UUIDv7 ต้องใช้พื้นที่จัดเก็บเพิ่มขึ้นจากความยาว 128 บิตของ UUID แต่เมื่อเทียบกับพื้นที่ส่วนอื่นของแถวข้อมูลในฐานข้อมูลแล้วถือว่าน้อยมาก
- ปัจจุบันกำลังทำ sharding ให้กับฐานข้อมูล Postgres ที่ใหญ่ที่สุด และในอนาคตอาจใช้ UUIDv8 เพื่อใส่หมายเลขชาร์ดไว้ในตัวระบุหากจำเป็น
1 ความคิดเห็น
ความเห็นจาก Hacker News