- بواسطة x32x01 ||
بعد ما خلصنا السلسلة واتكلمنا عن كل أنواع الـ Identifiers، من UUID لحد Firebase Push IDs
هنعمل مقارنة شاملة تبين كل نوع وفايدته بطريقة بسيطة وسهلة 👇.
كل نوع ظهر عشان يحل مشاكل اللي قبله ويوفر حل لمشكلة واقعية في الـ systems.
هنعمل مقارنة شاملة تبين كل نوع وفايدته بطريقة بسيطة وسهلة 👇.
1- UUID (Universally Unique Identifier) 📝
- اتعمل في التسعينات، وتوثق رسميًا سنة 2005 (RFC 4122)
- أقدم وأشهر نوع من الـ Identifiers
- معمول لتوليد أرقام فريدة على أي جهاز من غير تكرار
- طويل جدًا (128-bit)، مش sortable وصعب على البشر يقرؤوه
2- MongoDB ObjectId 💾
- ظهر حوالي 2009، default في MongoDB
- بيتكون من timestamp + machine + process + counter
- شبه sortable، حجمه أصغر من UUID (12 byte)
- ممتاز لو شغال على MongoDB
3- Snowflake ID (Twitter) 🐦
- اتعمل في تويتر حوالي 2010
- 64-bit مبني على timestamp + worker + sequence
- IDs مرتبة زمنيًا، scalable جدًا
- بيعتمد على clock sync، لو فيه مشاكل في الساعة ممكن يحصل conflict
4- Sonyflake ⚡
- نسخة أخف من Snowflake مكتوبة بـ Go
- أسرع في التوليد، ومتجنب مشاكل clock sync
- مناسب للـ Go apps، لكن محدود في الانتشار
5- Firebase Push IDs 📲
- معمولة مخصوص للـ Firebase Realtime Database
- IDs تتولد client-side، تجمع بين timestamp + randomness
- قصيرة و URL-friendly، لكن مربوطة بالكامل بـ Firebase ecosystem
6- KSUID (K-Sortable Unique ID) 🔑
- ظهر حوالي 2017
- بيجمع timestamp دقيق + randomness قوي
- IDs مرتبة زمنيًا، قابلة للفرز، Base62 string قصير
- يوازن بين uniqueness، portability، وordering
7- ULID (Universally Unique Lexicographically Sortable Identifier) 📦
- حل لمشاكل UUID الطويل
- Readable، URL-friendly، sortable
- randomness أضعف شوية من KSUID
- مناسب لو عايز IDs سهلة القراءة والترتيب
8- NanoID 🔗
- بديل خفيف للـ UUID
- Customizable، crypto secure
- IDs قصيرة ومناسبة للـ frontend apps والـ URLs
- ممتاز لو عايز IDs قصيرة وسهلة التعامل
9- CUID (Collision-resistant Unique Identifier) 🛡️
- ظهر حوالي 2018
- Readable أكتر من UUID، فيه prefix يفرق بين الـ IDs
- مقاوم جدًا للتكرار (collision-resistant)
- مناسب للـ web apps، لكنه مش مشهور زي NanoID أو UUID
باختصار شديد ⚡
- لو عايز standard عالمي: UUID
- لو شغال بـ MongoDB: ObjectId
- لو عندك scalability عالي: Snowflake أو Sonyflake
- لو عايز sortable وportable: KSUID أو ULID
- لو عايز IDs قصيرة: NanoID
- لو عايز collision resistance: CUID
- لو شغال بـ Firebase: Push IDs
الخلاصة 💡
دي كانت رحلة كاملة من أول UUID في التسعينات، لحد Firebase Push IDs اليوم.كل نوع ظهر عشان يحل مشاكل اللي قبله ويوفر حل لمشكلة واقعية في الـ systems.
- شخصيًا، أنا باستخدم UUID ✅
- كل نوع له استخدامه المناسب حسب احتياجات المشروع.