أدواتي.

UUID: كيف يكون المعرف فريدًا عالميًا دون تنسيق مع أحد؟

بنية UUID v4 ومعنى خاناته الست عشرية، واحتمال التصادم الحقيقي بين 122 بت عشوائية، ومتى تستخدمه بدل الأرقام التسلسلية في قواعد البيانات.

آخر تحديث: (نُشر في: )4 دقائق قراءةالناشر: آية محمود

تحتاج الأنظمة البرمجية وقواعد البيانات إلى معرفات فريدة لتمييز السجلات كالمستخدمين والفواتير والجلسات. لعقود طويلة كان المعرف التسلسلي التزايدي (Auto-Increment) هو الخيار الافتراضي البسيط. غير أن المعرفات التسلسلية تواجه تحديات واضحة في الأنظمة الموزعة، أو عند الرغبة في تجنب تخمين أرقام السجلات السابقة والتالية عبر الروابط. هنا يبرز المعرف الفريد عالميًا (UUID / GUID) كمعيار يتيح توليد معرفات فريدة محليًا دون الحاجة لتنسيق مركزي بين الخوادم.

تشريح بنية المعرف: ماذا تعني الخانات الست عشرية؟

يُكتب معرف UUID القياسي (المعرّف تاريخيًا في RFC 4122 والمحدّث رسميًا في معيار IETF RFC 9562) في سلسلة من 36 محرفًا تتكون من 32 رقمًا بنظام العد الست عشري (Hexadecimal) تفصلها 4 شرطات أفقية في 5 مجموعات بنمط (8-4-4-4-12)، مثل: 550e8400-e29b-41d4-a716-446655440000.

في الإصدار الرابع العشوائي (UUID v4) الأكثر انتشارًا عالميًا: - المحرف الأول في المجموعة الثالثة محجوز دائمًا وثابت على الرقم «4» ليدل صراحة على رقم الإصدار (Version 4). - المحرف الأول في المجموعة الرابعة محجوز لتمييز المتغير القياسي (Variant) ويجب أن يكون أحد المحارف الأربعة: (8 أو 9 أو a أو b)، وهو ما يحدد البتات الأولى كـ `10xx` ثنائيًا وفق المعيار. - الخانات المتبقية بالكامل — والتي تعادل 122 بتًا رياضيًا — تُملأ بأرقام عشوائية مشفرة باستخدام مولد العشوائية الآمن تشفيريًا (CSPRNG) المدمج في متصفحك أو بيئتك البرمجية.

هل التفرد مضمون بنسبة 100%؟ مفارقة أعياد الميلاد (Birthday Paradox)

رياضيًا، لا يوجد شيء مستحيل في فضاء الاحتمالات؛ لكن عمليًا وإحصائيًا، احتمال حدوث تصادم (تكرار نفس المعرف مرتين) بين 122 بت عشوائية هو أمر شبه مستحيل فيزيائيًا. عدد الاحتمالات المتاحة هو 2 أس 122، أي ما يقارب: 5,316,911,983,139,663,491,615,158,242,912,256,000,000 معرف مختلف!

لحساب ذلك بمثال واقعي: لو قامت كافة أجهزة الكمبيوتر في العالم بتوليد مليار معرف في كل ثانية دون توقف، لاحتجنا إلى آلاف السنين المتواصلة حتى يرتفع احتمال حدوث تصادم واحد إلى 50%. لهذا السبب تعتمد كبرى الشركات العالمية (مثل أمازون وجوجل ومايكروسوفت) على UUID كمفاتيح رئيسية مستقلة دون فحص مسبق مع قاعدة بيانات مركزية، مع الإبقاء على قيد التفرد كشبكة أمان.

