ਟਵਿੱਟਰ ਸਨੋਫਲੇਕ ਆਈਡੀ ਬਣਾਓ ਅਤੇ ਵਿਸ਼ਲੇਸ਼ਣ ਕਰੋ, ਜੋ ਵਿਤਰਿਤ ਪ੍ਰਣਾਲੀਆਂ ਵਿੱਚ ਵਰਤੇ ਜਾਣ ਵਾਲੇ ਵਿਲੱਖਣ 64-ਬਿਟ ਪਛਾਣਕਰਤਾ ਹਨ। ਇਹ ਟੂਲ ਤੁਹਾਨੂੰ ਨਵੇਂ ਸਨੋਫਲੇਕ ਆਈਡੀ ਬਣਾਉਣ ਅਤੇ ਮੌਜੂਦਾ ਆਈਡੀ ਨੂੰ ਪਾਰਸ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ, ਜੋ ਉਨ੍ਹਾਂ ਦੇ ਟਾਈਮਸਟੈਂਪ, ਮਸ਼ੀਨ ਆਈਡੀ, ਅਤੇ ਕ੍ਰਮ ਨੰਬਰ ਦੇ ਘਟਕਾਂ ਵਿੱਚ ਜਾਣਕਾਰੀ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ।
ਇੱਕ ਸਨੋਫਲੇਕ ID ਜਨਰੇਟਰ ਵੰਡੇ ਗਏ ਸਿਸਟਮਾਂ ਲਈ ਵਿਲੱਖਣ ਪਛਾਣਕਰਤੀਆਂ ਬਣਾਉਂਦਾ ਹੈ, ਜਿਸਨੂੰ ਪਹਿਲਾਂ ਟਵਿੱਟਰ ਦੁਆਰਾ ਵੱਡੇ ਪੈਮਾਨੇ 'ਤੇ ਡੇਟਾ ਪ੍ਰਕਿਰਿਆ ਕਰਨ ਲਈ ਵਿਕਸਿਤ ਕੀਤਾ ਗਿਆ ਸੀ। ਇਹ ਸ਼ਕਤੀਸ਼ਾਲੀ ਵਿਲੱਖਣ ID ਜਨਰੇਟਰ 64-ਬਿੱਟ ਪੂਰਨਾਂਕ ਬਣਾਉਂਦਾ ਹੈ ਜੋ ਇੱਕ ਟਾਈਮਸਟੈਂਪ, ਮਸ਼ੀਨ ID, ਅਤੇ ਕ੍ਰਮ ਨੰਬਰ ਤੋਂ ਬਣਿਆ ਹੁੰਦਾ ਹੈ, ਜਿਸ ਨਾਲ ਵੰਡੇ ਗਏ ਸਿਸਟਮਾਂ ਵਿੱਚ ਵਿਲੱਖਣਤਾ ਨੂੰ ਯਕੀਨੀ ਬਣਾਇਆ ਜਾਂਦਾ ਹੈ ਬਿਨਾਂ ਸਰਵਰਾਂ ਦੇ ਵਿਚਕਾਰ ਸਹਿਯੋਗ ਦੇ।
ਸਾਡਾ ਮੁਫਤ ਆਨਲਾਈਨ ਸਨੋਫਲੇਕ ID ਜਨਰੇਟਰ ਟੂਲ ਤੁਹਾਨੂੰ ਸਨੋਫਲੇਕ IDs ਨੂੰ ਤੁਰੰਤ ਜਨਰੇਟ ਅਤੇ ਪਾਰਸ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ, ਜੋ ਕਿ ਮਾਈਕਰੋਸਰਵਿਸਜ਼, ਵੰਡੇ ਗਏ ਡੇਟਾਬੇਸ, ਅਤੇ ਉੱਚ-ਥ੍ਰੂਪੁਟ ਐਪਲੀਕੇਸ਼ਨਾਂ ਨਾਲ ਕੰਮ ਕਰਨ ਵਾਲੇ ਵਿਕਾਸਕਾਂ ਲਈ ਬਿਹਤਰ ਹੈ।
ਸਨੋਫਲੇਕ IDs 64-ਬਿੱਟ ਪੂਰਨਾਂਕ ਹਨ ਜਿਸਦੀ ਇੱਕ ਧਿਆਨ ਨਾਲ ਡਿਜ਼ਾਈਨ ਕੀਤੀ ਗਈ ਸੰਰਚਨਾ ਹੈ ਜੋ ਵਿਲੱਖਣਤਾ ਦੀ ਗਾਰੰਟੀ ਦਿੰਦੀ ਹੈ:
ਇਹ ਵੰਡੇ ਗਏ ID ਸੰਰਚਨਾ ਪ੍ਰਤੀ ਮਸ਼ੀਨ ਪ੍ਰਤੀ ਲਗਭਗ 4,096 ਵਿਲੱਖਣ IDs ਪ੍ਰਤੀ ਮਿਲੀਸੈਕੰਡ ਦੇ ਜਨਰੇਸ਼ਨ ਦੀ ਆਗਿਆ ਦਿੰਦੀ ਹੈ, ਜਿਸ ਨਾਲ ਇਹ ਉੱਚ-ਥ੍ਰੂਪੁਟ ਵੰਡੇ ਗਏ ਸਿਸਟਮਾਂ ਲਈ ਆਦਰਸ਼ ਬਣ ਜਾਂਦਾ ਹੈ।
ਵਿਲੱਖਣ ਸਨੋਫਲੇਕ IDs ਨੂੰ ਬਣਾਉਣ ਲਈ ਇਹ ਸਧਾਰਣ ਕਦਮ ਫੋਲੋ ਕਰੋ:
ਇੱਕ ਸਨੋਫਲੇਕ ID ਨੂੰ ਡਿਕੋਡ ਕਰਨ ਲਈ, ਇਸਨੂੰ "Parse ID" ਖੇਤਰ ਵਿੱਚ ਦਰਜ ਕਰੋ ਅਤੇ ਇਸਦੇ ਟਾਈਮਸਟੈਂਪ, ਮਸ਼ੀਨ ID, ਅਤੇ ਕ੍ਰਮ ਘਟਕਾਂ ਨੂੰ ਵੇਖਣ ਲਈ "Parse" 'ਤੇ ਕਲਿੱਕ ਕਰੋ।
ਸਨੋਫਲੇਕ ID ਅਲਗੋਰਿਦਮ ਵਿਲੱਖਣ ਪਛਾਣਕਰਤੀਆਂ ਨੂੰ ਬਿੱਟਵਾਈਜ਼ ਓਪਰੇਸ਼ਨਾਂ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਬਣਾਉਂਦਾ ਹੈ:
1ID = (timestamp << 22) | (datacenterId << 17) | (workerId << 12) | sequence
2
ਫਾਰਮੂਲਾ ਦੇ ਘਟਕ:
timestamp
: ਯੁੱਗ ਤੋਂ ਮਿਲੀਸੈਕੰਡ ਦੀ ਗਿਣਤੀdatacenterId
: 5-ਬਿੱਟ ਪੂਰਨਾਂਕ (0-31) ਜੋ ਡੇਟਾ ਸੈਂਟਰ ਦੀ ਪਛਾਣ ਕਰਦਾ ਹੈworkerId
: 5-ਬਿੱਟ ਪੂਰਨਾਂਕ (0-31) ਜੋ ਵਰਕਰ ਮਸ਼ੀਨ ਦੀ ਪਛਾਣ ਕਰਦਾ ਹੈsequence
: 12-ਬਿੱਟ ਪੂਰਨਾਂਕ (0-4095) ਜੋ ਪ੍ਰਤੀ ਮਿਲੀਸੈਕੰਡ ਲਈ ਕਈ IDs ਲਈ ਹੈਸਨੋਫਲੇਕ ID ਜਨਰੇਸ਼ਨ ਅਲਗੋਰਿਦਮ ਇਹਨਾਂ ਸਹੀ ਕਦਮਾਂ ਦੀ ਪਾਲਣਾ ਕਰਦਾ ਹੈ:
ਇਹ ਪ੍ਰਕਿਰਿਆ ਹਰ ਮਸ਼ੀਨ ਵਿੱਚ ਮੋਨੋਟੋਨਿਕਲੀ ਵਧ ਰਹੇ IDs ਦੀ ਗਾਰੰਟੀ ਦਿੰਦੀ ਹੈ ਜਦੋਂ ਕਿ ਵੰਡੇ ਗਏ ਸਿਸਟਮਾਂ ਵਿੱਚ ਗਲੋਬਲ ਵਿਲੱਖਣਤਾ ਨੂੰ ਬਣਾਈ ਰੱਖਦੀ ਹੈ।
ਸਨੋਫਲੇਕ IDs ਵੱਖ-ਵੱਖ ਵੰਡੇ ਗਏ ਕੰਪਿਊਟਿੰਗ ਸਥਿਤੀਆਂ ਵਿੱਚ ਸ਼ਾਨਦਾਰ ਹਨ:
ਜਦੋਂ ਕਿ ਸਨੋਫਲੇਕ IDs ਸ਼ਕਤੀਸ਼ਾਲੀ ਹਨ, ਹੋਰ ਵਿਲੱਖਣ ID ਜਨਰੇਸ਼ਨ ਸਿਸਟਮਾਂ ਵਿੱਚ ਸ਼ਾਮਲ ਹਨ:
ਸਨੋਫਲੇਕ ID ਦੀਆਂ ਸੀਮਾਵਾਂ ਨੂੰ ਸਮਝਣਾ ਸਹੀ ਕਾਰਜਨਵਾਇਕੀ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ:
ਸਨੋਫਲੇਕ IDs ਨੂੰ ਟਵਿੱਟਰ ਦੁਆਰਾ 2010 ਵਿੱਚ ਵੰਡੇ ਗਏ, ਸਮੇਂ-ਸੋਰਟ ਕਰਨ ਯੋਗ ਵਿਲੱਖਣ ਪਛਾਣਕਰਤੀਆਂ ਨੂੰ ਵੱਡੇ ਪੈਮਾਨੇ 'ਤੇ ਬਣਾਉਣ ਦੀ ਚੁਣੌਤੀ ਨੂੰ ਹੱਲ ਕਰਨ ਲਈ ਜਾਣੂ ਕੀਤਾ ਗਿਆ ਸੀ। ਜਿਵੇਂ ਜਿਵੇਂ ਟਵਿੱਟਰ ਦੀ ਯੂਜ਼ਰ ਬੇਸ ਅਤੇ ਟਵੀਟ ਦੀ ਮਾਤਰਾ ਵਧੀ, ਰਵਾਇਤੀ ਆਟੋ-ਇੰਕ੍ਰਿਮੈਂਟਿੰਗ IDs ਉਨ੍ਹਾਂ ਦੇ ਵੰਡੇ ਗਏ ਆਰਕੀਟੈਕਚਰ ਲਈ ਅਣਉਪਯੋਗ ਹੋ ਗਏ।
ਇਹ ਸਿਸਟਮ ਬਾਅਦ ਵਿੱਚ ਇੰਸਟਾਗ੍ਰਾਮ, ਡਿਸਕੋਰਡ, ਅਤੇ ਬੇਸ਼ੁਮਾਰ ਹੋਰ ਪਲੇਟਫਾਰਮਾਂ ਦੁਆਰਾ ਅਪਣਾਇਆ ਗਿਆ ਜੋ ਵੰਡੇ ਗਏ ਸਿਸਟਮਾਂ ਲਈ ਸਕੇਲ ਕਰਨ ਯੋਗ ID ਜਨਰੇਸ਼ਨ ਦੀ ਲੋੜ ਰੱਖਦੇ ਹਨ।
ਆਪਣੀ ਪਸੰਦ ਦੀ ਪ੍ਰੋਗ੍ਰਾਮਿੰਗ ਭਾਸ਼ਾ ਵਿੱਚ ਸਨੋਫਲੇਕ ID ਜਨਰੇਸ਼ਨ ਨੂੰ ਲਾਗੂ ਕਰੋ:
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('ਘੜੀ ਪਿੱਛੇ ਹਟ ਗਈ। 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(`ਬਣਾਈ ਗਈ ਸਨੋਫਲੇਕ 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("ਘੜੀ ਪਿੱਛੇ ਹਟ ਗਈ। 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"ਬਣਾਈ ਗਈ ਸਨੋਫਲੇਕ ID: {snowflake_id}")
61
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class SnowflakeGenerator { private final long epoch; private final long datacenterIdBits; private final long workerIdBits; private final long sequenceBits; private final long maxDatacenterId; private final long maxWorkerId; private final long workerIdShift; private final long datacenter
ਆਪਣੇ ਕਾਰਜ ਦੇ ਲਈ ਵਰਤਣ ਯੋਗ ਹੋਣ ਵਾਲੇ ਹੋਰ ਸੰਦੇਸ਼ ਦੀ ਖੋਜ ਕਰੋ