Trình tạo Định danh KSUID Có thể Sắp xếp và Độc nhất
Tạo các Định danh Độc nhất Có thể Sắp xếp theo K (KSUID) để sử dụng trong các hệ thống phân tán, cơ sở dữ liệu và ứng dụng yêu cầu các khóa độc nhất, có thể sắp xếp theo thời gian. KSUID kết hợp một dấu thời gian với dữ liệu ngẫu nhiên để tạo ra các định danh có khả năng chống va chạm và có thể sắp xếp.
Trình tạo KSUID
Tài liệu
Trình tạo KSUID
Giới thiệu
KSUID (K-Sortable Unique IDentifier) là một định dạng định danh duy nhất cung cấp nhiều lợi thế hơn so với UUID (Universally Unique Identifier) truyền thống và các hệ thống định danh khác. Công cụ này cho phép bạn tạo KSUID một cách nhanh chóng và dễ dàng.
KSUID là gì?
KSUID là một định danh có độ dài 20 byte có thể sắp xếp, bao gồm:
- Một dấu thời gian 32-bit (4 byte)
- 16 byte ngẫu nhiên
Khi được biểu diễn dưới dạng chuỗi, một KSUID được mã hóa theo base62 và có độ dài 27 ký tự.
Cấu trúc của một KSUID
Cấu trúc của một KSUID có thể được phân tích như sau:
-
Dấu thời gian (4 byte): Điều này đại diện cho số giây kể từ thời điểm Unix epoch (ngày 1 tháng 1 năm 1970, lúc 00:00 UTC). Dấu thời gian cho phép KSUID được sắp xếp theo thời gian tạo ra.
-
Thành phần ngẫu nhiên (16 byte): Đây là một số ngẫu nhiên an toàn về mặt mật mã đảm bảo tính duy nhất ngay cả khi nhiều KSUID được tạo ra trong cùng một giây.
-
Mã hóa Base62: 20 byte kết hợp (dấu thời gian + ngẫu nhiên) sau đó được mã hóa bằng base62 (A-Z, a-z, 0-9) để tạo ra chuỗi 27 ký tự cuối cùng.
Công thức KSUID
Một KSUID có thể được biểu diễn toán học như sau:
Trong đó:
- là dấu thời gian 32-bit
- là thành phần ngẫu nhiên 128-bit
- biểu thị cho phép nối
Dấu thời gian được tính như sau:
T = \text{floor}(\text{current_time} - \text{KSUID_epoch})
Trong đó KSUID_epoch là 1400000000 (2014-05-13T16:53:20Z).
Sơ đồ cấu trúc KSUID
Các trường hợp sử dụng KSUID
KSUID đặc biệt hữu ích trong các tình huống sau:
-
Hệ thống phân tán: Khi bạn cần các định danh duy nhất trên nhiều máy chủ hoặc dịch vụ mà không cần phối hợp.
-
Dữ liệu có thể sắp xếp theo thời gian: Khi bạn muốn sắp xếp dữ liệu theo thời gian tạo mà không cần lưu trữ một dấu thời gian riêng.
-
Khóa cơ sở dữ liệu: Là khóa chính trong các cơ sở dữ liệu, đặc biệt trong các cơ sở dữ liệu phân tán nơi các số nguyên tự tăng không phù hợp.
-
Định danh an toàn cho URL: Để tạo ra các định danh ngắn, duy nhất và an toàn cho URL cho các tài nguyên trong các ứng dụng web.
-
Tương quan nhật ký: Để tương quan các mục nhật ký giữa các dịch vụ khác nhau trong kiến trúc microservices.
Lợi thế của KSUID
KSUID cung cấp nhiều lợi thế hơn so với các hệ thống định danh khác:
-
Có thể sắp xếp: Không giống như UUID, KSUID có thể được sắp xếp theo thời gian, điều này hữu ích cho việc lập chỉ mục cơ sở dữ liệu và phân tích nhật ký.
-
Không cần phối hợp: Không giống như các ID tự tăng, KSUID có thể được tạo ra độc lập bởi các máy chủ khác nhau mà không có nguy cơ xung đột.
-
Đại diện gọn gàng: Với 27 ký tự, KSUID gọn gàng hơn UUID khi được biểu diễn dưới dạng chuỗi.
-
Dấu thời gian nhúng: Dấu thời gian nhúng cho phép sắp xếp và lọc theo thời gian mà không cần một trường dấu thời gian riêng biệt.
-
An toàn cho URL: Mã hóa base62 làm cho KSUID an toàn để sử dụng trong URL mà không cần mã hóa bổ sung.
-
Giảm khả năng xung đột: Thành phần ngẫu nhiên 16 byte làm cho khả năng xung đột cực kỳ thấp, ngay cả với tỷ lệ tạo cao.
Cách sử dụng Trình tạo này
- Nhập bất kỳ tham số bổ sung nào nếu cần (ví dụ: dấu thời gian tùy chỉnh).
- Nhấp vào nút "Tạo KSUID" để tạo một KSUID mới.
- KSUID được tạo sẽ được hiển thị trong trường đầu ra.
- Bạn có thể tạo nhiều KSUID bằng cách lặp lại các bước 1-3.
- Sử dụng nút "Sao chép" bên cạnh mỗi KSUID để sao chép nó vào clipboard của bạn.
- Tùy chọn, sử dụng tính năng "Xuất" để tải xuống danh sách các KSUID đã tạo.
Hãy nhớ rằng mỗi KSUID là duy nhất và chỉ nên được sử dụng một lần. Tạo một KSUID mới mỗi khi bạn cần một định danh duy nhất.
Ví dụ mã
Dưới đây là các ví dụ về việc tạo KSUID trong các ngôn ngữ lập trình khác nhau:
1## Python
2import ksuid
3
4new_id = ksuid.ksuid()
5print(f"KSUID đã tạo: {new_id}")
6
1// JavaScript
2const { ksuid } = require('ksuid')
3
4const newId = ksuid()
5console.log(`KSUID đã tạo: ${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("KSUID đã tạo: " + 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 đã tạo: " << newId.string() << std::endl;
8 return 0;
9}
10
1## Ruby
2require 'ksuid'
3
4new_id = KSUID.new
5puts "KSUID đã tạo: #{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 đã tạo: " . $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 đã tạo: %s\n", newId.String())
12}
13
1// Swift
2import KSUID
3
4let newId = KSUID()
5print("KSUID đã tạo: \(newId)")
6
Tài liệu tham khảo
- Kho lưu trữ KSUID của Segment: https://github.com/segmentio/ksuid
- "Tạo các định danh duy nhất tốt" của Peter Bourgon: https://peter.bourgon.org/blog/2019/05/20/generating-good-unique-ids.html
- Đặc tả KSUID: https://github.com/segmentio/ksuid/blob/master/README.md
Phản hồi
Nhấp vào thông báo phản hồi để bắt đầu gửi phản hồi về công cụ này
Công cụ liên quan
Khám phá thêm các công cụ có thể hữu ích cho quy trình làm việc của bạn