مولد معرفات KSUID الفريدة القابلة للفرز حسب الوقت
قم بإنشاء معرفات فريدة قابلة للفرز حسب الوقت (KSUIDs) للاستخدام في الأنظمة الموزعة وقواعد البيانات والتطبيقات التي تتطلب مفاتيح فريدة وقابلة للفرز حسب الوقت. تجمع KSUIDs بين الطابع الزمني وبيانات عشوائية لإنشاء معرفات مقاومة للتصادم وقابلة للفرز.
مولد KSUID
الوثائق
مولد KSUID
مقدمة
KSUID (معرّف فريد قابل للفرز) هو تنسيق لمعرّف فريد يقدم عدة مزايا مقارنةً بـ UUID (معرّف فريد عالمي) وأنظمة المعرفات الأخرى. تتيح لك هذه الأداة إنشاء KSUIDs بسرعة وسهولة.
ما هو KSUID؟
KSUID هو معرّف قابل للفرز بطول 20 بايت يتكون من:
- طابع زمني 32 بت (4 بايت)
- 16 بايت من العشوائية
عند تمثيله كسلسلة، يتم ترميز KSUID في base62 ويكون طوله 27 حرفًا.
هيكل KSUID
يمكن تقسيم هيكل KSUID كما يلي:
-
الطابع الزمني (4 بايت): يمثل عدد الثواني منذ بداية Unix (1 يناير 1970، الساعة 00:00 UTC). يسمح الطابع الزمني بفرز KSUIDs تقريبًا حسب وقت الإنشاء.
-
المكون العشوائي (16 بايت): هو رقم عشوائي آمن تشفيرياً يضمن الفريدة حتى عند إنشاء عدة KSUIDs في نفس الثانية.
-
ترميز Base62: يتم ترميز الـ 20 بايت المجمعة (الطابع الزمني + العشوائي) باستخدام base62 (A-Z، a-z، 0-9) لإنتاج السلسلة النهائية بطول 27 حرفًا.
صيغة KSUID
يمكن تمثيل KSUID رياضيًا كالتالي:
حيث:
- هو الطابع الزمني 32 بت
- هو المكون العشوائي 128 بت
- يدل على التراص
يتم حساب الطابع الزمني كالتالي:
T = \text{floor}(\text{current_time} - \text{KSUID_epoch})
حيث KSUID_epoch هو 1400000000 (2014-05-13T16:53:20Z).
مخطط هيكل KSUID
حالات استخدام KSUIDs
تكون KSUIDs مفيدة بشكل خاص في السيناريوهات التالية:
-
الأنظمة الموزعة: عندما تحتاج إلى معرّفات فريدة عبر عدة خوادم أو خدمات دون تنسيق.
-
البيانات القابلة للفرز زمنياً: عندما ترغب في فرز البيانات حسب وقت الإنشاء دون الحاجة لتخزين حقل طابع زمني منفصل.
-
مفاتيح قاعدة البيانات: كمفاتيح رئيسية في قواعد البيانات، خاصة في قواعد البيانات الموزعة حيث لا تكون الأعداد التلقائية مناسبة.
-
معرّفات آمنة للروابط: لإنشاء معرّفات قصيرة وفريدة وآمنة للاستخدام في الروابط للموارد في تطبيقات الويب.
-
ارتباط السجلات: لربط إدخالات السجل عبر خدمات مختلفة في بنية الخدمات المصغرة.
مزايا KSUIDs
تقدم KSUIDs عدة مزايا مقارنةً بأنظمة المعرفات الأخرى:
-
القابلية للفرز: على عكس UUIDs، يمكن فرز KSUIDs زمنياً، مما يكون مفيدًا لفهرسة قواعد البيانات وتحليل السجلات.
-
عدم الحاجة للتنسيق: على عكس المعرفات التلقائية، يمكن إنشاء KSUIDs بشكل مستقل من قبل خوادم مختلفة دون خطر حدوث تصادم.
-
تمثيل مضغوط: بطول 27 حرفًا، تكون KSUIDs أكثر ضغطًا من UUIDs عند تمثيلها كسلاسل.
-
الطابع الزمني المدمج: يسمح الطابع الزمني المدمج بالفرز والتصفية بناءً على الوقت دون الحاجة إلى حقل طابع زمني منفصل.
-
آمنة للاستخدام في الروابط: يجعل الترميز base62 KSUIDs آمنة للاستخدام في الروابط دون أي ترميز إضافي.
-
تقليل احتمال التصادم: يجعل المكون العشوائي بطول 16 بايت التصادمات غير محتملة للغاية، حتى عند معدلات الإنشاء العالية.
كيفية استخدام هذا المولد
- أدخل أي معلمات إضافية إذا لزم الأمر (مثل الطابع الزمني المخصص).
- انقر على زر "إنشاء KSUID" لإنشاء KSUID جديد.
- سيتم عرض KSUID الذي تم إنشاؤه في حقل الإخراج.
- يمكنك إنشاء عدة KSUIDs من خلال تكرار الخطوات 1-3.
- استخدم زر "نسخ" بجوار كل KSUID لنسخه إلى الحافظة الخاصة بك.
- اختياريًا، استخدم ميزة "تصدير" لتنزيل قائمة من KSUIDs التي تم إنشاؤها.
تذكر أن كل KSUID فريد ويجب استخدامه مرة واحدة فقط. قم بإنشاء KSUID جديد في كل مرة تحتاج فيها إلى معرّف فريد.
أمثلة على الشيفرة
إليك أمثلة على إنشاء KSUIDs في لغات برمجة مختلفة:
1## بايثون
2import ksuid
3
4new_id = ksuid.ksuid()
5print(f"KSUID الذي تم إنشاؤه: {new_id}")
6
1// جافا سكريبت
2const { ksuid } = require('ksuid')
3
4const newId = ksuid()
5console.log(`KSUID الذي تم إنشاؤه: ${newId}`)
6
1// جافا
2import com.github.ksuid.KsuidGenerator;
3
4public class KsuidExample {
5 public static void main(String[] args) {
6 String newId = KsuidGenerator.generate();
7 System.out.println("KSUID الذي تم إنشاؤه: " + newId);
8 }
9}
10
1// C++
2#include <iostream>
3#include <ksuid/ksuid.hpp>
4
5int main() {
6 ksuid::Ksuid newId = ksuid::Ksuid::generate();
7 std::cout << "KSUID الذي تم إنشاؤه: " << newId.string() << std::endl;
8 return 0;
9}
10
1## روبي
2require 'ksuid'
3
4new_id = KSUID.new
5puts "KSUID الذي تم إنشاؤه: #{new_id}"
6
1// PHP
2<?php
3require_once 'vendor/autoload.php';
4
5use Tuupola\KsuidFactory;
6
7$factory = new KsuidFactory();
8$newId = $factory->create();
9echo "KSUID الذي تم إنشاؤه: " . $newId . "\n";
10?>
11
1// Go
2package main
3
4import (
5 "fmt"
6 "github.com/segmentio/ksuid"
7)
8
9func main() {
10 newId := ksuid.New()
11 fmt.Printf("KSUID الذي تم إنشاؤه: %s\n", newId.String())
12}
13
1// سويفت
2import KSUID
3
4let newId = KSUID()
5print("KSUID الذي تم إنشاؤه: \(newId)")
6
المراجع
- مستودع KSUID على GitHub من Segment: https://github.com/segmentio/ksuid
- "إنشاء معرّفات فريدة جيدة" بواسطة بيتر بورغون: https://peter.bourgon.org/blog/2019/05/20/generating-good-unique-ids.html
- مواصفة KSUID: https://github.com/segmentio/ksuid/blob/master/README.md
الملاحظات
انقر على إشعار الملاحظات لبدء إعطاء ملاحظات حول هذه الأداة
أدوات ذات صلة
اكتشف المزيد من الأدوات التي قد تكون مفيدة لعملك