
- بواسطة x32x01 ||
هو ايه الـ UUID اللي كتير من الـDevelopers شغالين بيه ومش عارفين أهميته والـalgorithm اللي اتبني عليه
UUID معناها - (Universally Unique Identifier)
ده معرف فريد عالمي ممكن يتولد في أي مكان وفي أي وقت من غير أي duplicate
اللي معناه انك ممكن تستخدمه لأي database أو system من غير ما تقلق من تكرار الأرقام
الـ namespace ده context أو مساحة بتحدد المجال اللي جوهها هيتولد فيه UUID ثابت
يعني لو عندك اسم معين وnamespace محدد تولد UUID ثابت لكل text بنفس الاسم في نفس namespace
زمان قبل ما اتاخد قرار باختراع UUID كانت كل databases بتستخدم أرقام متسلسلة Auto Increment IDs لكل record
الطريقة دي كانت كويسة لو عندك database واحدة بس
المشكلة كانت تظهر لما يكون عندك أكتر من server أو أكتر من database وكنت عايز تدمج البيانات
ساعات كتير كنت تلاقي نفس الرقم موجود في أكتر من place 
وده كان بيعمل مشاكل كبيرة في دمج البيانات وفي توليد معرفات فريدة
فجت فكرة UUID اللي هو معرف فريد عالمي ممكن يتولد في أي مكان وفي أي وقت من غير أي conflict
ده حل مشكلة كبيرة كانت بتواجه المطورين في الأنظمة اللي فيها أكتر من source بيانات
الإصدارات المختلفة للUUID والalgorithm بتاعها:
UUIDv1
اتبنى على الوقت وMAC address حل مشكلة التكرار في الأنظمة الموزعة
العيب انه أي حد ممكن يعرف الجهاز والوقت، وده مشكلة privacy
الشكل: 550e8400-e29b-11d4-a716-446655440000
UUIDv2
مرتبط بالنظام والأمان (DCE Security) لكن قليل الاستخدام دلوقتي
اتبنى على UID/GID من النظام
الشكل مشابه v1 لكن مع تعديل للأمان
UUIDv3
اتبنى على name + namespace hash algorithm باستخدام MD5
بيولد UUID ثابت لأي text محدد بدون أي تغيير
الشكل: f47ac10b-58cc-3372-a567-0e02b2c3d479
مفيد لو عايز معرف predictable لكن فريد
UUIDv4
الأشهر دلوقتي
اتبنى على random numbers بالكامل
بيحمي privacy وبيحل مشكلة duplicate في أي database
الشكل: f47ac10b-58cc-4372-a567-0e02b2c3d479
العشوائية بتخلي أي حد ميقدرش يعرف أي معلومات عن النظام
أو الوقت
UUIDv5
زي v3 لكن بيستخدم SHA-1 بدل MD5 بيولد UUID ثابت لنفس الاسم والnamespace
الشكل: 3bbcee75-cecc-5b56-8031-b6641c1ed1f1
أكتر أمانًا وموثوقية في توليد UUID ثابت
دلوقتي UUID
موجود في databases مشتركة مع microservices او APIs او التطبيقات اللي شغالة offline
كل نسخة من UUID كانت بتحل مشكلة معينة وبتوفر طريقة أفضل لتوليد unique IDs بدون أي duplicate
وده بيخلي الUUID أداة أساسية لأي developer عايز يشتغل على أنظمة كبيرة أو multi-tenant أو يحتاج دمج بيانات من مصادر مختلفة
بس كده
UUID معناها - (Universally Unique Identifier)
ده معرف فريد عالمي ممكن يتولد في أي مكان وفي أي وقت من غير أي duplicate
اللي معناه انك ممكن تستخدمه لأي database أو system من غير ما تقلق من تكرار الأرقام
الـ namespace ده context أو مساحة بتحدد المجال اللي جوهها هيتولد فيه UUID ثابت
يعني لو عندك اسم معين وnamespace محدد تولد UUID ثابت لكل text بنفس الاسم في نفس namespace
زمان قبل ما اتاخد قرار باختراع UUID كانت كل databases بتستخدم أرقام متسلسلة Auto Increment IDs لكل record
الطريقة دي كانت كويسة لو عندك database واحدة بس
المشكلة كانت تظهر لما يكون عندك أكتر من server أو أكتر من database وكنت عايز تدمج البيانات
ساعات كتير كنت تلاقي نفس الرقم موجود في أكتر من place 
وده كان بيعمل مشاكل كبيرة في دمج البيانات وفي توليد معرفات فريدة
فجت فكرة UUID اللي هو معرف فريد عالمي ممكن يتولد في أي مكان وفي أي وقت من غير أي conflict
ده حل مشكلة كبيرة كانت بتواجه المطورين في الأنظمة اللي فيها أكتر من source بيانات
الإصدارات المختلفة للUUID والalgorithm بتاعها:
UUIDv1
اتبنى على الوقت وMAC address حل مشكلة التكرار في الأنظمة الموزعة
العيب انه أي حد ممكن يعرف الجهاز والوقت، وده مشكلة privacy
الشكل: 550e8400-e29b-11d4-a716-446655440000
UUIDv2
مرتبط بالنظام والأمان (DCE Security) لكن قليل الاستخدام دلوقتي
اتبنى على UID/GID من النظام
الشكل مشابه v1 لكن مع تعديل للأمان
UUIDv3
اتبنى على name + namespace hash algorithm باستخدام MD5
بيولد UUID ثابت لأي text محدد بدون أي تغيير
الشكل: f47ac10b-58cc-3372-a567-0e02b2c3d479
مفيد لو عايز معرف predictable لكن فريد
UUIDv4
الأشهر دلوقتي
اتبنى على random numbers بالكامل
بيحمي privacy وبيحل مشكلة duplicate في أي database
الشكل: f47ac10b-58cc-4372-a567-0e02b2c3d479
العشوائية بتخلي أي حد ميقدرش يعرف أي معلومات عن النظام
أو الوقت
UUIDv5
زي v3 لكن بيستخدم SHA-1 بدل MD5 بيولد UUID ثابت لنفس الاسم والnamespace
الشكل: 3bbcee75-cecc-5b56-8031-b6641c1ed1f1
أكتر أمانًا وموثوقية في توليد UUID ثابت
دلوقتي UUID
موجود في databases مشتركة مع microservices او APIs او التطبيقات اللي شغالة offline
كل نسخة من UUID كانت بتحل مشكلة معينة وبتوفر طريقة أفضل لتوليد unique IDs بدون أي duplicate
وده بيخلي الUUID أداة أساسية لأي developer عايز يشتغل على أنظمة كبيرة أو multi-tenant أو يحتاج دمج بيانات من مصادر مختلفة
بس كده