ਇਨਸਾਈਟਸ ਲਈ ਟਵਿੱਟਰ ਸਨੋਫਲੇਕ ਆਈਡੀ ਟੂਲ ਬਣਾਓ ਅਤੇ ਵਿਸ਼ਲੇਸ਼ਣ ਕਰੋ
ਟਵਿੱਟਰ ਸਨੋਫਲੇਕ ਆਈਡੀ ਬਣਾਓ ਅਤੇ ਵਿਸ਼ਲੇਸ਼ਣ ਕਰੋ, ਜੋ ਵਿਤਰਿਤ ਪ੍ਰਣਾਲੀਆਂ ਵਿੱਚ ਵਰਤੇ ਜਾਣ ਵਾਲੇ ਵਿਲੱਖਣ 64-ਬਿਟ ਪਛਾਣਕਰਤਾ ਹਨ। ਇਹ ਟੂਲ ਤੁਹਾਨੂੰ ਨਵੇਂ ਸਨੋਫਲੇਕ ਆਈਡੀ ਬਣਾਉਣ ਅਤੇ ਮੌਜੂਦਾ ਆਈਡੀ ਨੂੰ ਪਾਰਸ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ, ਜੋ ਉਨ੍ਹਾਂ ਦੇ ਟਾਈਮਸਟੈਂਪ, ਮਸ਼ੀਨ ਆਈਡੀ, ਅਤੇ ਕ੍ਰਮ ਨੰਬਰ ਦੇ ਘਟਕਾਂ ਵਿੱਚ ਜਾਣਕਾਰੀ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ।
ਸਨੋਫਲੇਕ ਆਈਡੀ ਜਨਰੇਟਰ
ਸਨੋਫਲੇਕ ਆਈਡੀ ਜਨਰੇਟਰ
ਦਸਤਾਵੇਜ਼ੀਕਰਣ
ਸਨੋਫਲੇਕ ID ਜਨਰੇਟਰ: ਵਿਲੱਖਣ ਵੰਡੇ ਗਏ ਸਿਸਟਮ ਪਛਾਣਕਰਤਿਆਂ ਨੂੰ ਬਣਾਓ
ਸਨੋਫਲੇਕ ID ਜਨਰੇਟਰ ਕੀ ਹੈ?
ਇੱਕ ਸਨੋਫਲੇਕ ID ਜਨਰੇਟਰ ਵੰਡੇ ਗਏ ਸਿਸਟਮਾਂ ਲਈ ਵਿਲੱਖਣ ਪਛਾਣਕਰਤੀਆਂ ਬਣਾਉਂਦਾ ਹੈ, ਜਿਸਨੂੰ ਪਹਿਲਾਂ ਟਵਿੱਟਰ ਦੁਆਰਾ ਵੱਡੇ ਪੈਮਾਨੇ 'ਤੇ ਡੇਟਾ ਪ੍ਰਕਿਰਿਆ ਕਰਨ ਲਈ ਵਿਕਸਿਤ ਕੀਤਾ ਗਿਆ ਸੀ। ਇਹ ਸ਼ਕਤੀਸ਼ਾਲੀ ਵਿਲੱਖਣ ID ਜਨਰੇਟਰ 64-ਬਿੱਟ ਪੂਰਨਾਂਕ ਬਣਾਉਂਦਾ ਹੈ ਜੋ ਇੱਕ ਟਾਈਮਸਟੈਂਪ, ਮਸ਼ੀਨ ID, ਅਤੇ ਕ੍ਰਮ ਨੰਬਰ ਤੋਂ ਬਣਿਆ ਹੁੰਦਾ ਹੈ, ਜਿਸ ਨਾਲ ਵੰਡੇ ਗਏ ਸਿਸਟਮਾਂ ਵਿੱਚ ਵਿਲੱਖਣਤਾ ਨੂੰ ਯਕੀਨੀ ਬਣਾਇਆ ਜਾਂਦਾ ਹੈ ਬਿਨਾਂ ਸਰਵਰਾਂ ਦੇ ਵਿਚਕਾਰ ਸਹਿਯੋਗ ਦੇ।
ਸਾਡਾ ਮੁਫਤ ਆਨਲਾਈਨ ਸਨੋਫਲੇਕ ID ਜਨਰੇਟਰ ਟੂਲ ਤੁਹਾਨੂੰ ਸਨੋਫਲੇਕ IDs ਨੂੰ ਤੁਰੰਤ ਜਨਰੇਟ ਅਤੇ ਪਾਰਸ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ, ਜੋ ਕਿ ਮਾਈਕਰੋਸਰਵਿਸਜ਼, ਵੰਡੇ ਗਏ ਡੇਟਾਬੇਸ, ਅਤੇ ਉੱਚ-ਥ੍ਰੂਪੁਟ ਐਪਲੀਕੇਸ਼ਨਾਂ ਨਾਲ ਕੰਮ ਕਰਨ ਵਾਲੇ ਵਿਕਾਸਕਾਂ ਲਈ ਬਿਹਤਰ ਹੈ।
ਸਨੋਫਲੇਕ ID ਜਨਰੇਸ਼ਨ ਕਿਵੇਂ ਕੰਮ ਕਰਦਾ ਹੈ
ਸਨੋਫਲੇਕ IDs 64-ਬਿੱਟ ਪੂਰਨਾਂਕ ਹਨ ਜਿਸਦੀ ਇੱਕ ਧਿਆਨ ਨਾਲ ਡਿਜ਼ਾਈਨ ਕੀਤੀ ਗਈ ਸੰਰਚਨਾ ਹੈ ਜੋ ਵਿਲੱਖਣਤਾ ਦੀ ਗਾਰੰਟੀ ਦਿੰਦੀ ਹੈ:
- 41 ਬਿੱਟ: ਟਾਈਮਸਟੈਂਪ (ਕਸਟਮ ਯੁੱਗ ਤੋਂ ਮਿਲੀਸੈਕੰਡ)
- 10 ਬਿੱਟ: ਮਸ਼ੀਨ ID (5 ਬਿੱਟ ਡੇਟਾ ਸੈਂਟਰ ID ਲਈ, 5 ਬਿੱਟ ਵਰਕਰ ID ਲਈ)
- 12 ਬਿੱਟ: ਕ੍ਰਮ ਨੰਬਰ
ਇਹ ਵੰਡੇ ਗਏ ID ਸੰਰਚਨਾ ਪ੍ਰਤੀ ਮਸ਼ੀਨ ਪ੍ਰਤੀ ਲਗਭਗ 4,096 ਵਿਲੱਖਣ IDs ਪ੍ਰਤੀ ਮਿਲੀਸੈਕੰਡ ਦੇ ਜਨਰੇਸ਼ਨ ਦੀ ਆਗਿਆ ਦਿੰਦੀ ਹੈ, ਜਿਸ ਨਾਲ ਇਹ ਉੱਚ-ਥ੍ਰੂਪੁਟ ਵੰਡੇ ਗਏ ਸਿਸਟਮਾਂ ਲਈ ਆਦਰਸ਼ ਬਣ ਜਾਂਦਾ ਹੈ।
ਸਾਡੇ ਸਨੋਫਲੇਕ ID ਜਨਰੇਟਰ ਟੂਲ ਨੂੰ ਕਿਵੇਂ ਵਰਤਣਾ ਹੈ
ਵਿਲੱਖਣ ਸਨੋਫਲੇਕ IDs ਨੂੰ ਬਣਾਉਣ ਲਈ ਇਹ ਸਧਾਰਣ ਕਦਮ ਫੋਲੋ ਕਰੋ:
- ਕਸਟਮ ਯੁੱਗ ਸੈਟ ਕਰੋ (ਵਿਕਲਪਿਕ): ਡਿਫਾਲਟ ਟਵਿੱਟਰ ਯੁੱਗ (2010-11-04T01:42:54.657Z) ਦੀ ਵਰਤੋਂ ਕਰੋ ਜਾਂ ਆਪਣਾ ਸੈਟ ਕਰੋ
- ਮਸ਼ੀਨ IDs ਨੂੰ ਸੰਰਚਿਤ ਕਰੋ: ਮਸ਼ੀਨ ID (0-31) ਅਤੇ ਡੇਟਾ ਸੈਂਟਰ ID (0-31) ਦਰਜ ਕਰੋ
- ID ਜਨਰੇਟ ਕਰੋ: ਇੱਕ ਨਵਾਂ ਵਿਲੱਖਣ ਸਨੋਫਲੇਕ ID ਬਣਾਉਣ ਲਈ "ਜਨਰੇਟ" 'ਤੇ ਕਲਿੱਕ ਕਰੋ
- ਨਤੀਜੇ ਵੇਖੋ: ਬਣਾਈ ਗਈ ID ਅਤੇ ਇਸਦੇ ਘਟਕਾਂ ਦੀ ਵਿਸਥਾਰ ਵੇਖੋ
ਮੌਜੂਦਾ ਸਨੋਫਲੇਕ IDs ਨੂੰ ਪਾਰਸ ਕਰੋ
ਇੱਕ ਸਨੋਫਲੇਕ ID ਨੂੰ ਡਿਕੋਡ ਕਰਨ ਲਈ, ਇਸਨੂੰ "Parse ID" ਖੇਤਰ ਵਿੱਚ ਦਰਜ ਕਰੋ ਅਤੇ ਇਸਦੇ ਟਾਈਮਸਟੈਂਪ, ਮਸ਼ੀਨ ID, ਅਤੇ ਕ੍ਰਮ ਘਟਕਾਂ ਨੂੰ ਵੇਖਣ ਲਈ "Parse" 'ਤੇ ਕਲਿੱਕ ਕਰੋ।
ਸਨੋਫਲੇਕ ID ਜਨਰੇਸ਼ਨ ਫਾਰਮੂਲਾ
ਸਨੋਫਲੇਕ 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 ਗਣਨਾ ਪ੍ਰਕਿਰਿਆ
ਸਨੋਫਲੇਕ ID ਜਨਰੇਸ਼ਨ ਅਲਗੋਰਿਦਮ ਇਹਨਾਂ ਸਹੀ ਕਦਮਾਂ ਦੀ ਪਾਲਣਾ ਕਰਦਾ ਹੈ:
- ਮੌਜੂਦਾ ਟਾਈਮਸਟੈਂਪ ਪ੍ਰਾਪਤ ਕਰੋ: ਮਿਲੀਸੈਕੰਡ ਵਿੱਚ ਮੌਜੂਦਾ ਸਮਾਂ ਪ੍ਰਾਪਤ ਕਰੋ
- ਕ੍ਰਮਬੱਧਤਾ ਦੀ ਯਕੀਨੀ ਬਣਾਓ: ਯਕੀਨੀ ਬਣਾਓ ਕਿ ਟਾਈਮਸਟੈਂਪ ਪਿਛਲੇ ਵਰਤੇ ਗਏ ਟਾਈਮਸਟੈਂਪ ਤੋਂ ਵੱਧ ਹੈ
- ਇੱਕੋ ਟਾਈਮਸਟੈਂਪ ਨੂੰ ਸੰਭਾਲੋ: ਜੇ ਟਾਈਮਸਟੈਂਪ ਪਿਛਲੇ ਨਾਲ ਮਿਲਦਾ ਹੈ, ਤਾਂ ਕ੍ਰਮ ਨੰਬਰ ਵਧਾਓ
- ਓਵਰਫਲੋ ਤੋਂ ਰੋਕੋ: ਜੇ ਕ੍ਰਮ 4096 ਤੱਕ ਪਹੁੰਚ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਅਗਲੇ ਮਿਲੀਸੈਕੰਡ ਲਈ ਉਡੀਕ ਕਰੋ
- ਘਟਕਾਂ ਨੂੰ ਜੋੜੋ: ਅੰਤਿਮ ਵਿਲੱਖਣ ID ਬਣਾਉਣ ਲਈ ਬਿੱਟਵਾਈਜ਼ ਓਪਰੇਸ਼ਨਾਂ ਦੀ ਵਰਤੋਂ ਕਰੋ
ਇਹ ਪ੍ਰਕਿਰਿਆ ਹਰ ਮਸ਼ੀਨ ਵਿੱਚ ਮੋਨੋਟੋਨਿਕਲੀ ਵਧ ਰਹੇ IDs ਦੀ ਗਾਰੰਟੀ ਦਿੰਦੀ ਹੈ ਜਦੋਂ ਕਿ ਵੰਡੇ ਗਏ ਸਿਸਟਮਾਂ ਵਿੱਚ ਗਲੋਬਲ ਵਿਲੱਖਣਤਾ ਨੂੰ ਬਣਾਈ ਰੱਖਦੀ ਹੈ।
ਸਨੋਫਲੇਕ ID ਦੇ ਉਪਯੋਗ ਕੇਸ ਅਤੇ ਐਪਲੀਕੇਸ਼ਨ
ਸਨੋਫਲੇਕ IDs ਵੱਖ-ਵੱਖ ਵੰਡੇ ਗਏ ਕੰਪਿਊਟਿੰਗ ਸਥਿਤੀਆਂ ਵਿੱਚ ਸ਼ਾਨਦਾਰ ਹਨ:
ਪ੍ਰਮੁੱਖ ਉਪਯੋਗ ਕੇਸ
- ਵੰਡੇ ਗਏ ਸਿਸਟਮ: ਬਿਨਾਂ ਸਹਿਯੋਗ ਦੇ ਕਈ ਮਸ਼ੀਨਾਂ ਵਿੱਚ ਵਿਲੱਖਣ IDs ਬਣਾਓ
- ਉੱਚ-ਵਾਲਿਊ ਡੇਟਾ ਪ੍ਰਕਿਰਿਆ: ਵੱਡੇ ਡੇਟਾਸੈਟਾਂ ਲਈ ਸੋਰਟ ਕਰਨ ਯੋਗ IDs ਬਣਾਓ
- ਮਾਈਕਰੋਸਰਵਿਸ ਆਰਕੀਟੈਕਚਰ: ਵੱਖ-ਵੱਖ ਸੇਵਾਵਾਂ ਵਿੱਚ ਵਿਲੱਖਣ ਪਛਾਣਕਰਤੀਆਂ ਨੂੰ ਯਕੀਨੀ ਬਣਾਓ
- ਡੇਟਾਬੇਸ ਸ਼ਾਰਡਿੰਗ: ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਡੇਟਾ ਪਾਰਟੀਸ਼ਨਿੰਗ ਲਈ ਟਾਈਮਸਟੈਂਪ ਜਾਂ ਮਸ਼ੀਨ ID ਦੇ ਘਟਕਾਂ ਦੀ ਵਰਤੋਂ ਕਰੋ
ਵਾਸਤਵਿਕ ਦੁਨੀਆ ਦੀਆਂ ਐਪਲੀਕੇਸ਼ਨ
- ਸੋਸ਼ਲ ਮੀਡੀਆ ਪਲੇਟਫਾਰਮ: ਟਵਿੱਟਰ, ਇੰਸਟਾਗ੍ਰਾਮ ਪੋਸਟ ਅਤੇ ਯੂਜ਼ਰ IDs ਲਈ
- ਈ-ਕਾਮਰਸ ਸਿਸਟਮ: ਆਰਡਰ ਟ੍ਰੈਕਿੰਗ ਅਤੇ ਇਨਵੈਂਟਰੀ ਪ੍ਰਬੰਧਨ
- IoT ਡੇਟਾ ਇਕੱਠਾ ਕਰਨ: ਡਿਵਾਈਸ ਇਵੈਂਟ ਲੌਗਿੰਗ ਅਤੇ ਸੈਂਸਰ ਡੇਟ
- ਵਿੱਤੀ ਸਿਸਟਮ: ਲੈਣ-ਦੇਣ ਦੀ ਪ੍ਰਕਿਰਿਆ ਅਤੇ ਆਡੀਟ ਟ੍ਰੇਲ
ਸਨੋਫਲੇਕ ID ਦੇ ਵਿਕਲਪ ਅਤੇ ਤੁਲਨਾਵਾਂ
ਜਦੋਂ ਕਿ ਸਨੋਫਲੇਕ IDs ਸ਼ਕਤੀਸ਼ਾਲੀ ਹਨ, ਹੋਰ ਵਿਲੱਖਣ ID ਜਨਰੇਸ਼ਨ ਸਿਸਟਮਾਂ ਵਿੱਚ ਸ਼ਾਮਲ ਹਨ:
ਵਿਕਲਪ ID ਸਿਸਟਮ
- UUID (ਯੂਨੀਵਰਸਲੀ ਵਿਲੱਖਣ ਪਛਾਣਕਰਤਾ): ਬਿਨਾਂ ਸੋਰਟ ਕਰਨ ਦੀਆਂ ਜ਼ਰੂਰਤਾਂ ਦੇ ਬਿਨਾਂ ਵੰਡੇ ਗਏ ਜਨਰੇਸ਼ਨ ਲਈ ਸਭ ਤੋਂ ਵਧੀਆ
- ਆਟੋ-ਇੰਕ੍ਰਿਮੈਂਟਿੰਗ ਡੇਟਾਬੇਸ IDs: ਇੱਕ ਸਧਾਰਣ ਹੱਲ ਜੋ ਇਕੱਲੇ ਡੇਟਾਬੇਸ ਉਦਾਹਰਣਾਂ ਤੱਕ ਸੀਮਿਤ ਹੈ
- ULID (ਯੂਨੀਵਰਸਲੀ ਵਿਲੱਖਣ ਲੈਕਸਿਕੋਗ੍ਰਾਫਿਕਲੀ ਸੋਰਟ ਕਰਨ ਯੋਗ ਪਛਾਣਕਰਤਾ): ਸਨੋਫਲੇਕ ਦੇ ਸਮਾਨ ਬੇਸ32 ਕੋਡਿੰਗ ਨਾਲ
- NanoID: ਵੈੱਬ ਐਪਲੀਕੇਸ਼ਨਾਂ ਲਈ ਸੰਕੁਚਿਤ, URL-ਸੁਰੱਖਿਅਤ ਵਿਲੱਖਣ ਸਤਰਿੰਗ ਜਨਰੇਟਰ
ਸਨੋਫਲੇਕ ID ਦੀਆਂ ਸੀਮਾਵਾਂ ਅਤੇ ਵਿਚਾਰ
ਸਨੋਫਲੇਕ ID ਦੀਆਂ ਸੀਮਾਵਾਂ ਨੂੰ ਸਮਝਣਾ ਸਹੀ ਕਾਰਜਨਵਾਇਕੀ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ:
ਆਮ ਚੁਣੌਤੀਆਂ
- ਘੜੀ ਸਮਕਾਲੀਕਰਨ ਸਮੱਸਿਆਵਾਂ: ਸਿਸਟਮ ਸਮਾਂ ਦੀਆਂ ਨਿਰਭਰਤਾਵਾਂ NTP ਸਹੀ ਕਰਨ ਜਾਂ ਦਿਨ ਦੀ ਬਚਤ ਦੇ ਬਦਲਾਅ ਨਾਲ ਸਮੱਸਿਆਵਾਂ ਪੈਦਾ ਕਰ ਸਕਦੀਆਂ ਹਨ
- ਸਾਲ 2079 ਦੀ ਸੀਮਾ: 41-ਬਿੱਟ ਟਾਈਮਸਟੈਂਪ ਓਵਰਫਲੋ ਉੱਚ-ਪੈਮਾਨੇ ਦੇ ਸਿਸਟਮਾਂ ਲਈ ਲੰਬੇ ਸਮੇਂ ਦੀ ਯੋਜਨਾ ਦੀ ਲੋੜ ਹੈ
- ਮਸ਼ੀਨ ID ਪ੍ਰਬੰਧਨ: ਵੱਡੇ ਵੰਡੇ ਗਏ ਸਿਸਟਮਾਂ ਵਿੱਚ ਵਿਲੱਖਣ ਮਸ਼ੀਨ IDs ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਣਾ ਸਹਿਯੋਗ ਦੀ ਲੋੜ ਹੈ
- ਕ੍ਰਮ ਓਵਰਫਲੋ: ਬਹੁਤ ਉੱਚ-ਥ੍ਰੂਪੁਟ ਸਥਿਤੀਆਂ 4096 ਕ੍ਰਮਾਂ ਨੂੰ ਪ੍ਰਤੀ ਮਿਲੀਸੈਕੰਡ ਖਤਮ ਕਰ ਸਕਦੀਆਂ ਹਨ
- ਮਸ਼ੀਨ-ਵਿਚਕਾਰ ਕ੍ਰਮਬੱਧਤਾ: IDs ਹਰ ਮਸ਼ੀਨ ਲਈ ਮੋਨੋਟੋਨਿਕ ਹਨ ਪਰ ਸਾਰੀਆਂ ਮਸ਼ੀਨਾਂ ਵਿੱਚ ਗਲੋਬਲ ਨਹੀਂ ਹਨ
ਸਨੋਫਲੇਕ IDs ਦਾ ਇਤਿਹਾਸ
ਸਨੋਫਲੇਕ IDs ਨੂੰ ਟਵਿੱਟਰ ਦੁਆਰਾ 2010 ਵਿੱਚ ਵੰਡੇ ਗਏ, ਸਮੇਂ-ਸੋਰਟ ਕਰਨ ਯੋਗ ਵਿਲੱਖਣ ਪਛਾਣਕਰਤੀਆਂ ਨੂੰ ਵੱਡੇ ਪੈਮਾਨੇ 'ਤੇ ਬਣਾਉਣ ਦੀ ਚੁਣੌਤੀ ਨੂੰ ਹੱਲ ਕਰਨ ਲਈ ਜਾਣੂ ਕੀਤਾ ਗਿਆ ਸੀ। ਜਿਵੇਂ ਜਿਵੇਂ ਟਵਿੱਟਰ ਦੀ ਯੂਜ਼ਰ ਬੇਸ ਅਤੇ ਟਵੀਟ ਦੀ ਮਾਤਰਾ ਵਧੀ, ਰਵਾਇਤੀ ਆਟੋ-ਇੰਕ੍ਰਿਮੈਂਟਿੰਗ IDs ਉਨ੍ਹਾਂ ਦੇ ਵੰਡੇ ਗਏ ਆਰਕੀਟੈਕਚਰ ਲਈ ਅਣਉਪਯੋਗ ਹੋ ਗਏ।
ਇਹ ਸਿਸਟਮ ਬਾਅਦ ਵਿੱਚ ਇੰਸਟਾਗ੍ਰਾਮ, ਡਿਸਕੋਰਡ, ਅਤੇ ਬੇਸ਼ੁਮਾਰ ਹੋਰ ਪਲੇਟਫਾਰਮਾਂ ਦੁਆਰਾ ਅਪਣਾਇਆ ਗਿਆ ਜੋ ਵੰਡੇ ਗਏ ਸਿਸਟਮਾਂ ਲਈ ਸਕੇਲ ਕਰਨ ਯੋਗ ID ਜਨਰੇਸ਼ਨ ਦੀ ਲੋੜ ਰੱਖਦੇ ਹਨ।
ਸਨੋਫਲੇਕ 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
ਸਬੰਧਿਤ ਸੰਦਾਰਬਾਰਾਂ
ਆਪਣੇ ਕਾਰਜ ਦੇ ਲਈ ਵਰਤਣ ਯੋਗ ਹੋਣ ਵਾਲੇ ਹੋਰ ਸੰਦੇਸ਼ ਦੀ ਖੋਜ ਕਰੋ