ژنراتور شناساییهای منحصر به فرد قابل مرتبسازی بر اساس زمان
شناساییهای منحصر به فرد قابل مرتبسازی بر اساس زمان (KSUID) برای استفاده در سیستمهای توزیعشده، پایگاههای داده و برنامههایی که به کلیدهای منحصر به فرد و قابل مرتبسازی بر اساس زمان نیاز دارند، تولید کنید. KSUIDها یک زمانسنجی را با دادههای تصادفی ترکیب میکنند تا شناساییهای مقاوم در برابر برخورد و قابل مرتبسازی ایجاد کنند.
ژنراتور KSUID
مستندات
تولید کننده KSUID
مقدمه
KSUID (شناسه منحصر به فرد قابل مرتبسازی K) یک فرمت شناسه منحصر به فرد است که مزایای متعددی نسبت به UUID (شناسه منحصر به فرد جهانی) و سایر سیستمهای شناسایی ارائه میدهد. این ابزار به شما امکان میدهد که KSUIDها را به سرعت و به راحتی تولید کنید.
KSUID چیست؟
KSUID یک شناسه ۲۰ بایتی قابل مرتبسازی است که شامل:
- یک timestamp ۳۲ بیتی (۴ بایت)
- ۱۶ بایت تصادفی
زمانی که به عنوان یک رشته نمایش داده میشود، یک KSUID در base62 کدگذاری میشود و ۲۷ کاراکتر طول دارد.
ساختار یک KSUID
ساختار یک KSUID را میتوان به شرح زیر تقسیم کرد:
-
Timestamp (۴ بایت): این نمایانگر تعداد ثانیهها از زمان Unix epoch (۱ ژانویه ۱۹۷۰، ساعت ۰۰:۰۰ UTC) است. timestamp به KSUIDها این امکان را میدهد که بهطور تقریبی بر اساس زمان تولید مرتب شوند.
-
مؤلفه تصادفی (۱۶ بایت): این یک عدد تصادفی امن از نظر رمزنگاری است که منحصر به فرد بودن را حتی زمانی که چندین KSUID در همان ثانیه تولید میشوند، تضمین میکند.
-
کدگذاری Base62: ۲۰ بایت ترکیبی (timestamp + random) سپس با استفاده از base62 (A-Z، a-z، 0-9) کدگذاری میشود تا رشته نهایی ۲۷ کاراکتری تولید شود.
فرمول KSUID
یک KSUID میتواند بهصورت ریاضی بهصورت زیر نمایش داده شود:
که در آن:
- timestamp ۳۲ بیتی است
- مؤلفه تصادفی ۱۲۸ بیتی است
- به معنای الحاق است
timestamp بهصورت زیر محاسبه میشود:
T = \text{floor}(\text{current_time} - \text{KSUID_epoch})
که در آن KSUID_epoch برابر با ۱۴۰۰۰۰۰۰۰۰ (۲۰۱۴-۰۵-۱۳T۱۶:۵۳:۲۰Z) است.
نمودار ساختار KSUID
موارد استفاده از KSUIDها
KSUIDها بهویژه در سناریوهای زیر مفید هستند:
-
سیستمهای توزیعشده: زمانی که به شناسههای منحصر به فرد در چندین سرور یا سرویس بدون هماهنگی نیاز دارید.
-
دادههای قابل مرتبسازی بر اساس زمان: زمانی که میخواهید دادهها را بر اساس زمان ایجاد مرتب کنید بدون اینکه یک timestamp جداگانه ذخیره کنید.
-
کلیدهای پایگاه داده: بهعنوان کلیدهای اصلی در پایگاههای داده، بهویژه در پایگاههای داده توزیعشده که اعداد خودافزایشی مناسب نیستند.
-
شناسههای امن برای URL: برای ایجاد شناسههای کوتاه، منحصر به فرد و امن برای URL برای منابع در برنامههای وب.
-
همبستگی لاگ: برای همبستگی ورودیهای لاگ در سرویسهای مختلف در معماری میکروسرویسها.
مزایای KSUIDها
KSUIDها مزایای متعددی نسبت به سایر سیستمهای شناسایی ارائه میدهند:
-
قابلیت مرتبسازی: بر خلاف UUIDها، KSUIDها میتوانند بهطور زمانی مرتب شوند که برای ایندکسگذاری پایگاه داده و تحلیل لاگ مفید است.
-
نیازی به هماهنگی نیست: بر خلاف شناسههای خودافزایشی، KSUIDها میتوانند بهطور مستقل توسط سرورهای مختلف تولید شوند بدون اینکه خطر برخورد وجود داشته باشد.
-
نمایه فشرده: در ۲۷ کاراکتر، KSUIDها هنگام نمایش بهعنوان رشتهها، فشردهتر از UUIDها هستند.
-
timestamp درونساخته: timestamp درونساخته امکان مرتبسازی و فیلتر کردن مبتنی بر زمان را بدون نیاز به یک فیلد timestamp جداگانه فراهم میکند.
-
امن برای URL: کدگذاری base62 باعث میشود که KSUIDها برای استفاده در URLها بدون نیاز به کدگذاری اضافی امن باشند.
-
احتمال برخورد کاهش یافته: مؤلفه تصادفی ۱۶ بایتی احتمال برخورد را بهطرز قابل توجهی کاهش میدهد، حتی در نرخهای تولید بالا.
نحوه استفاده از این تولید کننده
- هر پارامتر اضافی را در صورت نیاز وارد کنید (به عنوان مثال، timestamp سفارشی).
- روی دکمه "تولید KSUID" کلیک کنید تا یک KSUID جدید ایجاد شود.
- KSUID تولید شده در فیلد خروجی نمایش داده میشود.
- میتوانید با تکرار مراحل ۱-۳ چندین KSUID تولید کنید.
- از دکمه "کپی" در کنار هر KSUID برای کپی کردن آن به کلیپ بورد خود استفاده کنید.
- بهطور اختیاری، از ویژگی "صادرات" برای دانلود لیستی از KSUIDهای تولید شده استفاده کنید.
به یاد داشته باشید که هر KSUID منحصر به فرد است و باید فقط یک بار استفاده شود. هر بار که به یک شناسه منحصر به فرد نیاز دارید، یک KSUID جدید تولید کنید.
مثالهای کد
در اینجا مثالهایی از تولید KSUIDها در زبانهای برنامهنویسی مختلف آورده شده است:
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 در گیتهاب 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
بازخورد
برای شروع دادن بازخورد درباره این ابزار، روی نوار بازخورد کلیک کنید
ابزارهای مرتبط
ابزارهای بیشتری را کشف کنید که ممکن است برای جریان کار شما مفید باشند