مولد CUID لإنشاء معرفات فريدة مقاومة للتصادم
قم بإنشاء معرفات فريدة مقاومة للتصادم (CUIDs) للأنظمة الموزعة وقواعد البيانات وتطبيقات الويب. هذه الأداة تنشئ CUIDs قابلة للتوسع وقابلة للفرز ومن غير المحتمل أن تتصادم.
مولد CUID
قم بإنشاء معرف مقاوم للتصادم بسرعة وسهولة.
هيكل CUID
الطابع الزمني:
عشوائي:
التوثيق
مولد CUID
مقدمة
CUID (معرف فريد مقاوم للتصادم) هو معرف فريد مصمم ليكون مقاومًا للتصادم، وقابلًا للتوسع أفقيًا، وقابلًا للفرز بترتيب زمني. تعتبر CUIDs مفيدة بشكل خاص في الأنظمة الموزعة حيث تحتاج المعرفات الفريدة إلى أن تُولد بدون تنسيق بين العقد.
هيكل CUIDs
يتكون CUID عادةً من المكونات التالية:
- الطابع الزمني: تمثيل للوقت الحالي
- العداد: عداد متسلسل لضمان الفريدة ضمن نفس المللي ثانية
- بصمة العميل: معرف فريد للجهاز أو العملية التي تولد CUID
- المكون العشوائي: بيانات عشوائية إضافية لتقليل احتمال التصادم
قد يختلف الهيكل الدقيق حسب تنفيذ CUID، لكن هذه المكونات تعمل معًا لإنشاء معرف فريد وقابل للفرز.
إليك تمثيل بصري لهيكل CUID النموذجي:
كيفية توليد CUIDs
تُولد CUIDs باستخدام مزيج من المكونات المعتمدة على الوقت والعشوائية. تتضمن العملية عادةً:
- الحصول على الطابع الزمني الحالي
- زيادة العداد (الذي يعاد ضبطه دوريًا)
- توليد بصمة العميل (عادةً ما يتم ذلك مرة واحدة لكل جلسة أو بدء تطبيق)
- إضافة بيانات عشوائية
- دمج هذه العناصر في تنسيق محدد
عادةً ما يتم تمثيل CUID الناتج كسلسلة من الحروف والأرقام.
المزايا وحالات الاستخدام
تقدم CUIDs العديد من المزايا مقارنةً بأنظمة المعرفات الفريدة الأخرى:
- مقاومة التصادم: تجعل مجموعة الطابع الزمني والعداد والبيانات العشوائية التصادمات غير مرجحة للغاية، حتى في الأنظمة الموزعة.
- التوسع الأفقي: يمكن توليد CUIDs بشكل مستقل على عدة آلات بدون تنسيق.
- الفرز الزمني: يسمح مكون الطابع الزمني بفرز CUIDs ترتيبًا زمنيًا.
- صديقة لعنوان URL: تتكون CUIDs عادةً من أحرف آمنة لعنوان URL.
تشمل حالات الاستخدام الشائعة لـ CUIDs:
- مفاتيح أساسية في قواعد البيانات
- الأنظمة الموزعة حيث تحتاج المعرفات الفريدة إلى أن تُولد عبر عدة عقد
- معرفات الجلسة في تطبيقات الويب
- تتبع الأحداث في أنظمة التحليلات
- تسمية الملفات أو الموارد في أنظمة التخزين السحابية
أمثلة على الكود
إليك أمثلة على توليد CUIDs في لغات برمجة مختلفة:
1// JavaScript (باستخدام مكتبة 'cuid')
2const cuid = require('cuid');
3const id = cuid();
4console.log(id);
5
1## بايثون (باستخدام مكتبة 'cuid')
2import cuid
3id = cuid.cuid()
4print(id)
5
1## روبي (باستخدام الجوهرة 'cuid')
2require 'cuid'
3id = Cuid::generate
4puts id
5
1// جافا (باستخدام مكتبة 'com.github.f4b6a3.cuid')
2import com.github.f4b6a3.cuid.Cuid;
3
4public class CuidExample {
5 public static void main(String[] args) {
6 String id = Cuid.createCuid();
7 System.out.println(id);
8 }
9}
10
1// C# (باستخدام حزمة NuGet 'Cuid.Net')
2using Cuid;
3
4class Program
5{
6 static void Main(string[] args)
7 {
8 string id = CuidGenerator.Generate();
9 Console.WriteLine(id);
10 }
11}
12
1// PHP (باستخدام حزمة 'endyjasmi/cuid')
2<?php
3require 'vendor/autoload.php';
4use Endyjasmi\Cuid\Cuid;
5
6$id = Cuid::make();
7echo $id;
8
1// Go (باستخدام حزمة 'github.com/lucsky/cuid')
2package main
3
4import (
5 "fmt"
6 "github.com/lucsky/cuid"
7)
8
9func main() {
10 id := cuid.New()
11 fmt.Println(id)
12}
13
1// سويفت (باستخدام حزمة 'CUID')
2import CUID
3
4let id = CUID()
5print(id)
6
1// C++ (باستخدام تنفيذ مخصص)
2#include <iostream>
3#include <chrono>
4#include <random>
5#include <sstream>
6#include <iomanip>
7
8std::string generateCUID() {
9 auto now = std::chrono::system_clock::now();
10 auto now_ms = std::chrono::time_point_cast<std::chrono::milliseconds>(now);
11 auto value = now_ms.time_since_epoch();
12 long duration = value.count();
13
14 std::random_device rd;
15 std::mt19937 gen(rd());
16 std::uniform_int_distribution<> dis(0, 35);
17
18 std::stringstream ss;
19 ss << 'c';
20 ss << std::hex << std::setfill('0') << std::setw(8) << duration;
21 for (int i = 0; i < 8; i++) {
22 int r = dis(gen);
23 ss << (char)(r < 10 ? '0' + r : 'a' + r - 10);
24 }
25 return ss.str();
26}
27
28int main() {
29 std::string id = generateCUID();
30 std::cout << id << std::endl;
31 return 0;
32}
33
1% MATLAB (باستخدام تنفيذ مخصص)
2function id = generateCUID()
3 timestamp = dec2hex(round(posixtime(datetime('now'))*1000), 8);
4 random = '';
5 for i = 1:8
6 random = [random char(randi([48 57 97 122]))];
7 end
8 id = ['c' timestamp random];
9end
10
11% الاستخدام
12id = generateCUID();
13disp(id);
14
1## R (باستخدام تنفيذ مخصص)
2library(lubridate)
3
4generate_cuid <- function() {
5 timestamp <- format(as.numeric(now()) * 1000, scientific = FALSE)
6 timestamp <- substr(timestamp, 1, 8)
7 random <- paste0(sample(c(0:9, letters[1:6]), 8, replace = TRUE), collapse = "")
8 paste0("c", timestamp, random)
9}
10
11## الاستخدام
12id <- generate_cuid()
13print(id)
14
1' Excel VBA (باستخدام تنفيذ مخصص)
2Function GenerateCUID() As String
3 Dim timestamp As String
4 Dim random As String
5 Dim i As Integer
6
7 timestamp = Right("00000000" & Hex(CLng(CDbl(Now()) * 86400000)), 8)
8
9 For i = 1 To 8
10 random = random & Mid("0123456789abcdef", Int(Rnd() * 16) + 1, 1)
11 Next i
12
13 GenerateCUID = "c" & timestamp & random
14End Function
15
16' الاستخدام في خلية
17'=GenerateCUID()
18
التاريخ والتطوير
تم تطوير CUIDs في الأصل بواسطة إريك إليوت في عام 2012 كحل لمشكلة توليد معرفات فريدة في الأنظمة الموزعة. استلهمت الفكرة من نظام معرفات Snowflake الخاص بتويتر ولكن تم تصميمها لتكون أكثر سهولة في التنفيذ والاستخدام عبر منصات مختلفة.
كان تطوير CUIDs مدفوعًا بالحاجة إلى نظام معرف بسيط مقاوم للتصادم يمكن أن يعمل عبر لغات برمجة وبيئات مختلفة. كانت هدف إليوت هو إنشاء نظام سهل التنفيذ، لا يتطلب تنسيق مركزي، ويمكن أن يتوسع أفقيًا.
منذ نشأتها، مرت CUID بعدة مراحل وتحسينات:
- ركز تنفيذ CUID الأصلي على البساطة وسهولة الاستخدام.
- مع زيادة الاعتماد، ساهمت المجتمع بتنفيذات في لغات برمجة مختلفة.
- في عام 2021، تم تقديم CUID2 لمعالجة بعض قيود CUID الأصلية وتوفير أداء أفضل ومقاومة للتصادم.
- حسنت CUID2 النسخة الأصلية من خلال استخدام مولد أرقام عشوائية أكثر أمانًا وزيادة الطول الإجمالي للمعرف.
تعكس تطورات CUIDs الاحتياجات المتغيرة للأنظمة الموزعة والجهود المستمرة لتحقيق التوازن بين البساطة والأمان والأداء في توليد المعرفات الفريدة.
المراجع
- المستودع الرسمي لـ CUID على GitHub
- مواصفات CUID2
- إليوت، إريك. "توليد معرفات فريدة في بيئة موزعة." Medium، 2015.
- "معرفات مقاومة للتصادم للأنظمة الموزعة." DZone، 2018.
تسمح لك أداة مولد CUID هذه بتوليد CUIDs بسرعة لمشاريعك. ببساطة انقر على زر "توليد" لإنشاء CUID جديد، واستخدم زر "نسخ" لنسخه إلى الحافظة الخاصة بك للاستخدام السهل في تطبيقاتك.
تغذية راجعة
انقر فوق الرسالة المنبثقة لبدء إعطاء تعليق حول هذه الأداة
الأدوات ذات الصلة
اكتشف المزيد من الأدوات التي قد تكون مفيدة لسير عملك