🛠️

Whiz Tools

Build • Create • Innovate

ஸ்நோஃபிளேக் ஐடி உருவாக்கும் மற்றும் பகுப்பாய்வு செய்யும் கருவி

விநியோகிக்கப்பட்ட அமைப்புகளில் பயன்படுத்தப்படும் தனித்துவமான 64-பிட் அடையாளங்களை உருவாக்கவும் மற்றும் பகுப்பாய்வு செய்யவும். இந்த கருவி புதிய ஸ்நோஃபிளேக் ஐடிகளை உருவாக்கவும், உள்ள ஐடிகளை பகுப்பாய்வு செய்யவும், அவற்றின் நேரம், இயந்திர ஐடி மற்றும் வரிசை எண்ணிக்கை கூறுகளைப் பற்றிய தகவல்களை வழங்குகிறது.

ஸ்னோஃப்ளேக் ஐடி உருவாக்கி

ஸ்னோஃப்ளேக் ஐடி உருவாக்கி

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

ஆவணங்கள்

Snowflake ID உருவாக்கி

அறிமுகம்

Snowflake ID என்பது பகிர்ந்தளிக்கப்பட்ட முறைமைகளில் பயன்படுத்தப்படும் தனித்துவமான அடையாளமாகும், முதலில் Twitter இல் உருவாக்கப்பட்டது. இந்த கருவி, ஒரு காலச்சீட்டம், இயந்திர ID மற்றும் வரிசை எண் ஆகியவற்றால் உருவாக்கப்படும் 64-பிட் முழு எண்களை உருவாக்க மற்றும் பகுப்பாய்வு செய்ய அனுமதிக்கிறது.

Snowflake ID கள் எப்படி வேலை செய்கின்றன

Snowflake ID கள் 64-பிட் முழு எண்களாக அமைக்கப்பட்டுள்ளன:

  • 41 பிட்கள்: காலச்சீட்டு (ஒரு தனிப்பட்ட காலத்திற்குப் பிறகு மில்லி விநாடிகள்)
  • 10 பிட்கள்: இயந்திர ID (5 பிட்கள் தரவுத்தொகுதி ID க்காக, 5 பிட்கள் வேலைக்கார ID க்காக)
  • 12 பிட்கள்: வரிசை எண்

இந்த அமைப்பு, ஒரு இயந்திரத்திற்கு ஒரு மில்லியனில் சுமார் 4,096 தனித்துவமான ID களை உருவாக்க அனுமதிக்கிறது.

Snowflake ID உருவாக்கியைப் பயன்படுத்துவது

  1. (விருப்பமாக) ஒரு தனிப்பட்ட காலத்தை அமைக்கவும் (முதல் Twitter இன் காலம்: 2010-11-04T01:42:54.657Z)
  2. ஒரு இயந்திர ID (0-31) மற்றும் தரவுத்தொகுதி ID (0-31) உள்ளிடவும்
  3. புதிய Snowflake ID உருவாக்க "உருவாக்கவும்" கிளிக் செய்யவும்
  4. உருவாக்கப்பட்ட ID மற்றும் அதன் கூறுகள் காட்சியளிக்கப்படும்

ஏற்கனவே உள்ள Snowflake ID ஐப் பார்ச் செய்ய, அதை "ID ஐப் பார்ச் செய்க" புலத்தில் உள்ளிடவும் மற்றும் "பார்ச் செய்க" கிளிக் செய்யவும்.

சூத்திரம்

Snowflake ID பின்வரும் பிட்டுவியல் செயல்பாடுகளைப் பயன்படுத்தி உருவாக்கப்படுகிறது:

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

எங்கு:

  • timestamp என்பது காலத்திற்குப் பிறகு மில்லி விநாடிகளின் எண்ணிக்கையாகும்
  • datacenterId என்பது 5-பிட் முழு எண் (0-31)
  • workerId என்பது 5-பிட் முழு எண் (0-31)
  • sequence என்பது 12-பிட் முழு எண் (0-4095)

