अंतर्दृष्टियों के लिए ट्विटर स्नोफ्लेक आईडी टूल उत्पन्न करें और विश्लेषण करें
ट्विटर स्नोफ्लेक आईडी उत्पन्न करें और विश्लेषण करें, जो वितरित प्रणालियों में उपयोग किए जाने वाले अद्वितीय 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_id_shift) | @
संबंधित उपकरण
अपने वर्कफ़्लो के लिए उपयोगी हो सकने वाले और अधिक उपकरण खोजें।