پرش به مطلب اصلی

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 ترتیبیه و سریع‌تر جستجو می‌شه.