உள்ளடக்கங்களைப் பெறுவதற்கான ட்விட்டர் ஸ்னோஃப்ளேக் ஐடி கருவி உருவாக்கவும் மற்றும் பகுப்பாய்வு செய்யவும்
விநியோகிக்கப்பட்ட அமைப்புகளில் பயன்படுத்தப்படும் தனித்துவமான 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 ஐ அடைந்தால், அடுத்த மில்லிசெகண்டுக்காக காத்திருக்கவும்
- கூறுகளை இணைக்கவும்: இறுதி தனித்துவமான ஐடியை உருவாக்க பிட்டுவை செயல்பாடுகளைப் பயன்படுத்தவும்
இந்த செயல்முறை ஒவ்வொரு இயந்திரத்திற்குள் மோனோடோனிகல் அதிகரிக்கும் ஐடிகளை உறுதி செய்கிறது, மேலும் விநியோகிக்கப்பட்ட அமைப்புகளில் உலகளாவிய தனித்துவத்தைப் பாதுகாக்கிறது.
ஸ்னோஃப்ளேக் ஐடி பயன்பாடுகள் மற்றும் செயலிகள்
ஸ்னோஃப்ளேக் ஐடிகள் பல்வேறு விநியோகிக்கப்பட்ட கணினி சூழ்நிலைகளில் சிறந்தவை:
முதன்மை பயன்பாடுகள்
- விநியோகிக்கப்பட்ட அமைப்புகள்: ஒரே நேரத்தில் பல இயந்திரங்களில் தனித்துவமான ஐடிகளை உருவாக்கவும்
- உயர்-அளவிலான தரவுகள் செயலாக்கம்: பெரிய தரவுத்தொகுப்புகளுக்கான வரிசைப்படுத்தக்கூடிய ஐடிகளை உருவாக்கவும்
- மைக்ரோசர்வீசுகள் கட்டமைப்பு: வெவ்வேறு சேவைகளுக்கிடையில் தனித்துவமான அடையாளங்களை உறுதி செய்யவும்
- தரவுத்தொகுப்பு பகுப்பாய்வு: தரவுகளை திறம்படப் பகுப்பாய்வு செய்ய நேரச்சீட்டு அல்லது இயந்திர ஐடி கூறுகளைப் பயன்படுத்தவும்
உண்மையான உலக செயலிகள்
- சமூக ஊடக தளங்கள்: ட்விட்டர், இன்ஸ்டாகிராம் பதிவுகள் மற்றும் பயனர் ஐடிகளுக்காக
- மின்னணு வர்த்தக அமைப்புகள்: ஆர்டர் கண்காணிப்பு மற்றும் கையிருப்பு மேலாண்மை
- ஐஓடி தரவுகள் சேகரிப்பு: சாதன நிகழ்வு பதிவு மற்றும் சென்சார் தரவுகள்
- நிதி அமைப்புகள்: பரிவர்த்தனை செயலாக்கம் மற்றும் ஆடிட் தடங்கள்
ஸ்னோஃப்ளேக் ஐடி மாற்றங்கள் மற்றும் ஒப்பீடுகள்
ஸ்னோஃப்ளேக் ஐடிகள் சக்திவாய்ந்தவை, ஆனால் பிற தனித்துவ ஐடி உருவாக்கும் அமைப்புகள் உள்ளன:
மாற்று ஐடி அமைப்புகள்
- UUID (உலகளாவிய தனித்துவ அடையாளம்): வரிசைப்படுத்தல் தேவைகள் இல்லாமல் விநியோகிக்கப்பட்ட உருவாக்கத்திற்கு சிறந்தது
- ஆட்டோ-அதிகரிக்கும் தரவுத்தொகுப்பு ஐடிகள்: ஒரே தரவுத்தொகுப்பு நிகழ்வுகளுக்கு மட்டுமே வரையறுக்கப்பட்ட எளிய தீர்வு
- ULID (உலகளாவிய தனித்துவ லெக்ஸிகோகிராபிகல் வரிசைப்படுத்தக்கூடிய அடையாளம்): ஸ்னோஃப்ளேக்கிற்கு ஒத்த base32 குறியாக்கத்துடன்
- 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// Usage
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## Usage
58generator = SnowflakeGenerator(datacenter_id=1, worker_id=1)
59snowflake_id = generator.next_id()
60print(f"Generated Snowflake 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 datacenterIdShift; private final long timestampLeftShift; private final long sequenceMask; private long datacenterId; private long workerId; private long sequence = 0L; private long lastTimestamp = -1L; private final Lock lock = new ReentrantLock(); public SnowflakeGenerator(long datacenterId, long workerId) { this.epoch = 1288834974657L; this.datacenterIdBits = 5L; this.workerIdBits = 5L; this.sequenceBits = 12L; this.maxDatacenterId = ~(-1L << datacenterIdBits); this.maxWorkerId = ~(-1L << workerIdBits); this.workerIdShift = sequenceBits; this.datacenterIdShift = sequenceBits + workerIdBits; this.timestampLeftShift = sequenceBits + workerIdBits + datacenterIdBits; this.sequenceMask = ~(-1L << sequenceBits); if (datacenterId > maxDatacenterId || datacenterId < 0) { throw new IllegalArgumentException("datacenterId can't be greater than maxDatacenterId or less than 0"); } if (workerId > maxWorkerId || workerId < 0) { throw new IllegalArgumentException("workerId can't be greater than maxWorkerId or less than 0"); } this.datacenterId = datacenterId; this.workerId = workerId; } public long nextId() { lock.lock(); try { long timestamp = timeGen(); if (timestamp < lastTimestamp) { throw new RuntimeException("Clock moved backwards. Refusing to generate id"); } if (lastTimestamp == timestamp) { sequence = (sequence + 1) & sequenceMask; if (sequence == 0) { timestamp = tilNextMillis(lastTimestamp); } } else
தொடர்புடைய கருவிகள்
உங்கள் பணிப்பாக்கிலுக்கு பயனுள்ள மேலும் பயனுள்ள கருவிகளைக் கண்டறியவும்