🛠️

Whiz Tools

Build • Create • Innovate

سنو فلیک آئی ڈی جنریٹر - منفرد شناختی نمبر بنائیں

ٹویٹر سنو فلیک آئی ڈی کو جنریٹ اور تجزیہ کریں، منفرد 64-بٹ شناختی نمبر جو تقسیم شدہ نظاموں میں استعمال ہوتے ہیں۔ یہ ٹول آپ کو نئے سنو فلیک آئی ڈی بنانے اور موجودہ کو پارس کرنے کی اجازت دیتا ہے، جو ان کے ٹائم اسٹیمپ، مشین آئی ڈی، اور سیکوئنس نمبر کے اجزاء کے بارے میں بصیرت فراہم کرتا ہے۔

سنو فلیک آئی ڈی جنریٹر

سنو فلیک آئی ڈی جنریٹر

Optional: Unix timestamp in milliseconds (defaults to current time)
📚

دستاویزات

Snowflake ID Generator

تعارف

سنو فلیک آئی ڈی ایک منفرد شناخت کنندہ ہے جو تقسیم شدہ نظاموں میں استعمال ہوتا ہے، جو اصل میں ٹویٹر کی طرف سے تیار کیا گیا تھا۔ یہ ٹول آپ کو سنو فلیک آئی ڈی تیار کرنے اور تجزیہ کرنے کی اجازت دیتا ہے، جو کہ وقت، مشین آئی ڈی، اور تسلسل نمبر پر مشتمل 64 بٹ کے عدد ہیں۔

سنو فلیک آئی ڈی کیسے کام کرتی ہیں

سنو فلیک آئی ڈی 64 بٹ کے عدد ہیں جو درج ذیل طور پر ترتیب دیے گئے ہیں:

  • 41 بٹ: وقت (ایک مخصوص عہد سے ملی سیکنڈ)
  • 10 بٹ: مشین آئی ڈی (5 بٹ ڈیٹا سینٹر آئی ڈی کے لیے، 5 بٹ ورکر آئی ڈی کے لیے)
  • 12 بٹ: تسلسل نمبر

یہ ساخت ہر مشین کے لیے فی ملی سیکنڈ تقریباً 4,096 منفرد آئی ڈی تیار کرنے کی اجازت دیتی ہے۔

سنو فلیک آئی ڈی جنریٹر کا استعمال

  1. (اختیاری) ایک مخصوص عہد مقرر کریں (ڈیفالٹ ٹویٹر کا عہد: 2010-11-04T01:42:54.657Z)
  2. ایک مشین آئی ڈی (0-31) اور ڈیٹا سینٹر آئی ڈی (0-31) درج کریں
  3. نیا سنو فلیک آئی ڈی بنانے کے لیے "جنریٹ" پر کلک کریں
  4. تیار کردہ آئی ڈی اور اس کے اجزاء دکھائے جائیں گے

موجودہ سنو فلیک آئی ڈی کو پارس کرنے کے لیے، اسے "پارس آئی ڈی" کے میدان میں درج کریں اور "پارس" پر کلک کریں۔

فارمولا

سنو فلیک آئی ڈی کو بٹ وائز آپریشنز کا استعمال کرتے ہوئے بنایا جاتا ہے:

1ID = (timestamp << 22) | (datacenterId << 17) | (workerId << 12) | sequence
2

جہاں:

  • timestamp مخصوص عہد سے ملی سیکنڈ کی تعداد ہے
  • datacenterId ایک 5 بٹ عدد (0-31)
  • workerId ایک 5 بٹ عدد (0-31)
  • sequence ایک 12 بٹ عدد (0-4095)

حساب

سنو فلیک آئی ڈی جنریٹر درج ذیل مراحل انجام دیتا ہے:

  1. موجودہ وقت کو ملی سیکنڈ میں حاصل کریں
  2. یہ یقینی بنائیں کہ وقت آخری استعمال شدہ وقت سے بڑا ہے (منفرد ہونے کے لیے)
  3. اگر وقت آخری کے برابر ہے تو تسلسل نمبر بڑھائیں
  4. اگر تسلسل نمبر زیادہ ہو جائے (4096 تک پہنچ جائے)، تو اگلی ملی سیکنڈ کا انتظار کریں
  5. بٹ وائز آپریشنز کا استعمال کرتے ہوئے اجزاء کو ملا کر حتمی آئی ڈی بنائیں

استعمال کے کیس

سنو فلیک آئی ڈی خاص طور پر درج ذیل میں مفید ہیں:

  1. تقسیم شدہ نظام: متعدد مشینوں کے درمیان منفرد آئی ڈی تیار کریں بغیر ہم آہنگی کے
  2. ہائی والیوم ڈیٹا: بڑے ڈیٹا سیٹس کے لیے ترتیب دیے جانے والے آئی ڈی بنائیں
  3. مائیکروسروسز: مختلف خدمات کے درمیان منفرد شناخت کنندہ یقینی بنائیں
  4. ڈیٹا بیس شیئرنگ: مؤثر شیئرنگ کے لیے وقت یا مشین آئی ڈی جزو کا استعمال کریں

متبادل

اگرچہ سنو فلیک آئی ڈی طاقتور ہیں، لیکن دیگر آئی ڈی تیار کرنے کے نظام میں شامل ہیں:

  1. UUID (عالمی طور پر منفرد شناخت کنندہ): جب تقسیم شدہ پیداوار کی ضرورت ہو بغیر ترتیب کے
  2. خودکار بڑھتے ہوئے ڈیٹا بیس آئی ڈی: سادہ لیکن ایک ہی ڈیٹا بیس کی مثالوں تک محدود
  3. ULID (عالمی طور پر منفرد لغوی طور پر ترتیب دی جانے والی شناخت کنندہ): سنو فلیک کی طرح، لیکن مختلف ساخت کے ساتھ

