تخطي إلى المحتوى

مولد CUID الفعال لمعرفات فريدة في الأنظمة

توليد معرفات فريدة مقاومة للتصادم (CUIDs) للأنظمة الموزعة وقواعد البيانات وتطبيقات الويب. إنشاء معرفات قابلة للتوسع وقابلة للفرز على الفور.

مولد CUID

قم بإنشاء معرف مقاوم للتصادم بسرعة وسهولة.

انقر على "توليد CUID جديد" لإنشاء معرف.
حاسبة التحميل...
📚

التوثيق

ما هو CUID؟

‏CUID (معرّف فريد مقاوم للتصادم) هو سلسلة قصيرة من الأحرف والأرقام تُستخدم لوضع علامة على سجل أو ملف أو حدث، بحيث لا يتشارك عنصران الاسم نفسه. تنشئ هذه الأداة CUID2، وهو الإصدار الحالي من التنسيق، باستخدام مكتبة @paralleldrive/cuid2. يتكوّن كل معرّف من 25 حرفًا، ولا يحتوي إلا على أحرف صغيرة وأرقام، ويُنشأ بالكامل في المتصفح — ولا يُرسل أي شيء إلى خادم.

كيفية استخدام مولّد CUID هذا

  1. انقر على إنشاء CUID جديد لإنشاء معرّف.
  2. انقر على نسخ إلى الحافظة لنسخه.
  3. الصق المعرّف في قاعدة بيانات أو اسم ملف أو تطبيق.
  4. انقر على «إنشاء» مرة أخرى للحصول على معرّف آخر. من المستبعد جدًا حدوث تصادم بين قيمتي CUID2 منفصلتين، رغم أن ذلك ليس مستحيلًا رياضيًا.
  5. انقر على إعادة الضبط لمسح النتيجة.

يُخزَّن المعرّف المُنشأ أيضًا في عنوان URL للصفحة، لذا يمكن مشاركة رابط النتيجة أو وضعه في الإشارات المرجعية.

بنية CUID2 وصيغته

يُبنى CUID2 على النحو التالي:

1id = randomLetter + base36( SHA3-512( time + entropy + counter + fingerprint ) ).substring(1, length)
2

تخلط دالة التجزئة أربعة مدخلات خاصة: الوقت الحالي، وعدادًا خاصًا بكل جلسة، وبصمةً للجهاز المضيف، وبيانات عشوائية. ثم تمررها عبر SHA3-512، وتحول النتيجة إلى الأساس 36 (الأرقام 0–9 والأحرف a-z)، ثم تحتفظ بـ 24 من تلك الأحرف. ويجعل الحرف العشوائي البادئ المعرّف النهائي مكوّنًا من 25 حرفًا، وهو الطول المحدد لهذه الأداة.

الحرف الأول فقط مستقل بذاته: فهو حرف عشوائي يوضع في البداية لكي يبدأ كل معرّف بحرف بدلًا من رقم. وتتطلب أنظمة كثيرة، مثل أسماء جداول وأعمدة SQL، أن تبدأ المعرّفات بحرف، ولذلك يجعل هذا CUID2 صالحًا للاستخدام اسمًا في معظم المواضع. أما كل حرف بعد الحرف الأول فهو جزء من جسم تجزئة واحد متصل وغير شفاف، ولا توجد فيه أقسام منفصلة.

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

مثال محلول

قد يؤدي إنشاء معرّف باستخدام هذه الأداة إلى النتيجة التالية:

1vcpuhcj51eomj1o31dnlqopu0
2

هنا يمثّل v الحرف العشوائي البادئ، وتمثّل cpuhcj51eomj1o31dnlqopu0 (المكوّنة من 24 حرفًا) جسم التجزئة. ويبدو الجزآن مختلفين فقط لأن الحرف الأول مضمون أن يكون حرفًا، بينما يمكن أن يحتوي جسم التجزئة على مزيج من الأحرف والأرقام.

لماذا تستخدم الأنظمة CUID2

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

