مولد UUID
UUID تم إنشاؤه
مولد UUID
مقدمة
معرف فريد عالميًا (UUID) هو رقم مكون من 128 بت يُستخدم لتحديد المعلومات في أنظمة الكمبيوتر. تم توحيد UUIDs بواسطة مؤسسة البرمجيات المفتوحة (OSF) كجزء من بيئة الحوسبة الموزعة (DCE). تم تصميم هذه المعرفات لتكون فريدة عبر كل من الفضاء والزمن، مما يجعلها مثالية لمجموعة متنوعة من التطبيقات في الأنظمة الموزعة وما بعدها.
تتيح لك أداة مولد UUID هذه إنشاء كل من الإصدار 1 (المعتمد على الوقت) والإصدار 4 (العشوائي) من UUIDs. هذه المعرفات مفيدة في سيناريوهات مختلفة حيث يتطلب الأمر تحديدًا فريدًا، مثل مفاتيح قواعد البيانات، والأنظمة الموزعة، وبروتوكولات الشبكة.
كيفية عمل UUIDs
هيكل UUID
عادةً ما يتم تمثيل UUID كـ 32 رقمًا سداسيًا عشريًا، معروضًا في خمس مجموعات مفصولة بشرطات، في الشكل 8-4-4-4-12 لمجموع 36 حرفًا (32 حرفًا أبجديًا رقميًا و4 شرطات). على سبيل المثال:
550e8400-e29b-41d4-a716-446655440000
تُقسم 128 بت من UUID إلى حقول محددة، تحمل كل منها معلومات مختلفة اعتمادًا على إصدار UUID:
- 32 بت لحقل time_low
- 16 بت لحقل time_mid
- 16 بت لحقل time_hi_and_version
- 8 بت لحقل clock_seq_hi_and_reserved
- 8 بت لحقل clock_seq_low
- 48 بت لحقل node
إليك رسم توضيحي يوضح هيكل UUID:
إصدارات UUID
هناك عدة إصدارات من UUIDs، كل منها له طريقة توليد خاصة به:
- الإصدار 1 (المعتمد على الوقت): يستخدم الطابع الزمني الحالي وعنوان MAC لجهاز الكمبيوتر.
- الإصدار 2 (أمان DCE): مشابه للإصدار 1، لكنه يتضمن معرف مجال محلي.
- الإصدار 3 (المعتمد على الاسم، MD5): يتم إنشاؤه عن طريق تجزئة معرف مساحة الاسم والاسم.
- الإصدار 4 (عشوائي): يتم إنشاؤه باستخدام مولد أرقام عشوائية أو شبه عشوائية.
- الإصدار 5 (المعتمد على الاسم، SHA-1): مشابه للإصدار 3، لكنه يستخدم تجزئة SHA-1.
تركز هذه الأداة على توليد UUIDs من الإصدار 1 والإصدار 4.
الصيغة
توليد UUID من الإصدار 1
يتم توليد UUID من الإصدار 1 باستخدام المكونات التالية:
- الطابع الزمني: قيمة مكونة من 60 بت تمثل عدد الفترات الزمنية التي تبلغ 100 نانوثانية منذ 15 أكتوبر 1582 (تاريخ إصلاح التقويم الغريغوري للتقويم المسيحي).
- تسلسل الساعة: قيمة مكونة من 14 بت تُستخدم لتجنب التكرارات في حالة ضبط الساعة للخلف.
- العقدة: قيمة مكونة من 48 بت، عادةً ما يتم اشتقاقها من عنوان MAC لجهاز الكمبيوتر.
يمكن التعبير عن الصيغة لتوليد UUID من الإصدار 1 كما يلي:
UUID = (timestamp * 2^64) + (clock_sequence * 2^48) + node
توليد UUID من الإصدار 4
يتم توليد UUID من الإصدار 4 باستخدام مولد أرقام عشوائية قوي من الناحية التشفيرية. الصيغة ببساطة هي:
UUID = random_128_bit_number
مع تعيين بتات محددة للإشارة إلى الإصدار (4) والبديل.
حالات الاستخدام
تتمتع UUIDs بالعديد من التطبيقات عبر مجالات مختلفة من علوم الكمبيوتر وهندسة البرمجيات:
-
مفاتيح قواعد البيانات: غالبًا ما تُستخدم UUIDs كمفاتيح أساسية في قواعد البيانات، خاصة في الأنظمة الموزعة حيث قد تقوم عدة عقد بتوليد سجلات في نفس الوقت.
-
الأنظمة الموزعة: في الأنظمة الموزعة الكبيرة، تساعد UUIDs في تحديد الموارد أو المعاملات أو الأحداث بشكل فريد عبر عدة عقد أو مراكز بيانات.
-
عناوين المحتوى: يمكن استخدام UUIDs لإنشاء معرفات فريدة للمحتوى في أنظمة التخزين المعتمدة على العناوين.
-
إدارة الجلسات: غالبًا ما تستخدم تطبيقات الويب UUIDs لإدارة جلسات المستخدمين، مما يضمن أن لكل جلسة معرفًا فريدًا.
-
تحديد أجهزة IoT: في تطبيقات إنترنت الأشياء (IoT)، يمكن استخدام UUIDs لتحديد الأجهزة الفردية بشكل فريد في الشبكة.
البدائل
بينما تُستخدم UUIDs على نطاق واسع، هناك طرق بديلة لتوليد معرفات فريدة:
-
معرفات متزايدة تلقائيًا: بسيطة وشائعة الاستخدام في أنظمة قواعد البيانات الفردية، لكنها ليست مناسبة للبيئات الموزعة.
-
معرفات معتمدة على الطابع الزمني: يمكن أن تكون مفيدة للبيانات المرتبة زمنياً ولكن قد تواجه مشاكل في التكرار في سيناريوهات التزامن العالي.
-
معرفات Snowflake: تم تطويرها بواسطة Twitter، تجمع هذه المعرفات بين الطابع الزمني ورقم العامل لتوليد معرفات فريدة في الأنظمة الموزعة.
-
ULID (معرف فريد عالميًا يمكن ترتيبه أبجديًا): بديل أكثر حداثة يهدف إلى أن يكون أكثر ملاءمة للبشر وقابلية للترتيب من UUIDs.
التاريخ
تم تقديم مفهوم UUIDs لأول مرة في نظام حوسبة الشبكة Apollo وتم توحيده لاحقًا بواسطة مؤسسة البرمجيات المفتوحة (OSF) كجزء من بيئة الحوسبة الموزعة (DCE) في التسعينيات. تم نشر المواصفة الأولية في عام 1997 كـ ISO/IEC 11578:1996 وتم تعديلها لاحقًا في عام 2005 كجزء من ISO/IEC 9834-8:2005.
المعالم الرئيسية في تاريخ UUID:
- 1980s: تطور Apollo Computer لمفهوم UUID لنظام حوسبة الشبكة الخاص بهم.
- 1997: نشر أول مواصفة UUID كـ ISO/IEC 11578:1996.
- 2005: تم تعديل مواصفة UUID ونشرها كجزء من ISO/IEC 9834-8:2005.
- 2009: RFC 4122 يحدد تنسيق UUID وخوارزميات التوليد المستخدمة اليوم.
على مر الزمن، أصبحت UUIDs أداة أساسية في الأنظمة الموزعة وتصميم قواعد البيانات، مع العديد من التطبيقات والتعديلات عبر لغات البرمجة المختلفة والمنصات.
أمثلة على الكود
إليك أمثلة على توليد UUIDs في لغات البرمجة المختلفة:
import uuid
## توليد UUID من الإصدار 4 (عشوائي)
random_uuid = uuid.uuid4()
print(f"UUID من الإصدار 4: {random_uuid}")
## توليد UUID من الإصدار 1 (معتمد على الوقت)
time_based_uuid = uuid.uuid1()
print(f"UUID من الإصدار 1: {time_based_uuid}")
المراجع
- Leach, P., Mealling, M., & Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://tools.ietf.org/html/rfc4122
- المنظمة الدولية للتوحيد القياسي. (2005). تكنولوجيا المعلومات - الاتصال بأنظمة التشغيل المفتوحة - إجراءات تشغيل هيئات تسجيل OSI: توليد وتسجيل معرفات فريدة عالمية (UUIDs) واستخدامها كأجزاء من معرف كائن ASN.1. ISO/IEC 9834-8:2005. https://www.iso.org/standard/62795.html
- معرف فريد عالمي. (2023). في ويكيبيديا. https://en.wikipedia.org/wiki/Universally_unique_identifier
- معرف Snowflake. (2023). في ويكيبيديا. https://en.wikipedia.org/wiki/Snowflake_ID
- مواصفة ULID. (n.d.). GitHub. https://github.com/ulid/spec