Whiz Tools

Penjana UUID

UUID yang Dijana

Struktur UUID
Masa rendah

Penjana UUID

Pengenalan

Pengenal Unik Secara Universal (UUID) adalah nombor 128-bit yang digunakan untuk mengenal pasti maklumat dalam sistem komputer. UUID telah distandardkan oleh Open Software Foundation (OSF) sebagai sebahagian daripada Persekitaran Pengkomputeran Teragih (DCE). Pengenal ini direka untuk menjadi unik merentasi ruang dan masa, menjadikannya ideal untuk pelbagai aplikasi dalam sistem teragih dan lebih lagi.

Alat penjana UUID ini membolehkan anda mencipta UUID versi 1 (berdasarkan masa) dan versi 4 (rawak). Pengenal ini berguna dalam pelbagai senario di mana pengenalan unik diperlukan, seperti kunci pangkalan data, sistem teragih, dan protokol rangkaian.

Cara UUID Berfungsi

Struktur UUID

UUID biasanya diwakili sebagai 32 digit heksadesimal, dipaparkan dalam lima kumpulan yang dipisahkan oleh tanda hubung, dalam bentuk 8-4-4-4-12 untuk jumlah 36 watak (32 watak alfanumerik dan 4 tanda hubung). Contohnya:

550e8400-e29b-41d4-a716-446655440000

128 bit UUID dibahagikan kepada bidang tertentu, masing-masing membawa maklumat yang berbeza bergantung kepada versi UUID:

  • 32 bit untuk bidang time_low
  • 16 bit untuk bidang time_mid
  • 16 bit untuk bidang time_hi_and_version
  • 8 bit untuk bidang clock_seq_hi_and_reserved
  • 8 bit untuk bidang clock_seq_low
  • 48 bit untuk bidang node

Berikut adalah diagram yang menggambarkan struktur UUID:

A B C D E F A: time_low (32 bit) B: time_mid (16 bit) C: time_hi_and_version (16 bit) D: clock_seq_hi_and_reserved (8 bit) E: clock_seq_low (8 bit) F: node (48 bit)

Versi UUID

Terdapat beberapa versi UUID, masing-masing dengan kaedah penjanaan tersendiri:

  1. Versi 1 (Berdasarkan masa): Menggunakan cap waktu semasa dan alamat MAC komputer.
  2. Versi 2 (Keselamatan DCE): Serupa dengan versi 1, tetapi termasuk pengenalan domain tempatan.
  3. Versi 3 (Berdasarkan nama, MD5): Dihasilkan dengan menghash pengenalan ruang nama dan nama.
  4. Versi 4 (Rawak): Dihasilkan menggunakan nombor rawak atau pseudo-rawak.
  5. Versi 5 (Berdasarkan nama, SHA-1): Serupa dengan versi 3, tetapi menggunakan penghashan SHA-1.

Alat ini memberi tumpuan kepada penjanaan UUID Versi 1 dan Versi 4.

Formula

Penjanaan UUID Versi 1

UUID Versi 1 dijana menggunakan komponen berikut:

  1. Cap waktu: Nilai 60-bit yang mewakili bilangan selang 100-nanodetik sejak 15 Oktober 1582 (tarikh reformasi Gregorian kepada kalendar Kristian).
  2. Urutan jam: Nilai 14-bit yang digunakan untuk mengelakkan duplikasi sekiranya jam diset semula ke belakang.
  3. Node: Nilai 48-bit, biasanya diperoleh daripada alamat MAC komputer.

Formula untuk menjana UUID Versi 1 boleh dinyatakan sebagai:

UUID = (timestamp * 2^64) + (clock_sequence * 2^48) + node

Penjanaan UUID Versi 4

UUID Versi 4 dijana menggunakan penjana nombor rawak yang kuat secara kriptografi. Formula adalah semata-mata:

UUID = random_128_bit_number

Dengan bit tertentu ditetapkan untuk menunjukkan versi (4) dan varian.

Kes Penggunaan

UUID mempunyai pelbagai aplikasi di pelbagai domain sains komputer dan kejuruteraan perisian:

  1. Kunci Pangkalan Data: UUID sering digunakan sebagai kunci utama dalam pangkalan data, terutamanya dalam sistem teragih di mana beberapa nod mungkin menghasilkan rekod secara serentak.

  2. Sistem Teragih: Dalam sistem teragih berskala besar, UUID membantu dalam mengenal pasti sumber, transaksi, atau peristiwa dengan unik merentasi pelbagai nod atau pusat data.

  3. Pengalamatan Kandungan: UUID boleh digunakan untuk mencipta pengenalan unik untuk kandungan dalam sistem penyimpanan yang boleh diakses melalui kandungan.

  4. Pengurusan Sesi: Aplikasi web sering menggunakan UUID untuk mengurus sesi pengguna, memastikan setiap sesi mempunyai pengenalan unik.

  5. Pengenalan Peranti IoT: Dalam aplikasi Internet of Things (IoT), UUID boleh digunakan untuk mengenal pasti peranti individu dalam rangkaian dengan unik.

Alternatif