கணக்கீடு

Snowflake ID உருவாக்கி பின்வரும் படிகளை மேற்கொள்கிறது:

  1. தற்போது மில்லி விநாடிகளில் காலத்தைப் பெறவும்
  2. காலம் கடைசி பயன்படுத்திய காலத்தை விட அதிகமாக இருக்க வேண்டும் (தனித்துவத்திற்காக)
  3. காலம் கடைசி காலத்துடன் ஒரே மாதிரியானது என்றால், வரிசை எண்ணை அதிகரிக்கவும்
  4. வரிசை எண் அதிகரிப்பு (4096 ஐ அடைவது) நிகழ்ந்தால், அடுத்த மில்லியனுக்காக காத்திருக்கவும்
  5. கூறுகளை பிட்டுவியல் செயல்பாடுகளைப் பயன்படுத்தி இறுதி ID ஐ உருவாக்கவும்

பயன்பாட்டு வழிகள்

Snowflake ID கள் குறிப்பாக கீழ்காணும் இடங்களில் பயனுள்ளதாக உள்ளன:

  1. பகிர்ந்தளிக்கப்பட்ட முறைமைகள்: பல இயந்திரங்களில் ஒருங்கிணைப்பின்றி தனித்துவமான ID களை உருவாக்கவும்
  2. உயர் அளவிலான தரவுகள்: பெரிய தரவுத்தொகுப்புகளுக்கான வரிசைப்படுத்தக்கூடிய ID களை உருவாக்கவும்
  3. மைக்ரோசர்வீசுகள்: பல்வேறு சேவைகளுக்கான தனித்துவமான அடையாளங்களை உறுதி செய்யவும்
  4. தரவுத்தொகுப்பு பிளவுகள்: திறமையான பிளவுக்கான காலம் அல்லது இயந்திர ID கூறுகளைப் பயன்படுத்தவும்

மாற்று முறைகள்

Snowflake ID கள் சக்திவாய்ந்தவையாக இருந்தாலும், பிற ID உருவாக்க முறைமைகள் உள்ளன:

  1. UUID (உலகளாவிய தனித்துவமான அடையாளம்): வரிசைப்படுத்தல் இல்லாமல் பகிர்ந்தளிக்கப்பட்ட உருவாக்கம் தேவைப்படும் போது பயனுள்ளது
  2. தானாகக் கணக்கீடு செய்யும் தரவுத்தொகுப்பு ID கள்: எளிமையானது ஆனால் ஒரே தரவுத்தொகுப்பு நிகழ்வுகளை மட்டுமே
  3. ULID (உலகளாவிய தனித்துவமான வரிசைப்படுத்தக்கூடிய அடையாளம்): Snowflake க்கு ஒத்த, ஆனால் மாறுபட்ட அமைப்புடன்

எட்ஜ் கேஸ் மற்றும் வரம்புகள்

  1. கடிகார ஒத்திசைவு: Snowflake ID கள் முறைமையின் நேரத்தை நம்புகின்றன. NTP சீரமைப்புகள் அல்லது நாள் மாறுதல் நேரம் மாற்றங்கள் காரணமாக கடிகாரம் பின்னுக்கு நகர்ந்தால், ID உருவாக்கத்தில் சிக்கல்கள் ஏற்படலாம்.

  2. ஆண்டு 2038 சிக்கல்: 41-பிட் காலச்சீட்டு 2079 இல் அதிகரிக்கும் (Twitter காலத்தைப் பொருத்தவரை). Snowflake ID களைப் பயன்படுத்தும் முறைமைகள் இந்த நிகழ்விற்காக திட்டமிட வேண்டும்.

  3. இயந்திர ID மோதல்கள்: பெரிய பகிர்ந்தளிக்கப்பட்ட முறைமைகளில், தனித்துவமான இயந்திர ID களை உறுதி செய்வது சவாலாக இருக்கலாம் மற்றும் கூடுதல் ஒருங்கிணைப்பை தேவைப்படுத்தலாம்.

  4. வரிசை அதிகரிப்பு: மிக உயர்ந்த அளவிலான செயல்பாடுகளில், 4096 வரிசைகளை ஒரு மில்லியனில் முடிக்கலாம், இது தாமதங்களை ஏற்படுத்தலாம்.

  5. இயந்திரங்களுக்கு இடையே மாறுபாடு: ஒரே இயந்திரத்தில் ID கள் மாறுபாடு இல்லாமல் அதிகரிக்கும்போது, பல இயந்திரங்களில் அவை உறுதி செய்யப்படாது.

