15 पॉइंट द्वारा GN⁺ 2025-05-22 | 4 टिप्पणियां | WhatsApp पर शेयर करें
  • PostgreSQL 18 में UUIDv7 का built-in support होगा, जो sortable और index-friendly unique identifiers प्रदान करता है
  • UUIDv7, मौजूदा UUID की distributed environments में uniqueness और security को बनाए रखते हुए, btree index के लिए अनुकूल time-based sorting structure अपनाता है
  • मौजूदा UUID उपयोग की कमियों, यानी sort न हो पाना, index fragmentation, memory size, में से पहले दो समस्याओं को हल करके time-order sorting और insertion optimization संभव बनाता है
  • PostgreSQL 18 में uuidv7() फ़ंक्शन से UUID बनाया जा सकेगा, और timestamp extraction तथा custom time input फीचर भी मिलेंगे
  • अब UUID को primary key के रूप में इस्तेमाल करने में हिचकिचाने की वजहें काफी हद तक दूर हो जाती हैं, इसलिए यह distributed systems और multi-tenant environments के लिए अधिक उपयुक्त विकल्प बनता है

PostgreSQL 18

  • PostgreSQL 18 का beta version जारी हो चुका है, और सितंबर में आधिकारिक release को लक्ष्य बनाकर testing चल रही है
  • मुख्य फीचर:
    • Async I/O: io_uring आधारित asynchronous input/output से sequence scan और vacuum की speed 2~3 गुना बेहतर
    • multi-column btree indexes में Skip scan, OR/IN queries optimization
    • upgrades के बीच planner statistics को बनाए रखना
    • UUIDv7 function
    • virtual generated columns, OAuth login, EXPLAIN में I/O/CPU/WAL जानकारी जोड़ना आदि

UUID के फायदे

  • distributed environments में unique ID generation संभव
  • अनुमान लगाना कठिन public identifiers के रूप में बेहतर security
  • client पर सीधे ID generation संभव होने से server communication कम

मौजूदा UUID की कमियां

  • sort नहीं किया जा सकता
  • index locality की कमी के कारण insertion performance में गिरावट
  • 128-bit size के कारण overhead

UUIDv7 का समाधान

  • RFC 9562 (मई 2024 में घोषित) के अनुसार पेश किया गया नया UUID version
  • शुरुआती 48 bits में Unix Epoch आधारित timestamp, और बाकी में random values + counter का संयोजन
  • समय क्रम में sort किया जा सकता है, और index insertion efficiency बढ़ती है
  • UUIDv6 backward compatibility के लिए है, UUIDv8 experiment/vendor extensions के लिए
  • UUIDv7 ही व्यवहारिक रूप से सबसे अर्थपूर्ण नया standard है

PostgreSQL 18 में UUIDv7 का उपयोग

  • uuidv7() फ़ंक्शन से वर्तमान समय आधारित UUID generation
  • uuidv7(INTERVAL) के जरिए मनचाहा time offset लागू किया जा सकता है
  • uuid_extract_version(), uuid_extract_timestamp() फ़ंक्शनों से UUID version और creation time निकाला जा सकता है
  • उदाहरण:
    CREATE TABLE test (  
        id uuid DEFAULT uuidv7() PRIMARY KEY,  
        name text  
    );  
    
    INSERT INTO test (name) VALUES ('foo');  
    INSERT INTO test (name) VALUES ('bar');  
    INSERT INTO test (id, name) VALUES (uuidv7(INTERVAL '-1 hour'), 'oldest');  
    
    SELECT uuid_extract_timestamp(id), name FROM test ORDER BY id;  
    
  • uuidv4() को gen_random_uuid() के alias के रूप में जोड़ा गया है

निष्कर्ष और सिफारिशें

  • UUIDv7 उन उपयोगकर्ताओं के लिए उपयुक्त है जिन्हें मौजूदा UUID के साथ performance issues का सामना करना पड़ा है
  • sorting और index performance सुनिश्चित करते हुए भी UUID के फायदे बनाए रखता है
  • PostgreSQL 18 beta में अभी तुरंत test किया जा सकता है
  • distributed systems, multi-tenant apps, और serverless environments में ID generation के लिए उपयुक्त विकल्प

“UUIDv7 एक शांत लेकिन शक्तिशाली feature addition है, जो Postgres में UUID को primary key के रूप में इस्तेमाल करने पर फिर से विचार करने के लिए प्रेरित करता है”

4 टिप्पणियां

 
jaylee 2025-05-23

मैं इसकी जगह Prisma + ULID का इस्तेमाल कर रहा हूँ। यह काफ़ी छोटा है और बेहतर लगता है।

 
ssssut 2025-05-22

मैं uuid_generate_v7() जैसी फ़ंक्शन बनाकर इस्तेमाल कर रहा था, तो यह वाकई अच्छी खबर है।

 
stomx 2025-05-22

ओ!!

 
halfenif 2025-05-22

ओ...!