كل المقالات

UUID: كيف تُولَّد معرّفات لا تتكرر تقريبًا أبدًا

لتقريب فكرة صغر احتمال تصادم معرّفين UUID، يلجأ كثير من الشروحات إلى نفس النوع من الاستعارة الذي يستخدمه العرب تقليديًا للتعبير عمّا لا يُحصى — "كحبات الرمل" أو "كنجوم السماء". فمساحة UUID v4 تضم نحو 5.3 مليون تريليون تريليون احتمال ممكن (2 أس 122)، وهو رقم أكبر بمراحل من عدد حبات الرمل على الأرض بأكملها؛ حتى مع توليد مليارات المعرّفات كل ثانية لقرون، يظل احتمال أي تصادم أقرب إلى الصفر منه إلى أي شيء آخر.

إصدارات UUID

  • v1 — يعتمد على الوقت الحالي وعنوان MAC لبطاقة الشبكة. يضمن التفرّد لكنه يكشف جزئيًا متى وعلى أي جهاز أُنشئ المعرّف.
  • v4 — عشوائي بالكامل (باستثناء بعض البتات المحجوزة للإشارة إلى الإصدار). الخيار الأكثر شيوعًا اليوم تحديدًا لعدم تسريبه أي معلومات جانبية.
  • v5 — حتمي، يُحسب كتجزئة لمساحة أسماء وسلسلة نصية — نفس المدخل يعطي دائمًا نفس UUID.

لماذا احتمال التصادم شبه معدوم

في UUID v4، 122 بتًا عشوائية. حتى مع توليد مليارات المعرّفات في الثانية على مدى قرون، يبقى احتمال حدوث تصادم واحد على الأقل ضئيلًا جدًا فلكيًا — وهذه حقيقة مبنية رياضيًا على مفارقة عيد الميلاد لمساحة بهذا الحجم.

لماذا نحتاج هذا

  • توليد مفاتيح أساسية لقاعدة بيانات دون عداد مركزي أو تنسيق بين الخوادم.
  • إنشاء معرّفات جلسات أو طلبات أو معاملات في الأنظمة الموزّعة.
  • تجنّب المعرّفات المتسلسلة القابلة للتنبؤ والسهلة العد (بخلاف 1، 2، 3...).

UUID v7: تسوية بين العشوائية والترتيب

يؤثر UUID v4 العشوائي بالكامل سلبًا على أداء فهارس قواعد البيانات — إذ تُدرج السجلات الجديدة في مواقع عشوائية داخل شجرة الفهرس بدلًا من نهايتها. يحل UUID v7 الأحدث هذه المشكلة بتضمين طابع زمني في البتات الأولى من المعرّف: تبقى القيم فريدة عمليًا مثل v4، لكنها تُرتَّب طبيعيًا حسب وقت الإنشاء، تمامًا كعدّاد متسلسل.

جرّب الأداة