شناسههای منحصر به فرد جهانی (UUID) را برای برنامههای مختلف تولید کنید. UUIDهای نسخه 1 (مبتنی بر زمان) و نسخه 4 (تصادفی) را برای استفاده در سیستمهای توزیع شده، پایگاههای داده و بیشتر ایجاد کنید.
شناسه منحصر به فرد جهانی (UUID) یک عدد 128 بیتی است که برای شناسایی اطلاعات در سیستمهای کامپیوتری استفاده میشود. UUIDها توسط بنیاد نرمافزار باز (OSF) به عنوان بخشی از محیط محاسبات توزیعشده (DCE) استاندارد شدهاند. این شناساییکنندهها به گونهای طراحی شدهاند که در فضا و زمان منحصر به فرد باشند و این امر آنها را برای کاربردهای مختلف در سیستمهای توزیعشده و فراتر از آن ایدهآل میسازد.
این ابزار تولید UUID به شما امکان میدهد UUIDهای نسخه 1 (مبتنی بر زمان) و نسخه 4 (تصادفی) را ایجاد کنید. این شناساییکنندهها در سناریوهای مختلفی که نیاز به شناسایی منحصر به فرد دارند، مانند کلیدهای پایگاه داده، سیستمهای توزیعشده و پروتکلهای شبکه، مفید هستند.
UUID معمولاً به عنوان 32 رقم هگزادسیمال نمایش داده میشود که در پنج گروه جدا شده با خط تیره، به شکل 8-4-4-4-12 برای مجموع 36 کاراکتر (32 کاراکتر الفبایی عددی و 4 خط تیره) نمایش داده میشود. به عنوان مثال:
1550e8400-e29b-41d4-a716-446655440000
2
128 بیت UUID به زمینههای خاصی تقسیم میشود که هر کدام اطلاعات متفاوتی را بسته به نسخه UUID حمل میکنند:
در اینجا یک نمودار ساختار UUID را نشان میدهد:
چندین نسخه از UUIDها وجود دارد که هر کدام روش تولید خاص خود را دارند:
این ابزار بر تولید UUIDهای نسخه 1 و نسخه 4 تمرکز دارد.
UUIDهای نسخه 1 با استفاده از اجزای زیر تولید میشوند:
فرمول تولید UUID نسخه 1 میتواند به صورت زیر بیان شود:
1UUID = (timestamp * 2^64) + (clock_sequence * 2^48) + node
2
UUIDهای نسخه 4 با استفاده از یک تولیدکننده عدد تصادفی قوی از نظر رمزنگاری تولید میشوند. فرمول به سادگی عبارت است از:
1UUID = random_128_bit_number
2
با تنظیم بیتهای خاص برای نشان دادن نسخه (4) و نوع.
UUIDها کاربردهای زیادی در حوزههای مختلف علوم کامپیوتر و مهندسی نرمافزار دارند:
کلیدهای پایگاه داده: UUIDها اغلب به عنوان کلیدهای اصلی در پایگاههای داده، به ویژه در سیستمهای توزیعشده که چندین گره ممکن است به طور همزمان رکوردهایی تولید کنند، استفاده میشوند.
سیستمهای توزیعشده: در سیستمهای توزیعشده بزرگ، UUIDها به شناسایی منحصر به فرد منابع، تراکنشها یا رویدادها در چندین گره یا مرکز داده کمک میکنند.
آدرسدهی محتوا: UUIDها میتوانند برای ایجاد شناسههای منحصر به فرد برای محتوا در سیستمهای ذخیرهسازی با آدرسدهی محتوا استفاده شوند.
مدیریت جلسه: برنامههای وب اغلب از UUIDها برای مدیریت جلسات کاربری استفاده میکنند و اطمینان میدهند که هر جلسه دارای یک شناسه منحصر به فرد است.
شناسایی دستگاههای IoT: در برنامههای اینترنت اشیاء (IoT)، UUIDها میتوانند برای شناسایی منحصر به فرد دستگاههای فردی در یک شبکه استفاده شوند.
در حالی که UUIDها به طور گستردهای استفاده میشوند، روشهای جایگزینی برای تولید شناسههای منحصر به فرد وجود دارد:
شناسههای خودافزاینده: ساده و معمولاً در سیستمهای پایگاه داده تککاربره استفاده میشود، اما برای محیطهای توزیعشده مناسب نیست.
شناسههای مبتنی بر زمان: میتوانند برای دادههای زماندار مفید باشند اما ممکن است در سناریوهای با همزمانی بالا با مشکلات تکراری مواجه شوند.
شناسههای Snowflake: توسط توییتر توسعه یافتهاند، این شناسهها ترکیبی از زمان و شماره کارگر را برای تولید شناسههای منحصر به فرد در سیستمهای توزیعشده تولید میکنند.
ULID (شناسه جهانی منحصر به فرد و به صورت ترتیبی قابل مرتبسازی): یک جایگزین جدیدتر که هدف آن انسانیتر و قابل مرتبسازیتر از UUIDها است.
مفهوم UUIDها برای اولین بار در سیستم محاسبات شبکهای آپولو معرفی شد و سپس توسط بنیاد نرمافزار باز (OSF) به عنوان بخشی از محیط محاسبات توزیعشده (DCE) در دهه 1990 استاندارد شد. مشخصات اولیه در سال 1997 به عنوان ISO/IEC 11578:1996 منتشر شد و سپس در سال 2005 به عنوان بخشی از ISO/IEC 9834-8:2005 تجدید نظر شد.
مراحل کلیدی در تاریخ UUID:
با گذشت زمان، UUIDها به ابزاری ضروری در سیستمهای توزیعشده و طراحی پایگاه داده تبدیل شدهاند و پیادهسازیها و سازگاریهای مختلفی در زبانهای برنامهنویسی و پلتفرمهای مختلف دارند.
در اینجا مثالهایی از تولید UUIDها در زبانهای برنامهنویسی مختلف آورده شده است:
1import uuid
2
3## تولید UUID نسخه 4 (تصادفی)
4random_uuid = uuid.uuid4()
5print(f"UUID نسخه 4: {random_uuid}")
6
7## تولید UUID نسخه 1 (مبتنی بر زمان)
8time_based_uuid = uuid.uuid1()
9print(f"UUID نسخه 1: {time_based_uuid}")
10
1const { v1: uuidv1, v4: uuidv4 } = require('uuid');
2
3// تولید UUID نسخه 4 (تصادفی)
4const randomUuid = uuidv4();
5console.log(`UUID نسخه 4: ${randomUuid}`);
6
7// تولید UUID نسخه 1 (مبتنی بر زمان)
8const timeBasedUuid = uuidv1();
9console.log(`UUID نسخه 1: ${timeBasedUuid}`);
10
1import java.util.UUID;
2
3public class UuidGenerator {
4 public static void main(String[] args) {
5 // تولید UUID نسخه 4 (تصادفی)
6 UUID randomUuid = UUID.randomUUID();
7 System.out.println("UUID نسخه 4: " + randomUuid);
8
9 // تولید UUID نسخه 1 (مبتنی بر زمان)
10 UUID timeBasedUuid = UUID.fromString(new com.eaio.uuid.UUID().toString());
11 System.out.println("UUID نسخه 1: " + timeBasedUuid);
12 }
13}
14
1require 'securerandom'
2
3## تولید UUID نسخه 4 (تصادفی)
4random_uuid = SecureRandom.uuid
5puts "UUID نسخه 4: #{random_uuid}"
6
7## Ruby دارای یک روش داخلی برای UUIDهای نسخه 1 نیست
8## شما باید از یک جواهر مانند 'uuidtools' برای آن استفاده کنید
9
1<?php
2// تولید UUID نسخه 4 (تصادفی)
3$randomUuid = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
4 mt_rand(0, 0xffff), mt_rand(0, 0xffff),
5 mt_rand(0, 0xffff),
6 mt_rand(0, 0x0fff) | 0x4000,
7 mt_rand(0, 0x3fff) | 0x8000,
8 mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
9);
10echo "UUID نسخه 4: " . $randomUuid . "\n";
11
12// PHP دارای یک روش داخلی برای UUIDهای نسخه 1 نیست
13// شما باید از یک کتابخانه مانند 'ramsey/uuid' برای آن استفاده کنید
14?>
15
کشف ابزارهای بیشتری که ممکن است برای جریان کاری شما مفید باشند