- بواسطة x32x01 ||
بعد ما خلصنا السلسلة واتكلمنا عن كل أنواع الـ Identifiers، من UUID لحد Firebase Push IDs
هنعمل مقارنة شاملة تبين كل نوع وفايدته بطريقة بسيطة وسهلة
.
1- UUID (Universally Unique Identifier)
2- MongoDB ObjectId
3- Snowflake ID (Twitter)
4- Sonyflake
5- Firebase Push IDs
6- KSUID (K-Sortable Unique ID)
7- ULID (Universally Unique Lexicographically Sortable Identifier)
8- NanoID
9- CUID (Collision-resistant Unique Identifier)
باختصار شديد
الخلاصة
دي كانت رحلة كاملة من أول 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

- كل نوع له استخدامه المناسب حسب احتياجات المشروع.