أداة توليد وتحليل معرف تويتر سنوفلايك للرؤى

قم بتوليد وتحليل معرفات تويتر سنوفلايك، وهي معرفات فريدة بطول 64 بت تُستخدم في الأنظمة الموزعة. تتيح لك هذه الأداة إنشاء معرفات سنوفلايك جديدة وتحليل المعرفات الموجودة، مما يوفر رؤى حول مكوناتها مثل الطابع الزمني، ومعرف الجهاز، ورقم التسلسل.

مولد معرف سنوفليك

مولد معرف سنوفليك

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

التوثيق

مولد معرف سنوفلايك: إنشاء معرفات فريدة للأنظمة الموزعة

ما هو مولد معرف سنوفلايك؟

مولد معرف سنوفلايك ينشئ معرفات فريدة للأنظمة الموزعة، تم تطويره في الأصل بواسطة تويتر للتعامل مع معالجة البيانات على نطاق واسع. هذا المولد القوي للمعرفات الفريدة ينتج أعداد صحيحة 64 بت تتكون من طابع زمني، معرف آلة، ورقم تسلسلي، مما يضمن الفريدة عبر الأنظمة الموزعة دون الحاجة إلى التنسيق بين الخوادم.

أداة مولد معرف سنوفلايك المجانية عبر الإنترنت تتيح لك إنشاء وتحليل معرفات سنوفلايك على الفور، مما يجعلها مثالية للمطورين الذين يعملون مع الخدمات الصغيرة، قواعد البيانات الموزعة، والتطبيقات ذات الإنتاجية العالية.

كيف يعمل إنشاء معرف سنوفلايك

معرفات سنوفلايك هي أعداد صحيحة 64 بت ذات هيكل مصمم بعناية يضمن الفريدة:

  • 41 بت: الطابع الزمني (مللي ثانية منذ عصر مخصص)
  • 10 بت: معرف الآلة (5 بت لمعرف مركز البيانات، 5 بت لمعرف العامل)
  • 12 بت: رقم تسلسلي

هذا الهيكل المعرف الموزع يمكّن من إنشاء حوالي 4,096 معرف فريد لكل مللي ثانية لكل آلة، مما يجعله مثاليًا للأنظمة الموزعة ذات الإنتاجية العالية.

كيفية استخدام أداة مولد معرف سنوفلايك

اتبع هذه الخطوات البسيطة لـ إنشاء معرفات سنوفلايك فريدة:

  1. تعيين عصر مخصص (اختياري): استخدم عصر تويتر الافتراضي (2010-11-04T01:42:54.657Z) أو قم بتعيين عصر خاص بك
  2. تكوين معرفات الآلة: أدخل معرف الآلة (0-31) ومعرف مركز البيانات (0-31)
  3. إنشاء معرف: انقر على "إنشاء" لإنشاء معرف سنوفلايك فريد جديد
  4. عرض النتائج: انظر المعرف الذي تم إنشاؤه وتفصيل مكوناته

تحليل معرفات سنوفلايك الموجودة

لـ فك تشفير معرف سنوفلايك، أدخله في حقل "تحليل المعرف" وانقر على "تحليل" لرؤية طابعه الزمني، معرف الآلة، ومكونات التسلسل.

صيغة إنشاء معرف سنوفلايك

خوارزمية معرف سنوفلايك تبني معرفات فريدة باستخدام عمليات بتية:

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

مكونات الصيغة:

  • timestamp: عدد المللي ثانية منذ العصر
  • datacenterId: عدد صحيح 5 بت (0-31) يحدد مركز البيانات
  • workerId: عدد صحيح 5 بت (0-31) يحدد آلة العامل
  • sequence: عدد صحيح 12 بت (0-4095) لعدة معرفات لكل مللي ثانية

عملية حساب معرف سنوفلايك

تتبع خوارزمية إنشاء معرف سنوفلايك هذه الخطوات الدقيقة:

  1. الحصول على الطابع الزمني الحالي: استرجاع الوقت الحالي بالمللي ثانية
  2. ضمان الترتيب الزمني: التحقق من أن الطابع الزمني يتجاوز الطابع الزمني المستخدم آخر مرة
  3. التعامل مع نفس الطابع الزمني: إذا تطابق الطابع الزمني مع السابق، قم بزيادة رقم التسلسل
  4. منع الفائض: إذا وصل التسلسل إلى 4096، انتظر حتى المللي ثانية التالية
  5. دمج المكونات: استخدم العمليات البتية لإنشاء المعرف الفريد النهائي

