גנרטור מזהים ייחודיים מסודרים לפי זמן (KSUID)
צור מזהים ייחודיים מסודרים לפי זמן (KSUIDs) לשימוש במערכות מבוזרות, מסדי נתונים ויישומים הדורשים מפתחות ייחודיים שניתן למיין לפי זמן. KSUIDs משלבים חותמת זמן עם נתונים אקראיים כדי ליצור מזהים חסינים להתנגשויות שניתן למיין.
גנרטור KSUID
תיעוד
מחולל KSUID
מבוא
KSUID (מזהה ייחודי מסודר K) הוא פורמט מזהה ייחודי המציע מספר יתרונות בהשוואה ל-UUID (מזהה ייחודי אוניברסלי) ולמערכות מזהים אחרות. כלי זה מאפשר לך ליצור KSUIDs במהירות ובקלות.
מה זה KSUID?
KSUID הוא מזהה מסודר באורך 20 בייטים המורכב מ:
- חותמת זמן של 32 ביט (4 בייטים)
- 16 בייטים של אקראיות
כאשר הוא מיוצג כמחרוזת, KSUID מקודד בבסיס 62 ואורכו 27 תווים.
מבנה של KSUID
מבנה של KSUID ניתן לפרק כך:
-
חותמת זמן (4 בייטים): זה מייצג את מספר השניות מאז אפוק Unix (1 בינואר 1970, בשעה 00:00 UTC). חותמת הזמן מאפשרת ל-KSUIDs להיות מסודרים בערך לפי זמן הייצור.
-
רכיב אקראי (16 בייטים): זהו מספר אקראי מאובטח מבחינה קריפטוגרפית המבטיח ייחודיות גם כאשר מספר KSUIDs נוצרו באותה שנייה.
-
קידוד בבסיס 62: 20 הבייטים המשולבים (חותמת זמן + אקראי) מקודדים לאחר מכן באמצעות בסיס 62 (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 שימושיים במיוחד בתרחישים הבאים:
-
מערכות מבוזרות: כאשר אתה זקוק למזהים ייחודיים על פני מספר שרתים או שירותים ללא תיאום.
-
נתונים מסודרים לפי זמן: כאשר אתה רוצה למיין נתונים לפי זמן יצירה מבלי לאחסן חותמת זמן נפרדת.
-
מפתחות בסיס נתונים: כמפתחות ראשיים בבסיסי נתונים, במיוחד בבסיסי נתונים מבוזרים שבהם מספרים אוטומטיים לא מתאימים.
-
מזהים בטוחים ל-URL: ליצירת מזהים קצרים, ייחודיים ובטוחים ל-URL עבור משאבים ביישומי אינטרנט.
-
קורלציה של יומנים: לקשר בין רשומות יומן בין שירותים שונים בארכיטקטורת מיקרו-שירותים.
יתרונות של KSUIDs
KSUIDs מציעים מספר יתרונות על פני מערכות מזהים אחרות:
-
מסודרות: בניגוד ל-UUIDs, KSUIDs יכולים להיות מסודרים כרונולוגית, מה שיכול להיות מועיל לאינדוקס בסיסי נתונים ולניתוח יומנים.
-
אין צורך בתיאום: בניגוד למזהים אוטומטיים, KSUIDs יכולים להת生成 באופן עצמאי על ידי שרתים שונים מבלי לסכן התנגשויות.
-
ייצוג קומפקטי: באורך 27 תווים, KSUIDs קומפקטיים יותר מ-UUIDs כאשר הם מיוצגים כמחרוזות.
-
חותמת זמן מוטמעת: חותמת הזמן המוטמעת מאפשרת מיון וסינון מבוססי זמן מבלי להזדקק לשדה חותמת זמן נפרד.
-
בטוחים ל-URL: הקידוד בבסיס 62 הופך את KSUIDs לבטוחים לשימוש ב-URLs ללא קידוד נוסף.
-
הפחתת הסתברות התנגשויות: רכיב האקראי של 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// גו
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
משוב
לחץ על טוסט המשוב כדי להתחיל לתת משוב על כלי זה
כלים קשורים
גלה עוד כלים שעשויים להיות מועילים עבור זרימת העבודה שלך