کنارے کے کیسز اور حدود

  1. گھڑی کی ہم آہنگی: سنو فلیک آئی ڈی نظام کے وقت پر انحصار کرتے ہیں۔ اگر گھڑی نیچے کی طرف بڑھتی ہے NTP ایڈجسٹمنٹ یا دن کی بچت کے وقت کی تبدیلیوں کی وجہ سے، تو یہ آئی ڈی کی پیداوار میں مسائل پیدا کر سکتی ہے۔

  2. سال 2038 کا مسئلہ: 41 بٹ کا وقت 2079 میں زیادہ ہو جائے گا (ٹویٹر کے عہد کے لحاظ سے)۔ سنو فلیک آئی ڈی استعمال کرنے والے نظاموں کو اس ممکنہ واقعے کے لیے منصوبہ بندی کرنی چاہیے۔

  3. مشین آئی ڈی کی ٹکراؤ: بڑے تقسیم شدہ نظاموں میں، منفرد مشین آئی ڈی کو یقینی بنانا چیلنجنگ ہو سکتا ہے اور اضافی ہم آہنگی کی ضرورت ہو سکتی ہے۔

  4. تسلسل کی زیادہ مقدار: انتہائی ہائی تھروپٹ منظرناموں میں، یہ ممکن ہے کہ 4096 تسلسل فی ملی سیکنڈ ختم ہو جائیں، ممکنہ طور پر تاخیر کا باعث بنیں۔

  5. مشینوں کے درمیان غیر متوازنیت: اگرچہ آئی ڈی ایک ہی مشین پر بڑھتے ہیں، لیکن یہ متعدد مشینوں کے درمیان سخت طور پر بڑھتے نہیں ہو سکتے۔

تاریخ

سنو فلیک آئی ڈی کو 2010 میں ٹویٹر کی طرف سے متعارف کرایا گیا تاکہ تقسیم شدہ، وقت کے لحاظ سے ترتیب دیے جانے والے منفرد شناخت کنندگان کی ضرورت کو پورا کیا جا سکے۔ اس کے بعد سے یہ بہت سی دوسری کمپنیوں اور منصوبوں کی طرف سے اپنائے گئے ہیں اور ان میں تبدیلی کی گئی ہے۔

مثالیں

یہاں مختلف زبانوں میں سنو فلیک آئی ڈی جنریٹر کی عملی مثالیں ہیں:

1class SnowflakeGenerator {
2  constructor(epoch = 1288834974657, datacenterIdBits = 5, workerIdBits = 5, sequenceBits = 12) {
3    this.epoch = BigInt(epoch);
4    this.datacenterIdBits = datacenterIdBits;
5    this.workerIdBits = workerIdBits;
6    this.sequenceBits = sequenceBits;
7    this.maxDatacenterId = -1n ^ (-1n << BigInt(datacenterIdBits));
8    this.maxWorkerId = -1n ^ (-1n << BigInt(workerIdBits));
9    this.sequenceMask = -1n ^ (-1n << BigInt(sequenceBits));
10    this.workerIdShift = BigInt(sequenceBits);
11    this.datacenterIdShift = BigInt(sequenceBits + workerIdBits);
12    this.timestampLeftShift = BigInt(sequenceBits + workerIdBits + datacenterIdBits);
13    this.sequence = 0n;
14    this.lastTimestamp = -1n;
15  }
16
17  nextId(datacenterId, workerId) {
18    let timestamp = this.currentTimestamp();
19
20    if (timestamp < this.lastTimestamp) {
21      throw new Error('Clock moved backwards. Refusing to generate id');
22    }
23
24    if (timestamp === this.lastTimestamp) {
25      this.sequence = (this.sequence + 1n) & this.sequenceMask;
26      if (this.sequence === 0n) {
27        timestamp = this.tilNextMillis(this.lastTimestamp);
28      }
29    } else {
30      this.sequence = 0n;
31    }
32
33    this.lastTimestamp = timestamp;
34
35    return ((timestamp - this.epoch) << this.timestampLeftShift) |
36           (BigInt(datacenterId) << this.datacenterIdShift) |
37           (BigInt(workerId) << this.workerIdShift) |
38           this.sequence;
39  }
40
41  tilNextMillis(lastTimestamp) {
42    let timestamp = this.currentTimestamp();
43    while (timestamp <= lastTimestamp) {
44      timestamp = this.currentTimestamp();
45    }
46    return timestamp;
47  }
48
49  currentTimestamp() {
50    return BigInt(Date.now());
51  }
52}
53
54// استعمال
55const generator = new SnowflakeGenerator();
56const id = generator.nextId(1, 1);
57console.log(`Generated Snowflake ID: ${id}`);
58

ڈایاگرام

یہاں سنو فلیک آئی ڈی کی ساخت کی بصری نمائندگی ہے:

وقت (41 بٹ) مشین آئی ڈی (10 بٹ) تسلسل (12 بٹ)

64 بٹ سنو فلیک آئی ڈی کی ساخت

حوالہ جات

  1. "سنو فلیک کا اعلان۔" ٹویٹر انجینئرنگ بلاگ، https://blog.twitter.com/engineering/en_us/a/2010/announcing-snowflake
  2. "سنو فلیک آئی ڈی۔" وکیپیڈیا، https://en.wikipedia.org/wiki/Snowflake_ID
  3. "مائیکروسروسز میں تقسیم شدہ آئی ڈی کی پیداوار۔" میڈیم، https://medium.com/swlh/distributed-id-generation-in-microservices-b6ce9a8dd93f