تضمن هذه العملية زيادة المعرفات بشكل أحادي داخل كل آلة مع الحفاظ على الفريدة العالمية عبر الأنظمة الموزعة.

حالات استخدام معرف سنوفلايك وتطبيقاته

تتفوق معرفات سنوفلايك في سيناريوهات الحوسبة الموزعة المختلفة:

حالات الاستخدام الرئيسية

  1. الأنظمة الموزعة: إنشاء معرفات فريدة عبر عدة آلات دون تنسيق
  2. معالجة البيانات عالية الحجم: إنشاء معرفات قابلة للفرز لمجموعات بيانات ضخمة
  3. معمارية الخدمات الصغيرة: ضمان معرفات فريدة عبر خدمات مختلفة
  4. تقسيم قاعدة البيانات: استخدام مكونات الطابع الزمني أو معرف الآلة لتقسيم البيانات بكفاءة

التطبيقات في العالم الحقيقي

  • منصات وسائل التواصل الاجتماعي: تويتر، إنستغرام لمعرفات المنشورات والمستخدمين
  • أنظمة التجارة الإلكترونية: تتبع الطلبات وإدارة المخزون
  • جمع بيانات إنترنت الأشياء: تسجيل أحداث الأجهزة وبيانات المستشعرات
  • الأنظمة المالية: معالجة المعاملات ومسارات التدقيق

بدائل ومع comparisons لمعرف سنوفلايك

بينما تعتبر معرفات سنوفلايك قوية، تشمل أنظمة إنشاء المعرفات الفريدة الأخرى:

أنظمة المعرف البديلة

  1. UUID (معرف فريد عالميًا): الأفضل للتوليد الموزع دون متطلبات الفرز
  2. معرفات قاعدة البيانات ذات التزايد التلقائي: حل بسيط محدود على مثيلات قاعدة بيانات واحدة
  3. ULID (معرف فريد عالميًا قابل للفرز): مشابه لسنوفلايك مع ترميز base32
  4. NanoID: مولد سلسلة فريدة مضغوطة وآمنة للويب

قيود واعتبارات معرف سنوفلايك

فهم قيود معرف سنوفلايك يساعد في التنفيذ الصحيح:

التحديات الشائعة

  1. مشاكل مزامنة الساعة: الاعتماد على وقت النظام يمكن أن يسبب مشاكل مع تعديلات NTP أو تغييرات التوقيت الصيفي
  2. قيود عام 2079: تجاوز الطابع الزمني 41 بت يتطلب تخطيطًا طويل الأجل للأنظمة عالية النطاق
  3. إدارة معرفات الآلة: ضمان معرفات آلة فريدة عبر أنظمة موزعة كبيرة يتطلب التنسيق
  4. فائض التسلسل: السيناريوهات ذات الإنتاجية العالية للغاية قد تستنفد 4096 تسلسل لكل مللي ثانية
  5. ترتيب عبر الآلات: المعرفات أحادية الاتجاه لكل آلة ولكن ليست عالمية عبر جميع الآلات

تاريخ معرفات سنوفلايك

تم تقديم معرفات سنوفلايك بواسطة تويتر في 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// الاستخدام
55const generator = new SnowflakeGenerator();
56const id = generator.nextId(1, 1);
57console.log(`معرف سنوفلايك الذي تم إنشاؤه: ${id}`);
58
<?php class SnowflakeGenerator { private $epoch; private $datacenterIdBits; private $workerIdBits; private $sequenceBits; private $maxDatacenterId; private $maxWorkerId; private $workerIdShift; private $datacenterIdShift; private $timestampLeftShift; private $sequenceMask; private $datacenterId; private $workerId; private $sequence = 0; private $lastTimestamp = -1; public function __construct($datacenterId, $workerId) { $this->epoch = 1288834974657; $this->datacenterIdBits = 5; $this->workerIdBits = 5; $this->sequenceBits = 12; $this->maxDatacenterId = -1 ^ (-1 << $this->datacenterIdBits); $this->maxWorkerId = -1 ^ (-1 << $this->workerIdBits); $this->workerIdShift = $this->sequenceBits; $this->datacenterIdShift = $this->sequenceBits + $this->workerIdBits; $this->timestampLeftShift = $this->sequenceBits + $this->workerIdBits + $this->datacenterIdBits; $this->