เครื่องมือสร้าง KSUID สำหรับระบบที่กระจายและฐานข้อมูล
สร้างตัวระบุที่ไม่ซ้ำกันแบบเรียงลำดับตามเวลา (KSUID) สำหรับใช้ในระบบที่กระจาย, ฐานข้อมูล, และแอปพลิเคชันที่ต้องการคีย์ที่ไม่ซ้ำกันและสามารถเรียงลำดับตามเวลาได้ KSUID จะรวมเอาเวลาที่ระบุไว้กับข้อมูลสุ่มเพื่อสร้างตัวระบุที่ทนต่อการชนและสามารถเรียงลำดับได้
ตัวสร้าง KSUID
เอกสารประกอบ
KSUID Generator
Introduction
KSUID (K-Sortable Unique IDentifier) เป็นรูปแบบของตัวระบุที่ไม่ซ้ำกันซึ่งมีข้อดีหลายประการเมื่อเปรียบเทียบกับ UUID (Universally Unique Identifier) แบบดั้งเดิมและระบบตัวระบุอื่นๆ เครื่องมือนี้ช่วยให้คุณสามารถสร้าง KSUID ได้อย่างรวดเร็วและง่ายดาย
What is a KSUID?
KSUID คือ ตัวระบุที่มีขนาด 20 ไบต์ซึ่งสามารถเรียงลำดับได้ที่ประกอบด้วย:
- Timestamp ขนาด 32 บิต (4 ไบต์)
- ความสุ่ม 16 ไบต์
เมื่อแสดงเป็นสตริง KSUID จะถูกเข้ารหัสในรูปแบบ base62 และมีความยาว 27 ตัวอักษร
Structure of a KSUID
โครงสร้างของ KSUID สามารถแบ่งออกเป็นดังนี้:
-
Timestamp (4 ไบต์): แสดงถึงจำนวนวินาทีตั้งแต่ยุค Unix (1 มกราคม 1970 เวลา 00:00 UTC) Timestamp ช่วยให้ KSUID สามารถเรียงลำดับตามเวลาที่สร้างได้อย่างคร่าวๆ
-
Random Component (16 ไบต์): เป็นหมายเลขสุ่มที่มีความปลอดภัยทางการเข้ารหัสซึ่งช่วยให้มั่นใจได้ถึงความไม่ซ้ำกันแม้ว่าจะมีการสร้าง KSUID หลายตัวในวินาทีเดียวกัน
-
Base62 Encoding: 20 ไบต์ที่รวมกัน (timestamp + random) จะถูกเข้ารหัสด้วย base62 (A-Z, a-z, 0-9) เพื่อผลิตสตริงสุดท้ายที่มีความยาว 27 ตัวอักษร
KSUID Formula
KSUID สามารถแสดงในเชิงคณิตศาสตร์ได้ดังนี้:
โดยที่:
- คือ timestamp ขนาด 32 บิต
- คือส่วนประกอบแบบสุ่มขนาด 128 บิต
- หมายถึงการเชื่อมต่อ
Timestamp คำนวณได้จาก:
T = \text{floor}(\text{current_time} - \text{KSUID_epoch})
โดยที่ KSUID_epoch คือ 1400000000 (2014-05-13T16:53:20Z).
KSUID Structure Diagram
Use Cases for KSUIDs
KSUIDs มีประโยชน์โดยเฉพาะในสถานการณ์ต่อไปนี้:
-
ระบบกระจาย: เมื่อคุณต้องการตัวระบุที่ไม่ซ้ำกันข้ามเซิร์ฟเวอร์หรือบริการหลายตัวโดยไม่ต้องประสานงานกัน
-
ข้อมูลที่สามารถเรียงลำดับตามเวลา: เมื่อต้องการเรียงลำดับข้อมูลตามเวลาที่สร้างโดยไม่ต้องเก็บฟิลด์ timestamp แยกต่างหาก
-
คีย์ฐานข้อมูล: เป็นคีย์หลักในฐานข้อมูล โดยเฉพาะในฐานข้อมูลแบบกระจายที่ไม่เหมาะกับการใช้จำนวนเต็มที่เพิ่มขึ้นโดยอัตโนมัติ
-
ตัวระบุที่ปลอดภัยสำหรับ URL: สำหรับการสร้างตัวระบุที่สั้นและไม่ซ้ำกันซึ่งปลอดภัยสำหรับ URL ในแอปพลิเคชันเว็บ
-
การเชื่อมโยงบันทึก: เพื่อเชื่อมโยงรายการบันทึกข้ามบริการต่างๆ ในสถาปัตยกรรมไมโครเซอร์วิส
Advantages of KSUIDs
KSUIDs มีข้อดีหลายประการเมื่อเปรียบเทียบกับระบบตัวระบุอื่นๆ:
-
สามารถเรียงลำดับได้: แตกต่างจาก UUIDs, KSUIDs สามารถเรียงลำดับตามเวลาได้ ซึ่งมีประโยชน์สำหรับการทำดัชนีในฐานข้อมูลและการวิเคราะห์บันทึก
-
ไม่ต้องการการประสานงาน: แตกต่างจาก ID ที่เพิ่มขึ้นโดยอัตโนมัติ, KSUIDs สามารถสร้างได้อย่างอิสระโดยเซิร์ฟเวอร์ต่างๆ โดยไม่เสี่ยงต่อการชนกัน
-
การแสดงผลที่กระชับ: ที่มีความยาว 27 ตัวอักษร, KSUIDs จะกระชับกว่าที่เป็น UUIDs เมื่อแสดงเป็นสตริง
-
มี timestamp ฝังอยู่: timestamp ที่ฝังอยู่ช่วยให้สามารถเรียงลำดับและกรองตามเวลาได้โดยไม่ต้องมีฟิลด์ timestamp แยกต่างหาก
-
ปลอดภัยสำหรับ URL: การเข้ารหัส base62 ทำให้ KSUIDs ปลอดภัยสำหรับการใช้ใน URL โดยไม่ต้องมีการเข้ารหัสเพิ่มเติม
-
ลดความน่าจะเป็นของการชนกัน: ส่วนประกอบแบบสุ่มขนาด 16 ไบต์ทำให้การชนกันมีความน่าจะเป็นต่ำมาก แม้ในอัตราการสร้างที่สูง
How to Use This Generator
- ป้อนพารามิเตอร์เพิ่มเติมหากจำเป็น (เช่น timestamp ที่กำหนดเอง)
- คลิกปุ่ม "Generate KSUID" เพื่อสร้าง KSUID ใหม่
- KSUID ที่สร้างขึ้นจะแสดงในฟิลด์ผลลัพธ์
- คุณสามารถสร้าง KSUID หลายตัวโดยทำซ้ำขั้นตอน 1-3
- ใช้ปุ่ม "Copy" ถัดจากแต่ละ KSUID เพื่อคัดลอกไปยังคลิปบอร์ดของคุณ
- หากต้องการสามารถใช้ฟีเจอร์ "Export" เพื่อดาวน์โหลดรายการของ KSUID ที่สร้างขึ้น
โปรดจำไว้ว่า KSUID แต่ละตัวไม่ซ้ำกันและควรใช้เพียงครั้งเดียว สร้าง KSUID ใหม่ทุกครั้งที่คุณต้องการตัวระบุที่ไม่ซ้ำกัน
Code Examples
นี่คือตัวอย่างการสร้าง KSUID ในหลายภาษาโปรแกรม:
1## Python
2import ksuid
3
4new_id = ksuid.ksuid()
5print(f"Generated KSUID: {new_id}")
6
1// JavaScript
2const { ksuid } = require('ksuid')
3
4const newId = ksuid()
5console.log(`Generated KSUID: ${newId}`)
6
1// Java
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("Generated 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 << "Generated KSUID: " << newId.string() << std::endl;
8 return 0;
9}
10
1## Ruby
2require 'ksuid'
3
4new_id = KSUID.new
5puts "Generated 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 "Generated 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("Generated KSUID: %s\n", newId.String())
12}
13
1// Swift
2import KSUID
3
4let newId = KSUID()
5print("Generated KSUID: \(newId)")
6
References
- Segment's KSUID GitHub Repository: https://github.com/segmentio/ksuid
- "Generating good unique identifiers" โดย Peter Bourgon: https://peter.bourgon.org/blog/2019/05/20/generating-good-unique-ids.html
- KSUID Specification: https://github.com/segmentio/ksuid/blob/master/README.md
ข้อเสนอแนะแสดงความคิดเห็น
คลิกที่ข้อเสนอแนะแสดงความคิดเห็นเพื่อเริ่มให้ข้อเสนอแนะแก่เครื่องมือนี้
เครื่องมือที่เกี่ยวข้อง
ค้นพบเครื่องมือเพิ่มเติมที่อาจมีประโยชน์สำหรับการทำงานของคุณ