வரலாறு

Snowflake ID கள் 2010 இல் Twitter இல் அறிமுகப்படுத்தப்பட்டன, பகிர்ந்தளிக்கப்பட்ட, கால அடிப்படையிலான தனித்துவமான அடையாளங்களை தேவைப்படும் போது. பிற நிறுவனங்கள் மற்றும் திட்டங்களால் அவை ஏற்கனவே ஏற்றுக்கொள்ளப்பட்டுள்ளன.

எடுத்துக்காட்டுகள்

இவ்வாறு பல மொழிகளில் Snowflake 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(`உருவாக்கப்பட்ட Snowflake ID: ${id}`);
58

வரைபடம்

Snowflake ID அமைப்பின் காட்சி பிரதிநிதித்துவம் இதோ:

காலச்சீட்டு (41 பிட்கள்) இயந்திர ID (10 பிட்கள்) வரிசை (12 பிட்கள்)

64-பிட் Snowflake ID அமைப்பு

மேற்கோள்கள்

  1. "Snowflake ஐ அறிவித்தல்." Twitter பொறியியல் வலைப்பதிவு, https://blog.twitter.com/engineering/en_us/a/2010/announcing-snowflake
  2. "Snowflake ID." விக்கிப்பீடியா, https://en.wikipedia.org/wiki/Snowflake_ID
  3. "மைக்ரோசர்வீசுகளில் பகிர்ந்தளிக்கப்பட்ட ID உருவாக்கம்." மீடியம், https://medium.com/swlh/distributed-id-generation-in-microservices-b6ce9a8dd93f
🔗

சம்பந்தப்பட்ட கருவிகள்

உங்கள் வேலைப்பாட்டுக்கு பயனுள்ளதாக இருக்கக்கூடிய மேலும் கருவிகளை கண்டறியவும்

யூனிவர்சல் யூனிக் அடையாள உருவாக்கி - UUID உருவாக்கம்

இந்த கருவியை முயற்சிக்கவும்

நானோ ஐடி உருவாக்கி - பாதுகாப்பான மற்றும் தனிப்பட்ட அடையாளங்கள்

இந்த கருவியை முயற்சிக்கவும்

சீரற்ற திட்டத்தின் பெயர் உருவாக்கி

இந்த கருவியை முயற்சிக்கவும்

இணைய மேம்பாட்டிற்கான சீரற்ற பயனர் முகவர் உருவாக்கி

இந்த கருவியை முயற்சிக்கவும்

சீரற்ற API விசை உருவாக்கி: பாதுகாப்பான 32-அகர வரிசைகளை உருவாக்கவும்

இந்த கருவியை முயற்சிக்கவும்

சோதனைக்கான CPF எண்களை உருவாக்கும் கருவி

இந்த கருவியை முயற்சிக்கவும்

சீரற்ற இடம் உருவாக்கி: உலகக் கோரிக்கை உருவாக்கி

இந்த கருவியை முயற்சிக்கவும்

எம்.டி.5 ஹாஷ் உருவாக்கி

இந்த கருவியை முயற்சிக்கவும்

KSUID உருவாக்கி: தனித்துவமான மற்றும் கால அடிப்படையிலான விசைகள்

இந்த கருவியை முயற்சிக்கவும்

குழந்தை பெயர் உருவாக்கி வகைகள் - சரியான பெயரை கண்டுபிடிக்கவும்

இந்த கருவியை முயற்சிக்கவும்