متى تفضل UUID ومتى تلتزم بالرقم التسلسلي (Auto-Increment)؟

  • استخدم UUID في واجهات الروابط وAPI العامة: الرقم التسلسلي يكشف أسرار عملك (مثل: /invoices/105 تعني أنك لم تصدر سوى 105 فاتورة ويسهل على المنافس كشط بيانات زبائنك بالتخمين 106، 107...) بينما مع UUID يستحيل التخمين.
  • استخدم UUID في الأنظمة الموزعة وقواعد البيانات المجزأة (Sharded Databases): تتيح لكل خادم أو جهاز جوال توليد معرفه الخاص دون انتظار استجابة من خادم رئيسي ودون خوف من تضارب المعرفات عند المزامنة.
  • استخدم الرقم التسلسلي (BIGINT) للجداول الداخلية الضخمة ذات الاستعلامات المتلاحقة: الأرقام أصغر حجمًا (8 بايت مقابل 16 بايت لـ UUID) مما يقلل استهلاك ذاكرة التخزين المؤقت في خوادم قواعد البيانات.

معضلة الفهرسة في قواعد البيانات وظهور معيار UUID v7

المشكلة الكبرى في UUID v4 التقليدي أنه عشوائي تمامًا؛ وعند استخدامه كمفتاح أساسي مجمّع (Clustered Primary Key) في قواعد بيانات مثل PostgreSQL أو MySQL، يؤدي ذلك إلى تشتت شجرة الفهرسة (B-Tree Page Fragmentation) وبطء في عمليات الإدراج الكثيفة. للتغلب على هذه المشكلة، اعتمدت المنظمات المعيارية حديثًا مواصفة UUID v7 التي تجمع بين طابع زمني ميلادي ميلي-ثانية في البداية متبوعًا ببتات عشوائية، مما يحقق الترتيب الزمني الطبيعي للملفات مع الحفاظ على ميزة التفرد العالمي.

توليد المعرفات داخل متصفحك

تستخدم أداة توليد UUID في منصة أدواتي دالة crypto.randomUUID() القياسية المدعومة في محركات المتصفح الحديثة، ولا تعتمد على دالة Math.random() العادية القابلة للتنبؤ. يمكنك توليد حتى 100 معرف فريد دفعة واحدة بنقرة زر ونسخها فورًا لتجهيز بيانات الاختبار، ولا يخزن الموقع المعرفات المولدة في قاعدة بيانات خاصة به.

جرّب بنفسك: مولد المعرفات الفريدة UUID v4

طبّق ما قرأته مباشرة عبر الأداة المجانية — الحساب يتم محليًا في متصفحك.

افتح الأداة

أسئلة شائعة

ما الفرق التقني بين مصطلحي UUID و GUID؟

هما اسمان لشيء واحد تقريبًا؛ UUID (Universally Unique Identifier) هو المصطلح المعياري المعتمد دوليًا من قبل Open Software Foundation، بينما GUID (Globally Unique Identifier) هو المصطلح التجاري المفضل لشركة Microsoft في بيئة Windows و .NET. كلاهما يتطابقان في الطول (128 بت) والصيغة التركيبية.

ما الفرق بين إصدارات UUID المختلفة (v1, v3, v4, v5, v7)؟

v1 يعتمد على وقت الساعة وعنوان كارت الشبكة MAC (يسرب معلومات عن جهازك)، v3 و v5 يعتمدان على دوال تجزئة MD5 و SHA-1 لنصوص ثابتة، v4 عشوائي نقي وهو الأكثر استخدامًا في العالم، و v7 هو الجيل الأحدث المعتمد على الوقت لترتيب فهارس قواعد البيانات.

هل أحتاج إلى إضافة قيد التكرار (Unique Constraint) في قاعدة البيانات عند استخدام UUID؟

نعم، من أفضل الممارسات الهندسية دائمًا وضع قيد UNIQUE على عمود المعرف في جدول قاعدة البيانات كشبكة أمان برمجية أخيرة، على الرغم من أن احتمال التكرار الإحصائي يقترب من الصفر المطلق.

هل يؤثر تخزين UUID على أداء قواعد البيانات وسرعتها؟

نعم بشكل طفيف مقارنة بالأرقام؛ لأن UUID يحتاج 16 بايت في التخزين الثنائي (أو 36 محرفًا إذا خُزّن كنص عادي). يوصى دائمًا بتخزينه بالنوع المخصص (مثل نمط UUID في PostgreSQL أو BINARY(16) في MySQL) لتوفير المساحة وتسريع الفهرسة.

مقالات ذات صلة