Walaupun UUID digunakan secara meluas, terdapat pendekatan alternatif untuk menjana pengenalan unik:

  1. ID auto-bertambah: Mudah dan biasa digunakan dalam sistem pangkalan data tunggal, tetapi tidak sesuai untuk persekitaran teragih.

  2. ID berdasarkan cap waktu: Boleh berguna untuk data yang diatur mengikut masa tetapi mungkin menghadapi isu perlanggaran dalam senario keserentakan tinggi.

  3. ID Snowflake: Dibangunkan oleh Twitter, ID ini menggabungkan cap waktu dan nombor pekerja untuk menjana ID unik dalam sistem teragih.

  4. ULID (Pengenal Unik Secara Universal yang Boleh Diatur Secara Lexicographically): Alternatif yang lebih baru yang bertujuan untuk lebih mesra manusia dan boleh diatur berbanding UUID.

Sejarah

Konsep UUID pertama kali diperkenalkan dalam Sistem Pengkomputeran Rangkaian Apollo dan kemudiannya distandardkan oleh Open Software Foundation (OSF) sebagai sebahagian daripada Persekitaran Pengkomputeran Teragih (DCE) pada tahun 1990-an. Spesifikasi awal diterbitkan pada tahun 1997 sebagai ISO/IEC 11578:1996 dan kemudiannya disemak pada tahun 2005 sebagai sebahagian daripada ISO/IEC 9834-8:2005.

Pencapaian utama dalam sejarah UUID:

  • 1980-an: Apollo Computer membangunkan konsep UUID untuk Sistem Pengkomputeran Rangkaian mereka.
  • 1997: Spesifikasi UUID pertama diterbitkan sebagai ISO/IEC 11578:1996.
  • 2005: Spesifikasi UUID disemak dan diterbitkan sebagai sebahagian daripada ISO/IEC 9834-8:2005.
  • 2009: RFC 4122 mendefinisikan format UUID dan algoritma penjanaan yang digunakan hari ini.

Dari semasa ke semasa, UUID telah menjadi alat penting dalam sistem teragih dan reka bentuk pangkalan data, dengan pelbagai pelaksanaan dan penyesuaian di pelbagai bahasa pengaturcaraan dan platform.

Contoh Kod

Berikut adalah contoh menjana UUID dalam pelbagai bahasa pengaturcaraan:

import uuid

## Hasilkan UUID Versi 4 (rawak)
random_uuid = uuid.uuid4()
print(f"UUID Versi 4: {random_uuid}")

## Hasilkan UUID Versi 1 (berdasarkan masa)
time_based_uuid = uuid.uuid1()
print(f"UUID Versi 1: {time_based_uuid}")
const { v1: uuidv1, v4: uuidv4 } = require('uuid');

// Hasilkan UUID Versi 4 (rawak)
const randomUuid = uuidv4();
console.log(`UUID Versi 4: ${randomUuid}`);

// Hasilkan UUID Versi 1 (berdasarkan masa)
const timeBasedUuid = uuidv1();
console.log(`UUID Versi 1: ${timeBasedUuid}`);
import java.util.UUID;

public class UuidGenerator {
    public static void main(String[] args) {
        // Hasilkan UUID Versi 4 (rawak)
        UUID randomUuid = UUID.randomUUID();
        System.out.println("UUID Versi 4: " + randomUuid);

        // Hasilkan UUID Versi 1 (berdasarkan masa)
        UUID timeBasedUuid = UUID.fromString(new com.eaio.uuid.UUID().toString());
        System.out.println("UUID Versi 1: " + timeBasedUuid);
    }
}
require 'securerandom'

## Hasilkan UUID Versi 4 (rawak)
random_uuid = SecureRandom.uuid
puts "UUID Versi 4: #{random_uuid}"

## Ruby tidak mempunyai kaedah terbina dalam untuk UUID Versi 1
## Anda perlu menggunakan gem seperti 'uuidtools' untuk itu
<?php
// Hasilkan UUID Versi 4 (rawak)
$randomUuid = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
    mt_rand(0, 0xffff), mt_rand(0, 0xffff),
    mt_rand(0, 0xffff),
    mt_rand(0, 0x0fff) | 0x4000,
    mt_rand(0, 0x3fff) | 0x8000,
    mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
);
echo "UUID Versi 4: " . $randomUuid . "\n";

// PHP tidak mempunyai kaedah terbina dalam untuk UUID Versi 1
// Anda perlu menggunakan perpustakaan seperti 'ramsey/uuid' untuk itu
?>

Rujukan

  1. Leach, P., Mealling, M., & Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://tools.ietf.org/html/rfc4122
  2. International Organization for Standardization. (2005). Information technology – Open Systems Interconnection – Procedures for the operation of OSI Registration Authorities: Generation and registration of Universally Unique Identifiers (UUIDs) and their use as ASN.1 Object Identifier components. ISO/IEC 9834-8:2005. https://www.iso.org/standard/62795.html
  3. Pengenal unik secara universal. (2023). Dalam Wikipedia. https://en.wikipedia.org/wiki/Universally_unique_identifier
  4. ID Snowflake. (2023). Dalam Wikipedia. https://en.wikipedia.org/wiki/Snowflake_ID
  5. Spesifikasi ULID. (n.d.). GitHub. https://github.com/ulid/spec
Feedback