টুইটার স্নোফ্লেক আইডি টুল তৈরি এবং বিশ্লেষণ করুন
টুইটার স্নোফ্লেক আইডি তৈরি এবং বিশ্লেষণ করুন, যা বিতরণকৃত সিস্টেমে ব্যবহৃত অনন্য 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 (বিশ্বব্যাপী অনন্য লেক্সিকোগ্রাফিক্যালি সাজানো শনাক্তকারী): স্নোফ্লেকের মতো বেস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('ঘড়ি পিছনে চলে গেছে। আইডি তৈরি করতে অস্বীকৃতি');
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}`);
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("ঘড়ি পিছনে চলে গেছে। আইডি তৈরি করতে অস্বীকৃতি")
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"তৈরি করা স্নোফ্লেক আইডি: {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("ঘড়ি পিছনে চলে গেছে। আইডি তৈরি করতে অস্বীকৃতি");
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("তৈরি করা স্নোফ্লেক আইডি: " + id);
91 }
92}
93
require 'time' class SnowflakeGenerator def initialize(datacenter_id, worker_id, sequence = 0) @dat
সম্পর্কিত সরঞ্জাম
আপনার কাজে দরকারী হতে পারে আরো টুল খুঁজে বের করুন