تولید UUID v7
UUIDهای نسخه ۷ بسازید که بر اساس زمان ساخت مرتب میشوند؛ انتخابی ایدئال برای کلید اصلی پایگاهداده.
تولید UUID v7 مرتب بر اساس زمان
UUID v7 بهترین ویژگیهای دو دنیا را ترکیب میکند: مثل UUID تصادفی بدون هماهنگی یکتاست و مثل شناسه auto-increment بر اساس زمان ساخت مرتب میشود. به همین دلیل اکنون نسخهای است که بیشتر پایگاهدادهها و ORMها برای کلید اصلی توصیه میکنند.
این صفحه سازنده UUID را با نسخه ۷ انتخابشده باز میکند. ۴۸ بیت اول از ساعت دستگاه شما میآید و بقیه از مولد تصادفی امن مرورگر.
چرا ترتیب برای پایگاهداده مهم است
بیشتر پایگاهدادههای رابطهای کلیدهای اصلی را در B-tree ذخیره میکنند. کلید تصادفی v4 در هر درج جایی در میانه ایندکس مینشیند، صفحهها را مجبور به تقسیم (page split) میکند و ردیفهای مرتبط را روی دیسک پراکنده میکند. کلید v7 تقریباً همیشه از کلید قبلی بزرگتر است، پس ردیفهای جدید در انتها اضافه میشوند؛ درست مثل یک دنباله عدد صحیح. در جدولهایی با میلیونها ردیف، تفاوت در سرعت درج و اندازه ایندکس چشمگیر است.
مقایسه v4، v7 و ULID
| UUID v4 | UUID v7 | ULID | |
|---|---|---|---|
| قابل مرتبسازی بر اساس زمان | خیر | بله | بله |
| بیتهای تصادفی | ۱۲۲ | ۷۴ | ۸۰ |
| استاندارد | RFC 9562 | RFC 9562 | مشخصات جامعهمحور |
| جا شدن در ستون UUID | بله | بله | نیاز به تبدیل |
| فاش کردن زمان ساخت | خیر | بله | بله |
خواندن دوباره برچسب زمانی
یک UUID v7 را در inspector زیر ابزار جایگذاری کنید تا زمان درونش را رمزگشایی کند. این کار را دستی هم میتوانید انجام دهید: ۱۲ رقم هگز اول، بدون خط تیره، تعداد میلیثانیهها از سال ۱۹۷۰ است. برای 01926f3a-7c2b-7d4e-… این مقدار 0x01926f3a7c2b = 1728442956843 است، یعنی ۹ اکتبر ۲۰۲۴ ساعت ۰۳:۰۲:۳۶٫۸۴۳ به وقت UTC.
UUID v7 در کد
- PostgreSQL 18+:
uuidv7() - Python 3.14+:
uuid.uuid7() - Java: کتابخانه
uuid-creator، باUuidCreator.getTimeOrderedEpoch() - Node.js: بسته
uuid، باimport { v7 } from 'uuid' - .NET 9+:
Guid.CreateVersion7()
وقتی ترتیب زمانی اهمیتی ندارد، UUID v4 اطلاعات کمتری فاش میکند. اگر قالببندی به سبک مایکروسافت لازم دارید، تولید GUID را ببینید.