13 पॉइंट द्वारा GN⁺ 2023-10-03 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • Buildkite ने PK के रूप में नया UUIDv7 मानक अपनाया, जिससे पहले का sequential PK और UUID secondary key सिस्टम बदला गया
  • UUIDs (Universally Unique Identifiers) ऐसे unique identifiers हैं जिन्हें स्वतंत्र रूप से जनरेट किया जा सकता है, और ये distributed systems तथा databases में व्यापक रूप से उपयोग होते हैं
  • UUIDs, sequential integer identifiers की तुलना में कई फायदे देते हैं, जैसे unpredictability, internal information के sensitive details को उजागर होने से रोकना, और एक अतिरिक्त defense layer प्रदान करना
  • हालांकि, standard non-time-ordered UUIDs की randomness database performance समस्याएँ पैदा कर सकती है
  • इसे हल करने के लिए, Buildkite ने time-ordered UUIDv4-compatible UUID पर प्रयोग किया, जिससे उसके मुख्य database का Write Ahead Log (WAL) अनुपात 50% कम हुआ
  • UUID version 7 (UUIDv7) सबसे महत्वपूर्ण 48 bits में Unix timestamp को milliseconds में encode करता है, और बाकी 74 bits random रूप से जनरेट होते हैं
  • Buildkite ने तय किया कि सभी नई tables की primary key के रूप में UUIDv7 का उपयोग किया जाएगा, जिससे identifier generation के लिए coordination की आवश्यकता खत्म हुई और application logic सरल हुआ
  • Instagram के ShardingID implementation और Shopify के composite primary key implementation जैसे विकल्पों पर विचार किया गया, लेकिन टीम ने UUIDv7 चुना
  • UUIDv7 में migration के लिए UUID की 128-bit लंबाई के कारण अतिरिक्त storage space चाहिए, लेकिन database row के बाकी storage की तुलना में यह बहुत कम है
  • फिलहाल वे अपने सबसे बड़े Postgres database को shard कर रहे हैं, और जरूरत पड़ने पर भविष्य में identifiers में shard number शामिल करने के लिए UUIDv8 का उपयोग संभव है

1 टिप्पणियां

 
GN⁺ 2023-10-03
Hacker News राय
  • UUIDv7 क्रमबद्ध keys के कारण आंतरिक distributed systems के लिए फायदेमंद है, लेकिन संभावित security issues की वजह से यह public identifier के रूप में उपयुक्त नहीं हो सकता।
  • यह दावा किया जाता है कि random IDs performance के लिए अच्छे नहीं होते, लेकिन वास्तव में वे single node hotspots को रोकते हैं, इसलिए distributed storage systems के लिए अधिक बेहतर होते हैं।
  • identifiers की बदलती आवश्यकताओं और वांछित गुणों के कारण UUID के कई versions मौजूद हैं।
  • UUIDv7 efficient indexing के लिए sequential primary key के फायदों को external use के लिए UUID secondary key के साथ जोड़ता है।
  • UUIDv7 की एक संभावित समस्या यह है कि users ID से creation time निकाल सकते हैं।
  • PostgreSQL के लिए UUID v7 function को open source के रूप में जारी किया गया है, जो batch inserts की speed improvement जैसे फायदे देता है।
  • UUIDv7 को Postgres uuid type के साथ इस्तेमाल किया जा सकता है, जो सही length वाले किसी भी data को स्वीकार करता है।
  • कुछ लोग data size और creation date की जानकारी छिपाने के लिए sequential 64-bit primary key और external use के लिए अतिरिक्त random 64-bit key को प्राथमिकता देते हैं।
  • UUID उन कई अलग-अलग sources से keys generate करने में उपयोगी हैं जिन्हें बाद में merge करना पड़ता है।
  • GUIDs/UUIDs को "validate" करने की आवश्यकता पर बहस है। इन्हें अक्सर opaque identifiers की तरह माना जाता है।
  • UUIDv7 और ULIDs के बीच चयन विशेष आवश्यकताओं पर निर्भर करता है, और ULIDs UUIDs की metadata उपयोगिता की तुलना में 6 bits अतिरिक्त randomness प्रदान करते हैं।