ตัวสร้าง Nano ID ที่ปลอดภัยและไม่ซ้ำกัน
สร้างตัวระบุที่ปลอดภัย ไม่ซ้ำกัน และเหมาะสำหรับ URL โดยใช้ Nano ID ปรับแต่งความยาวและชุดตัวอักษรสำหรับการใช้งานต่างๆ ในการพัฒนาเว็บ ระบบกระจาย และการจัดการฐานข้อมูล
ตัวสร้าง Nano ID
Nano ID ที่สร้างขึ้น
การแสดงผล
เอกสารประกอบ
Nano ID Generator
Introduction
Nano ID คือเครื่องมือสร้าง ID ที่เป็นสตริงที่ไม่ซ้ำกัน ขนาดเล็ก ปลอดภัย และเหมาะสำหรับ URL ถูกออกแบบมาเพื่อสร้างตัวระบุที่กะทัดรัด ไม่เป็นลำดับ และมีโอกาสชนกันต่ำสำหรับแอปพลิเคชันต่างๆ ในระบบที่กระจาย เครื่องมือนี้ช่วยให้คุณสร้าง Nano IDs ด้วยความยาวและชุดตัวอักษรที่ปรับแต่งได้
How Nano IDs Work
Nano IDs ถูกสร้างขึ้นโดยใช้ตัวสร้างหมายเลขสุ่มที่มีความปลอดภัยทางการเข้ารหัสและอัลฟาเบตที่ปรับแต่งได้ การใช้งานเริ่มต้นจะใช้:
- อัลฟาเบต 64 ตัวอักษร (A-Za-z0-9_-) ซึ่งเหมาะสำหรับ URL
- ความยาว 21 ตัวอักษร
การรวมกันนี้ให้ความสมดุลที่ดีระหว่างความยาว ID และความน่าจะเป็นของการชนกัน
สูตรในการสร้าง Nano ID คือ:
1id = random(alphabet, size)
2
โดยที่ random
คือฟังก์ชันที่เลือกจำนวน size
ของตัวอักษรจาก alphabet
โดยใช้ตัวสร้างหมายเลขสุ่มที่มีความปลอดภัยทางการเข้ารหัส
Composition of a Nano ID
Customization Options
-
Length: คุณสามารถปรับความยาวของ Nano ID ที่สร้างขึ้นได้ ความยาวเริ่มต้นคือ 21 ตัวอักษร แต่สามารถเพิ่มขึ้นเพื่อความไม่ซ้ำกันที่สูงขึ้นหรือลดลงเพื่อให้ ID สั้นลง
-
Alphabet: ชุดตัวอักษรที่ใช้ในการสร้าง ID สามารถปรับแต่งได้ ตัวเลือก ได้แก่:
- ตัวอักษรผสม (เริ่มต้น): A-Za-z0-9_-
- ตัวเลข: 0-9
- ตัวอักษร: A-Za-z
- กำหนดเอง: ชุดตัวอักษรใดๆ ที่คุณกำหนด
Security and Uniqueness
Nano IDs ถูกออกแบบมาให้:
- ไม่สามารถคาดเดาได้: ใช้ตัวสร้างสุ่มที่มีความปลอดภัยทางการเข้ารหัส
- ไม่ซ้ำกัน: โอกาสในการชนกันต่ำมากเมื่อใช้ความยาวที่เหมาะสม
ความน่าจะเป็นของการชนกันขึ้นอยู่กับความยาว ID และจำนวน ID ที่สร้างขึ้น ความน่าจะเป็นของการชนกันสามารถคำนวณได้โดยใช้สูตร:
1P(collision) = 1 - e^(-k^2 / (2n))
2
โดยที่:
- k คือจำนวน ID ที่สร้างขึ้น
- n คือจำนวน ID ที่เป็นไปได้ (ความยาวของอัลฟาเบต ^ ความยาวของ Nano ID)
ตัวอย่างเช่น ด้วยการตั้งค่าที่เริ่มต้น (อัลฟาเบต 64 ตัวอักษร, ความยาว 21 ตัวอักษร) คุณต้องสร้าง ID ประมาณ ~1.36e36 ตัวเพื่อให้มีโอกาส 1% ของการชนกันอย่างน้อยหนึ่งครั้ง เพื่อให้เห็นภาพ:
- การสร้าง ID 1 ล้านตัวต่อวินาที จะใช้เวลาประมาณ ~433 ปีเพื่อให้มีโอกาส 1% ของการชนกัน
- คุณมีโอกาสมากกว่าที่จะถูกรางวัลลอตเตอรี่หลายครั้งมากกว่าที่จะพบการชนกันของ Nano ID ในแอปพลิเคชันที่ใช้จริงส่วนใหญ่
Use Cases
Nano IDs เหมาะสำหรับแอปพลิเคชันหลายประเภท รวมถึง:
- ID บันทึกในฐานข้อมูล
- URL ย่อ
- ID เซสชันในแอปพลิเคชันเว็บ
- ชื่อไฟล์ชั่วคราว
- ระบบที่กระจายซึ่งการประสานงานเป็นเรื่องยาก
Comparison with Other ID Methods
Method | Pros | Cons |
---|---|---|
Nano ID | สั้น, เหมาะสำหรับ URL, ปรับแต่งได้ | ไม่เป็นลำดับ |
UUID | มาตรฐาน, โอกาสชนกันต่ำมาก | ยาว (36 ตัวอักษร), ไม่เหมาะสำหรับ URL |
Auto-increment | ง่าย, เป็นลำดับ | ไม่เหมาะสำหรับระบบที่กระจาย, คาดเดาได้ |
ULID | จัดเรียงตามเวลา, เหมาะสำหรับ URL | ยาวกว่า Nano ID (26 ตัวอักษร) |
KSUID | จัดเรียงตามเวลา, เหมาะสำหรับ URL | ยาวกว่า Nano ID (27 ตัวอักษร) |
ObjectID | รวมเวลาสร้างและตัวระบุเครื่อง | ไม่สุ่มเท่าที่ควร, ยาว 12 ไบต์ |
History and Development
Nano ID ถูกสร้างขึ้นโดย Andrey Sitnik ในปี 2017 เป็นทางเลือกที่กะทัดรัดกว่า UUID ถูกออกแบบมาให้ใช้งานง่ายในหลายภาษาโปรแกรมและสภาพแวดล้อม โดยมุ่งเน้นไปที่แอปพลิเคชันเว็บ
Code Examples
นี่คือตัวอย่างการสร้าง Nano IDs ในภาษาการเขียนโปรแกรมต่างๆ:
1// JavaScript
2import { nanoid } from 'nanoid';
3const id = nanoid(); // => "V1StGXR8_Z5jdHi6B-myT"
4
1## Python
2import nanoid
3id = nanoid.generate() # => "kqTSU2WGQPJzuWxfifTRX"
4
1## Ruby
2require 'nanoid'
3id = Nanoid.generate # => "7nj0iuNXoE0GnQNuH3b7v"
4
1// Java
2import com.aventrix.jnanoid.jnanoid.NanoIdUtils;
3String id = NanoIdUtils.randomNanoId(); // => "ku-gFr4Zx9QpfvLtO_8LH"
4
1// C#
2using Nanoid;
3var id = Nanoid.Generate(); // => "xGx2iKPNOEpGQBgJKU-Ow"
4
1// PHP
2<?php
3use Hidehalo\Nanoid\Client;
4$client = new Client();
5$id = $client->generateId(); // => "V1StGXR8_Z5jdHi6B-myT"
6?>
7
1// Rust
2use nanoid::nanoid;
3let id = nanoid!(); // => "V1StGXR8_Z5jdHi6B-myT"
4
1// Go
2import "github.com/matoous/go-nanoid/v2"
3id, err := gonanoid.New() // => "V1StGXR8_Z5jdHi6B-myT"
4
1// Swift
2import NanoID
3let id = NanoID.new() // => "V1StGXR8_Z5jdHi6B-myT"
4
Best Practices
- เลือกความยาวที่เหมาะสมตามความต้องการความไม่ซ้ำกันของคุณ
- ใช้ตัวสร้างหมายเลขสุ่มที่มีความปลอดภัยทางการเข้ารหัส
- หากใช้ชุดตัวอักษรที่กำหนดเอง ให้แน่ใจว่ามีความหลากหลายเพียงพอ
- เก็บ Nano IDs เป็นสตริง ไม่ใช่จำนวนเต็มในฐานข้อมูล
- ใช้ดัชนีในคอลัมน์ Nano ID เพื่อการค้นหาที่มีประสิทธิภาพ
Limitations and Considerations
- Nano IDs ไม่เป็นลำดับ ซึ่งอาจส่งผลต่อประสิทธิภาพของฐานข้อมูลในบางกรณี
- พวกมันไม่สามารถอ่านได้โดยมนุษย์หรือจัดเรียงตามเวลาที่สร้าง
- ชุดตัวอักษรที่กำหนดเองอาจส่งผลต่อความน่าจะเป็นของการชนกันและควรเลือกอย่างระมัดระวัง
Implementing a Nano ID Generator in Web Applications
ในการใช้งาน Nano ID generator ในแอปพลิเคชันเว็บ:
- ติดตั้งไลบรารี Nano ID สำหรับภาษาที่คุณใช้ในฝั่งเซิร์ฟเวอร์
- สร้าง API endpoint ที่สร้างและส่งคืน Nano ID
- ใช้ JavaScript ฝั่งไคลเอ็นต์เพื่อเรียก API เมื่อจำเป็น
ตัวอย่างการใช้งาน Express.js:
1const express = require('express');
2const { nanoid } = require('nanoid');
3
4const app = express();
5
6app.get('/generate-id', (req, res) => {
7 const id = nanoid();
8 res.json({ id });
9});
10
11app.listen(3000, () => console.log('Server running on port 3000'));
12
Performance Implications
การสร้าง Nano ID โดยทั่วไปจะรวดเร็วมาก บนคอมพิวเตอร์ทั่วไป สามารถสร้าง ID ได้หลายล้านตัวต่อวินาที อย่างไรก็ตาม ให้พิจารณาดังนี้:
- ความเร็วในการสร้างอาจแตกต่างกันไปขึ้นอยู่กับตัวสร้างหมายเลขสุ่มที่ใช้
- ชุดตัวอักษรที่กำหนดเองหรือความยาวที่ยาวขึ้นอาจส่งผลกระทบต่อประสิทธิภาพเล็กน้อย
- ในระบบที่มีโหลดสูง ให้พิจารณาการสร้าง ID เป็นชุด
Collision Probability and Mitigation
เพื่อลดความเสี่ยงของการชนกัน:
- เพิ่มความยาวของ Nano ID สำหรับความต้องการความไม่ซ้ำกันที่สูงขึ้น
- ใช้การตรวจสอบการชนกันในตรรกะของแอปพลิเคชันของคุณ
- ใช้ชุดตัวอักษรที่ใหญ่ขึ้นหากเป็นไปได้
Storing and Indexing Nano IDs in Databases
เมื่อทำงานกับ Nano IDs ในฐานข้อมูล:
- เก็บเป็น
VARCHAR
หรือประเภทสตริงที่เทียบเท่า - ใช้ความยาวเต็มของ Nano ID เพื่อให้แน่ใจว่ามีความไม่ซ้ำกัน
- สร้างดัชนีในคอลัมน์ Nano ID เพื่อการค้นหาที่เร็วขึ้น
- พิจารณาใช้ข้อจำกัดเฉพาะเพื่อป้องกันการซ้ำซ้อนที่ระดับฐานข้อมูล
ตัวอย่าง SQL สำหรับการสร้างตารางที่มี Nano ID:
1CREATE TABLE users (
2 id VARCHAR(21) PRIMARY KEY,
3 name VARCHAR(100),
4 email VARCHAR(100)
5);
6
7CREATE INDEX idx_users_id ON users (id);
8
โดยการปฏิบัติตามแนวทางเหล่านี้และเข้าใจลักษณะของ Nano IDs คุณสามารถนำไปใช้และใช้งานได้อย่างมีประสิทธิภาพในแอปพลิเคชันของคุณเพื่อสร้างตัวระบุที่ไม่ซ้ำกันและกะทัดรัด
References
- "Nano ID." GitHub, https://github.com/ai/nanoid. Accessed 2 Aug. 2024.
- "UUID." Wikipedia, Wikimedia Foundation, https://en.wikipedia.org/wiki/Universally_unique_identifier. Accessed 2 Aug. 2024.
- "Collision probability calculator." Nano ID Collision Calculator, https://zelark.github.io/nano-id-cc/. Accessed 2 Aug. 2024.
- "ULID Spec." GitHub, https://github.com/ulid/spec. Accessed 2 Aug. 2024.
- "KSUID: K-Sortable Globally Unique IDs." GitHub, https://github.com/segmentio/ksuid. Accessed 2 Aug. 2024.
- "ObjectID." MongoDB Manual, https://docs.mongodb.com/manual/reference/method/ObjectId/. Accessed 2 Aug. 2024.
ข้อเสนอแนะแสดงความคิดเห็น
คลิกที่ข้อเสนอแนะแสดงความคิดเห็นเพื่อเริ่มให้ข้อเสนอแนะแก่เครื่องมือนี้
เครื่องมือที่เกี่ยวข้อง
ค้นพบเครื่องมือเพิ่มเติมที่อาจมีประโยชน์สำหรับการทำงานของคุณ