مقارنة أنواع UUID: v1 مقابل v4 مقابل v5
إجابة سريعة
v1 = زمني (يكشف MAC)، v4 = عشوائي (موصى به، خاص)، v5 = حتمي (SHA-1 من namespace+name). استخدم v4 للمعرفات العامة. استخدم مولّد UUID المجاني — يولّد v4 في متصفحك.
مقدمة
UUID v1 يعتمد على الزمن وعنوان MAC — فريد لكنه يكشف معلومات. v4 عشوائي — الأكثر شائعة والأكثر أماناً للخصوصية. v5 يعتمد على SHA-1 من مساحة الأسماء والاسم — حتمي ومفيد للمعرفات المتسقة. v4 موصى به للمعرفات العامة.
خطوة بخطوة
-
UUID v1 — يعتمد على الوقت والعقدة
يقوم الإصدار v1 بتشفير الطابع الزمني الحالي 60 بت (فواصل زمنية 100 ns منذ 1582-10-15) ومعرف العقدة 48 بت (عادةً عنوان MAC). المعرفات التي تم إنشاؤها على نفس العقدة تتزايد بشكل رتيب وقابلة للفرز حسب الوقت. الخطر: يسرب عنوان MAC هوية الأجهزة، ويمكن أن يؤدي انحراف الساعة عبر العقد إلى تعطيل الطلب.
-
UUID الإصدار 4 - عشوائي
يستخدم الإصدار 4 122 بت عشوائيًا (6 بتات ثابتة للإصدار/المتغير). مع 122 بت عشوائي، يبلغ احتمال التصادم بين 2.71 تريليون معرف 50% - بالنسبة لأي عبء عمل واقعي، تكون الفرصة صفرًا فعليًا. لا يحتاج الإصدار 4 إلى التنسيق ولا يكشف عن معلومات المضيف، مما يجعله الخيار الافتراضي الأكثر أمانًا.
-
UUID الإصدار 5 — مساحة الاسم والاسم (SHA-1)
يقوم الإصدار 5 بتجزئة مساحة الاسم UUID وسلسلة اسم باستخدام SHA-1 لإنتاج معرف محدد 128 بت. ينتج عن نفس الزوج (مساحة الاسم، الاسم) دائمًا نفس UUID، وهو مثالي لإلغاء البيانات المكررة والمعرفات الثابتة المشتقة من المفاتيح الطبيعية. الإصدار 3 هو نفس الفكرة ولكنه يستخدم MD5 (تجنبه).
-
قارن المقايضات
الإصدار 1 قابل للفرز ولكنه يسرب MAC ويحتاج إلى مزامنة الساعة. الإصدار 4 عشوائي وخاص ولكنه غير قابل للفرز. الإصدار 5 حتمي ومكرر ولكنه ليس عشوائيًا — تخمين الاسم يسمح للمهاجم بإعادة إنتاج UUID. اختر بناءً على ما إذا كنت بحاجة إلى الترتيب أو العشوائية أو الحتمية.
-
اختر الإصدار المناسب لحالتك
المفاتيح الأساسية لقاعدة البيانات: الإصدار 4 (أو الإصدار 7 في الأنظمة الأحدث لإمكانية ترتيب الوقت). الأنظمة الموزعة بدون تنسيق: الإصدار 4. المعرفات الحتمية من مفتاح طبيعي (على سبيل المثال URL →UUID): v5. سجلات التدقيق التي تستفيد من الترتيب الزمني: الإصدار 1 بمعرف عقدة عشوائي آمن.
أمثلة
UUID الإصدار 1 (معتمد على الوقت، وقابل للفرز)
مدخل: تم الإنشاء في 2026-08-28T12:00:00Z على العقدة 00:11:22:33:44:55
الإخراج: 1ef7c1d0-2d3b-11f0-8000-001122334455 (رقم الإصدار '1'، قابل للفرز حسب الوقت)
UUID الإصدار 4 (عشوائي)
مدخل: Random generation
الإخراج: f47ac10b-58cc-4372-a567-0e02b2c3d479 (رقم الإصدار '4'، بتات عشوائية)
UUID v5 (حتمية من مساحة الاسم + الاسم)
مدخل: مساحة الاسم DNS (6ba7b810-9dad-11d1-80b4-00c04fd430c8) + الاسم "freeonlinetoolsgo.com"
الإخراج: 74738ff5-5367-5958-9aeb-0c1f1f1f1f1f (نفس الإدخال يؤدي دائمًا إلى نفس الإخراج)
المشاكل الشائعة
- تخزين UUID كـ VARCHAR(36) بدلاً من النوع BINARY/UUID الأصلي ذو 16 بايت: يؤدي هذا إلى إهدار مساحة التخزين مرتين ويعطل أداء الفهرس. استخدم نوع العمود UUID الأصلي حيثما كان ذلك متاحًا.
- استخدام الإصدار 1 دون تأمين معرف العقدة: يسرب عنوان MAC الافتراضي هوية الجهاز ويمثل مشكلة تتعلق بالخصوصية. استبدلها بقيمة 48 بت عشوائية مشفرة لكل عقدة.
- بافتراض أن تصادمات v4 مستحيلة: فهي ليست كذلك، ولكنها غير محتملة من الناحية الفلكية. مع 122 بت عشوائي، تحتاج إلى ما يقرب من 2.71 تريليون معرف للحصول على فرصة بنسبة 50%. بالنسبة لمليار معرف، تكون الفرصة ~0.0000000000000001.
- استخدام الإصدار 3 (المستند إلى MD5) بدلاً من الإصدار 5 (المستند إلى SHA-1): MD5 معطل، لذا يُفضل الإصدار 5. كلاهما حتمي، لكن الإصدار 5 يتمتع بمقاومة أقوى للتصادم.
نصائح
- الافتراضي هو الإصدار 4 لكل حالة استخدام تقريبًا - فهو عشوائي وخاص وآمن من التصادم دون أي تنسيق.
- إذا كنت بحاجة إلى معرفات عشوائية قابلة للفرز حسب الوقت، فاطلع على UUID v7 (RFC 9562, 2024) الذي يجمع بين الطابع الزمني لنظام Unix والبتات العشوائية — أفضل من الإصدار 1 لقواعد البيانات الحديثة.
- استخدم الإصدار 5 لإنشاء معرفات ثابتة من المفاتيح الطبيعية (URLs، وعناوين البريد الإلكتروني) بحيث يتم دائمًا تعيين نفس الإدخال إلى نفس UUID —مفيد لإلغاء البيانات المكررة والفعالة APIs.
- أنشئ معرفات UUID على العميل عندما يكون ذلك ممكنًا لتجنب الذهاب والعودة إلى الخادم — يعمل مولد UUID الخاص بنا بالكامل في متصفحك باستخدام crypto.getRandomValues().