Twitter_Snowflake
اTwitter Snowflake یک الگوریتم تولید شناسههای یکتا (ID) است که توسط توییتر برای تولید IDهای ترتیبی و توزیعشده طراحی شده. این الگوریتم بهجای استفاده از AUTO_INCREMENT
در دیتابیس یا UUID
، شناسههایی ایجاد میکنه که:
✅ کوتاهتر از UUID (فقط 64 بیت)
✅ ترتیبی بر اساس زمان → کوئریها در دیتابیس سریعتر میشن
✅ قابل استفاده در سیستمهای توزیعشده (بدون تداخل ID بین سرورها)
📌 فرمت Snowflake ID
اSnowflake یک int64
با ۶۴ بیت هست که به این شکل تقسیم میشه:
بخش | توضیح | تعداد بیت |
---|---|---|
Timestamp | زمان تولید (ms از 1970) | 41 بیت |
Machine ID | شناسه سرور | 10 بیت |
Sequence | شمارنده داخلی برای جلوگیری از تکرار | 12 بیت |
Reserved | بیت رزرو شده (معمولاً 1 بیت) | 1 بیت |
🛠 مثال Snowflake ID:
146325828697912320
(این مقدار از چپ به راست شامل تایماستمپ، شناسه سرور و شمارنده داخلی است.)
🔥 چرا Snowflake بهتر از UUID است؟
معیار | UUID (v4) | Snowflake ID |
---|---|---|
طول (بایت) | 16 بایت | 8 بایت |
قابلیت ایندکس شدن | ❌ ضعیف (تصادفی است) | ✅ عالی (ترتیبی است) |
سرعت جستجو در دیتابیس | کندتر | سریعتر |
قابلیت استفاده در سیستمهای توزیعشده | متوسط | عالی |
اUUIDها چون تصادفی هستند، باعث میشن ایندکس در دیتابیس بهینه نباشه(چون با هر بار insert ممکن است درخت [[B+Tree]] یا [[B-Tree]] یکبار از اول ساخته شن)، درحالیکه Snowflake ID ترتیبیه و سریعتر جستجو میشه.