لا يمكن ترتيب معرّفات CUID2 حسب وقت الإنشاء. فعلى خلاف رقم الزيادة التلقائية في قاعدة البيانات أو تنسيق CUID الأقدم (الإصدار 1)، يخفي CUID2 طابعه الزمني داخل التجزئة بدلًا من تخزينه ظاهرًا. وينبغي للتطبيقات التي تحتاج إلى ترتيب السجلات حسب ترتيب إنشائها أن تخزّن عمودًا زمنيًا منفصلًا إلى جانب المعرّف.

CUID2 مقابل UUID ومعرّفات الزيادة التلقائية

الميزةCUID2UUID الإصدار 4الزيادة التلقائية
الطول25 حرفًا36 حرفًا (مع وُصلات)تختلف (عادةً رقم قصير)
مجموعة الأحرفأحرف صغيرة وأرقامأرقام سداسية عشرية ووُصلاتالأرقام
تحتاج إلى تنسيق مركزيلالانعم (تسلسل قاعدة بيانات)
قابلة للترتيب حسب وقت الإنشاءلالانعم
ملائمة لعناوين URL من دون ترميزنعمنعمنعم

يحل كل من CUID2 وUUID الإصدار 4 المشكلة نفسها: إنشاء معرّفات من دون تنسيق مركزي. ويكون CUID2 أقصر ويستخدم مجموعة أحرف أصغر، مما يسهل قراءته ولصقه في عنوان URL. كما أن UUID آمن في عنوان الويب، لأن الواصلة حرف غير محجوز في عناوين URL، لكنه أطول بـ 11 حرفًا.

الاستخدامات الشائعة

  • المفاتيح الأساسية في قواعد البيانات الموزعة، حيث تُدرج خوادم متعددة الصفوف بصورة مستقلة
  • معرّفات الطلبات أو التتبّع المستخدمة لمتابعة إجراء واحد عبر عدة خدمات مصغّرة
  • أسماء ملفات التحميلات، بحيث لا يستبدل ملفان أحدهما بالآخر
  • معرّفات الجلسات أو الرموز المميزة لتطبيقات الويب
  • معرّفات الرسائل في قوائم الانتظار مثل Kafka أو RabbitMQ

لمحة تاريخية

أصدر إريك إليوت تنسيق CUID الأصلي في 2012 بديلًا عن UUID للتطبيقات الموزعة. وقد أعاد مشروع Paralleldrive نفسه، الذي نشر CUID2، تصميم التنسيق حول تجزئة تشفيرية وأزال الطابع الزمني والعداد القابلين للاسترداد اللذين كان الإصدار الأصلي يكشفهما. تنشئ هذه الأداة معرّفات CUID2 فقط.

الأسئلة الشائعة

ما الفرق بين CUID (الإصدار 1) وCUID2؟ كان CUID الإصدار 1 يخزّن طابعًا زمنيًا وعدادًا ظاهرين داخل المعرّف، مما جعل المعرّفات قابلة للترتيب، لكنه كان يكشف أيضًا متى أُنشئت المعرّفات وعددها. ويستبدل CUID2 هذه الحقول الظاهرة بتجزئة أحادية الاتجاه، ولذلك لا يمكن قراءة أي معلومات من المعرّف.

هل يمكن ترتيب معرّفات CUID التي تنشئها هذه الأداة حسب وقت الإنشاء؟ لا. لا يحتوي CUID2 على طابع زمني قابل للاسترداد، لذلك لا يمكن ترتيب المعرّفات حسب وقت إنشائها بمجرد النظر إلى السلسلة.

ما طول المعرّف المُنشأ، وهل يمكن تغيير طوله؟ تنشئ هذه الأداة دائمًا معرّفات مكوّنة من 25 حرفًا. ولا يوجد في هذه الأداة خيار لطلب طول مختلف.

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

هل ترسل هذه الأداة أي بيانات إلى خادم؟ لا. يُنشأ المعرّف بواسطة JavaScript يعمل في المتصفح، باستخدام ساعة النظام المحلية والبيانات العشوائية التي يوفرها المتصفح. ولا تُنقل أي بيانات.

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