تجزیہ اور پیدا کریں ٹوئٹر اسنو فلیک آئی ڈی ٹول بصیرت کے لیے
ٹوئٹر اسنو فلیک آئی ڈیز پیدا کریں اور تجزیہ کریں، منفرد 64-بٹ شناخت کنندہ جو تقسیم شدہ نظاموں میں استعمال ہوتے ہیں۔ یہ ٹول آپ کو نئے اسنو فلیک آئی ڈیز بنانے اور موجودہ کو پارس کرنے کی اجازت دیتا ہے، جو ان کے ٹائم اسٹیمپ، مشین آئی ڈی، اور ترتیب نمبر کے اجزاء میں بصیرت فراہم کرتا ہے۔
سنو فلیک آئی ڈی جنریٹر
سنو فلیک آئی ڈی جنریٹر
دستاویزات
اسنو فلیک آئی ڈی جنریٹر: منفرد تقسیم شدہ نظام کے شناخت کنندگان بنائیں
اسنو فلیک آئی ڈی جنریٹر کیا ہے؟
ایک اسنو فلیک آئی ڈی جنریٹر تقسیم شدہ نظاموں کے لیے منفرد شناخت کنندگان بناتا ہے، جسے اصل میں ٹویٹر نے بڑے پیمانے پر ڈیٹا پروسیسنگ کے لیے تیار کیا تھا۔ یہ طاقتور منفرد آئی ڈی جنریٹر 64-بٹ عدد پیدا کرتا ہے جو ایک ٹائم اسٹیمپ، مشین آئی ڈی، اور تسلسل نمبر پر مشتمل ہوتا ہے، جو تقسیم شدہ نظاموں میں منفرد ہونے کو یقینی بناتا ہے بغیر سرورز کے درمیان ہم آہنگی کے۔
ہمارا مفت آن لائن اسنو فلیک آئی ڈی جنریٹر ٹول آپ کو فوری طور پر اسنو فلیک آئی ڈیز پیدا اور تجزیہ کرنے کی اجازت دیتا ہے، جو مائیکرو سروسز، تقسیم شدہ ڈیٹا بیس، اور ہائی تھروپٹ ایپلیکیشنز کے ساتھ کام کرنے والے ڈویلپرز کے لیے بہترین ہے۔
اسنو فلیک آئی ڈی کی پیداوار کیسے کام کرتی ہے
اسنو فلیک آئی ڈیز 64-بٹ عدد ہیں جن کی ساخت کو احتیاط سے ڈیزائن کیا گیا ہے جو منفرد ہونے کی ضمانت دیتا ہے:
- 41 بٹس: ٹائم اسٹیمپ (ایک حسب ضرورت عہد سے ملی سیکنڈ)
- 10 بٹس: مشین آئی ڈی (5 بٹس ڈیٹا سینٹر آئی ڈی کے لیے، 5 بٹس ورکر آئی ڈی کے لیے)
- 12 بٹس: تسلسل نمبر
یہ تقسیم شدہ آئی ڈی کی ساخت تقریباً 4,096 منفرد آئی ڈیز فی ملی سیکنڈ فی مشین کی پیداوار کی اجازت دیتی ہے، جو ہائی تھروپٹ تقسیم شدہ نظاموں کے لیے مثالی ہے۔
ہمارے اسنو فلیک آئی ڈی جنریٹر ٹول کا استعمال کیسے کریں
منفرد اسنو فلیک آئی ڈیز پیدا کرنے کے لیے ان سادہ مراحل کی پیروی کریں:
- حسب ضرورت عہد مقرر کریں (اختیاری): ڈیفالٹ ٹویٹر عہد (2010-11-04T01:42:54.657Z) استعمال کریں یا اپنا مقرر کریں
- مشین آئی ڈیز کی تشکیل کریں: مشین آئی ڈی (0-31) اور ڈیٹا سینٹر آئی ڈی (0-31) درج کریں
- آئی ڈی پیدا کریں: نیا منفرد اسنو فلیک آئی ڈی بنانے کے لیے "جنریٹ" پر کلک کریں
- نتائج دیکھیں: پیدا کردہ آئی ڈی اور اس کے اجزاء کی تفصیل دیکھیں
موجودہ اسنو فلیک آئی ڈیز کو تجزیہ کریں
ایک اسنو فلیک آئی ڈی کو ڈیکوڈ کرنے کے لیے، اسے "پارس آئی ڈی" کے میدان میں درج کریں اور اس کے ٹائم اسٹیمپ، مشین آئی ڈی، اور تسلسل کے اجزاء دیکھنے کے لیے "پارس" پر کلک کریں۔
اسنو فلیک آئی ڈی کی پیداوار کا فارمولا
اسنو فلیک آئی ڈی الگورڈم منفرد شناخت کنندگان کو بٹ وائز آپریشنز کا استعمال کرتے ہوئے تشکیل دیتا ہے:
1ID = (timestamp << 22) | (datacenterId << 17) | (workerId << 12) | sequence
2
فارمولا کے اجزاء:
timestamp
: عہد سے ملی سیکنڈ کی تعدادdatacenterId
: 5-بٹ عدد (0-31) جو ڈیٹا سینٹر کی شناخت کرتا ہےworkerId
: 5-بٹ عدد (0-31) جو ورکر مشین کی شناخت کرتا ہےsequence
: 12-بٹ عدد (0-4095) جو فی ملی سیکنڈ متعدد آئی ڈیز کے لیے ہے
اسنو فلیک آئی ڈی کی حساب کتاب کا عمل
اسنو فلیک آئی ڈی کی پیداوار کا الگورڈم ان درست مراحل کی پیروی کرتا ہے:
- موجودہ ٹائم اسٹیمپ حاصل کریں: ملی سیکنڈ میں موجودہ وقت حاصل کریں
- تاریخی ترتیب کو یقینی بنائیں: یہ تصدیق کریں کہ ٹائم اسٹیمپ آخری استعمال شدہ ٹائم اسٹیمپ سے زیادہ ہے
- ایک ہی ٹائم اسٹیمپ کا سامنا کریں: اگر ٹائم اسٹیمپ پچھلے سے ملتا ہے تو تسلسل نمبر بڑھائیں
- اوور فلو سے بچیں: اگر تسلسل 4096 تک پہنچ جائے تو اگلی ملی سیکنڈ کا انتظار کریں
- اجزاء کو یکجا کریں: حتمی منفرد آئی ڈی بنانے کے لیے بٹ وائز آپریشنز کا استعمال کریں
یہ عمل ہر مشین کے اندر مستقل طور پر بڑھتے ہوئے آئی ڈیز کی ضمانت دیتا ہے جبکہ تقسیم شدہ نظاموں میں عالمی منفرد ہونے کو برقرار رکھتا ہے۔
اسنو فلیک آئی ڈی کے استعمال کے کیسز اور ایپلیکیشنز
اسنو فلیک آئی ڈیز مختلف تقسیم شدہ کمپیوٹنگ منظرناموں میں بہترین ہیں:
بنیادی استعمال کے کیسز
- تقسیم شدہ نظام: متعدد مشینوں کے درمیان منفرد آئی ڈیز پیدا کریں بغیر ہم آہنگی کے
- ہائی والیوم ڈیٹا پروسیسنگ: بڑے ڈیٹا سیٹس کے لیے ترتیب دینے کے قابل آئی ڈیز بنائیں
- مائیکرو سروسز آرکیٹیکچر: مختلف خدمات کے درمیان منفرد شناخت کنندگان کو یقینی بنائیں
- ڈیٹا بیس شیئرنگ: مؤثر ڈیٹا تقسیم کے لیے ٹائم اسٹیمپ یا مشین آئی ڈی کے اجزاء کا استعمال کریں
حقیقی دنیا کی ایپلیکیشنز
- سوشل میڈیا پلیٹ فارم: ٹویٹر، انسٹاگرام برائے پوسٹ اور صارف آئی ڈیز
- ای کامرس سسٹمز: آرڈر ٹریکنگ اور انوینٹری مینجمنٹ
- IoT ڈیٹا جمع کرنا: ڈیوائس ایونٹ لاگنگ اور سینسر ڈیٹا
- مالیاتی نظام: ٹرانزیکشن پروسیسنگ اور آڈٹ ٹریلز
اسنو فلیک آئی ڈی کے متبادل اور موازنہ
اگرچہ اسنو فلیک آئی ڈیز طاقتور ہیں، دیگر منفرد آئی ڈی پیدا کرنے کے نظام شامل ہیں:
متبادل آئی ڈی سسٹمز
- UUID (یونیورسل یونیق آئیڈینٹیفائر): بغیر ترتیب دینے کی ضروریات کے تقسیم شدہ پیداوار کے لیے بہترین
- خودکار بڑھتے ہوئے ڈیٹا بیس آئی ڈیز: سادہ حل جو ایک ہی ڈیٹا بیس کی مثالوں تک محدود ہے
- ULID (یونیورسل یونیق لکیٹگرافکلی ترتیب دینے کے قابل شناخت کنندہ): اسنو فلیک کی طرح بیس32 انکوڈنگ کے ساتھ
- NanoID: ویب ایپلیکیشنز کے لیے کمپیکٹ، URL محفوظ منفرد سٹرنگ جنریٹر
اسنو فلیک آئی ڈی کی حدود اور غور و فکر
اسنو فلیک آئی ڈی کی حدود کو سمجھنا درست عمل درآمد میں مدد کرتا ہے:
عام چیلنجز
- گھڑی کی ہم آہنگی کے مسائل: نظام کے وقت کی انحصاری NTP ایڈجسٹمنٹ یا دن کی روشنی کی تبدیلیوں کے ساتھ مسائل پیدا کر سکتی ہے
- سال 2079 کی حد: 41-بٹ ٹائم اسٹیمپ اوور فلو کے لیے طویل مدتی منصوبہ بندی کی ضرورت ہوتی ہے
- مشین آئی ڈی کا انتظام: بڑے تقسیم شدہ نظاموں میں منفرد مشین آئی ڈیز کو یقینی بنانا ہم آہنگی کی ضرورت ہوتی ہے
- تسلسل اوور فلو: انتہائی ہائی تھروپٹ منظرنامے فی ملی سیکنڈ 4096 تسلسل کو ختم کر سکتے ہیں
- مشینوں کے درمیان ترتیب: آئی ڈیز ہر مشین کے لیے مونوٹونک ہیں لیکن تمام مشینوں کے درمیان عالمی طور پر نہیں
اسنو فلیک آئی ڈیز کی تاریخ
اسنو فلیک آئی ڈیز کو ٹویٹر نے 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
1import time
2import threading
3
4class SnowflakeGenerator:
5 def __init__(self, datacenter_id, worker_id, sequence=0):
6 self.datacenter_id = datacenter_id
7 self.worker_id = worker_id
8 self.sequence = sequence
9
10 self.last_timestamp = -1
11 self.epoch = 1288834974657
12
13 self.datacenter_id_bits = 5
14 self.worker_id_bits = 5
15 self.sequence_bits = 12
16
17 self.max_datacenter_id = -1 ^ (-1 << self.datacenter_id_bits)
18 self.max_worker_id = -1 ^ (-1 << self.worker_id_bits)
19
20 self.worker_id_shift = self.sequence_bits
21 self.datacenter_id_shift = self.sequence_bits + self.worker_id_bits
22 self.timestamp_left_shift = self.sequence_bits + self.worker_id_bits + self.datacenter_id_bits
23 self.sequence_mask = -1 ^ (-1 << self.sequence_bits)
24
25 self._lock = threading.Lock()
26
27 def _til_next_millis(self, last_timestamp):
28 timestamp = self._get_timestamp()
29 while timestamp <= last_timestamp:
30 timestamp = self._get_timestamp()
31 return timestamp
32
33 def _get_timestamp(self):
34 return int(time.time() * 1000)
35
36 def next_id(self):
37 with self._lock:
38 timestamp = self._get_timestamp()
39
40 if timestamp < self.last_timestamp:
41 raise ValueError("Clock moved backwards. Refusing to generate id")
42
43 if timestamp == self.last_timestamp:
44 self.sequence = (self.sequence + 1) & self.sequence_mask
45 if self.sequence == 0:
46 timestamp = self._til_next_millis(self.last_timestamp)
47 else:
48 self.sequence = 0
49
50 self.last_timestamp = timestamp
51
52 return ((timestamp - self.epoch) << self.timestamp_left_shift) | \
53 (self.datacenter_id << self.datacenter_id_shift) | \
54 (self.worker_id << self.worker_id_shift) | \
55 self.sequence
56
57## استعمال
58generator = SnowflakeGenerator(datacenter_id=1, worker_id=1)
59snowflake_id = generator.next_id()
60print(f"Generated Snowflake ID: {snowflake_id}")
61
1import java.util.concurrent.locks.Lock;
2import java.util.concurrent.locks.ReentrantLock;
3
4public class SnowflakeGenerator {
5 private final long epoch;
6 private final long datacenterIdBits;
7 private final long workerIdBits;
8 private final long sequenceBits;
9 private final long maxDatacenterId;
10 private final long maxWorkerId;
11 private final long workerIdShift;
12 private final long datacenterIdShift;
13 private final long timestampLeftShift;
14 private final long sequenceMask;
15
16 private long datacenterId;
17 private long workerId;
18 private long sequence = 0L;
19 private long lastTimestamp = -1L;
20
21 private final Lock lock = new ReentrantLock();
22
23 public SnowflakeGenerator(long datacenterId, long workerId) {
24 this.epoch = 1288834974657L;
25 this.datacenterIdBits = 5L;
26 this.workerIdBits = 5L;
27 this.sequenceBits = 12L;
28
29 this.maxDatacenterId = ~(-1L << datacenterIdBits);
30 this.maxWorkerId = ~(-1L << workerIdBits);
31
32 this.workerIdShift = sequenceBits;
33 this.datacenterIdShift = sequenceBits + workerIdBits;
34 this.timestampLeftShift = sequenceBits + workerIdBits + datacenterIdBits;
35 this.sequenceMask = ~(-1L << sequenceBits);
36
37 if (datacenterId > maxDatacenterId || datacenterId < 0) {
38 throw new IllegalArgumentException("datacenterId can't be greater than maxDatacenterId or less than 0");
39 }
40 if (workerId > maxWorkerId || workerId < 0) {
41 throw new IllegalArgumentException("workerId can't be greater than maxWorkerId or less than 0");
42 }
43 this.datacenterId = datacenterId;
44 this.workerId = workerId;
45 }
46
47 public long nextId() {
48 lock.lock();
49 try {
50 long timestamp = timeGen();
51 if (timestamp < lastTimestamp) {
52 throw new RuntimeException("Clock moved backwards. Refusing to generate id");
53 }
54
55 if (lastTimestamp == timestamp) {
56 sequence = (sequence + 1) & sequenceMask;
57 if (sequence == 0) {
58 timestamp = tilNextMillis(lastTimestamp);
59 }
60 } else {
61 sequence = 0L;
62 }
63
64 lastTimestamp = timestamp;
65
66 return ((timestamp - epoch) << timestampLeftShift) |
67 (datacenterId << datacenterIdShift) |
68 (workerId << workerIdShift) |
69 sequence;
70 } finally {
71 lock.unlock();
72 }
73 }
74
75 private long tilNextMillis(long lastTimestamp) {
76 long timestamp = timeGen();
77 while (timestamp <= lastTimestamp) {
78 timestamp = timeGen();
79 }
80 return timestamp;
81 }
82
83 private long timeGen() {
84 return System.currentTimeMillis();
85 }
86
87 public static void main(String[] args) {
88 SnowflakeGenerator generator = new SnowflakeGenerator(1, 1);
89 long id = generator.nextId();
90 System.out.println("Generated Snowflake ID: " + id);
91 }
92}
93
require 'time' class SnowflakeGenerator def initialize(datacenter_id, worker_id, sequence = 0) @datacenter_id = datacenter_id @worker_id = worker_id @sequence = sequence @last_timestamp = -1 @epoch = 1288834974657 @datacenter_id_bits = 5 @worker_id_bits = 5 @sequence_bits = 12 @max_datacenter_id = -1 ^ (-1 << @datacenter_id_bits) @max_worker_id = -1 ^ (-1 << @worker_id_bits) @worker_id_shift = @sequence_bits @datacenter_id_shift = @sequence_bits + @worker_id_bits @timestamp_left_shift = @sequence_bits + @worker_id_bits + @datacenter_id_bits @sequence_mask = -1 ^ (-1 << @sequence_bits) end def next_id timestamp = (Time.now.to_f * 1000).to_i raise 'Clock moved backwards' if timestamp < @last_timestamp if timestamp == @last_timestamp @sequence = (@sequence + 1) & @sequence_mask timestamp = til_next_millis(@last_timestamp) if @sequence == 0 else @sequence = 0 end @last_timestamp = timestamp ((timestamp - @epoch) << @timestamp_left_shift) | (@datacenter_id << @datacenter_id_shift) | (@worker_id << @worker
متعلقہ اوزار
آپ کے ورک فلو کے لیے مفید ہونے والے مزید ٹولز کا انعام کریں