डेवलपर टूल · UUID जनरेटर
ULID, स्नोफ्लेक, KSUID और UUIDv7: क्रमबद्ध ID की तुलना
· पेजभूमि
uuid क्रिप्टोग्राफी ब्राउज़र-एपिस
रैंडम UUID निर्माण समय के अनुसार क्रमबद्ध नहीं होते हैं, इसलिए कई प्रारूप पहले टाइमस्टैम्प डालते हैं। यह पोस्ट लेआउट, आकार, एकरसता और अनुकूलता पर ULID, स्नोफ्लेक, KSUID और UUIDv7 की तुलना करती है।
रैंडम ID और सूचकांक जो उनसे नफरत करता है - वह समस्या जिसे समय-आदेशित पहचानकर्ता हल करते हैं
जैसे ही नए रिकॉर्ड आते हैं, रैंडम v4 UUID बी-ट्री प्राथमिक कुंजी में सम्मिलन बिंदुओं को बिखेर देते हैं, जिससे पेज विभाजन और पुनर्गठन होता है। यादृच्छिक स्थिति में सम्मिलन लेखन प्रदर्शन को ख़राब करता है और डिस्क विखंडन को महत्वपूर्ण रूप से बढ़ाता है। उच्च-थ्रूपुट डेटाबेस इस लागत को सहन करते हैं - वास्तव में स्वतंत्र, असंगठित पहचानकर्ताओं की कीमत - लेकिन लागत वास्तविक है। यदि आपको निर्माण समय के अनुसार क्रमबद्ध करने के लिए UUID की आवश्यकता है, तो आप टाइमस्टैम्प उपसर्ग जोड़कर सूचकांक विशेषताओं में नाटकीय रूप से सुधार कर सकते हैं। कई प्रारूप सामने आए हैं: ULID, स्नोफ्लेक, KSUID, और RFC 9562 v7। प्रत्येक आकार में अलग-अलग ट्रेडऑफ़ बनाता है (26 वर्ण से 128 bits), टाइमस्टैम्प परिशुद्धता (सेकंड से नैनोसेकंड), UUID संगतता, और क्या ID जनरेटर समन्वय के लिए केंद्रीकरण की आवश्यकता होती है। डेटाबेस बेंचमार्क दर्शाते हैं कि प्रविष्टि प्रदर्शन में उल्लेखनीय सुधार हुआ है।
ULID - एक 48-बिट मिलीसेकंड टाइमस्टैम्प प्लस 80 यादृच्छिक बिट्स 26 क्रॉकफोर्ड Base32 वर्णों में, एक मोनोटोनिक विकल्प के साथ
ULID (सार्वभौमिक रूप से अद्वितीय लेक्सिकोग्राफ़िक रूप से क्रमबद्ध पहचानकर्ता) क्रॉकफ़ोर्ड Base32 के 26 वर्णों में 48-बिट मिलीसेकंड टाइमस्टैम्प और 80-बिट यादृच्छिक पेलोड को एन्कोड करता है। पाठ प्रतिनिधित्व शब्दकोषीय क्रम में सही ढंग से क्रमबद्ध होता है, जिससे यूएलID उन प्रणालियों के लिए उपयुक्त हो जाता है जहां टाइमस्टैम्प ऑर्डरिंग और पठनीयता मायने रखती है - लॉग प्रोसेसिंग, वितरित ट्रेसिंग, माइक्रोसर्विसेज जहां पहचानकर्ताओं को मानव-सामना वाले आउटपुट में आसानी से पढ़ने योग्य होने की आवश्यकता होती है। ULID एक मोनोटोनिक संस्करण प्रदान करता है जहां एक ही मिलीसेकंड के भीतर उत्पन्न कई पहचानकर्ता दोहराने के बजाय यादृच्छिक भाग को बढ़ाते हैं, जिससे यह सुनिश्चित होता है कि तेजी से ID फटने से भी सख्त पीढ़ी क्रम बना रहता है। ट्रेडऑफ़ यह है कि ULID एक UUID नहीं है: यह एन्कोडिंग रूपांतरण के बिना मानक 128-बिट UUID डेटाबेस कॉलम में फिट नहीं होता है। ULID परिशुद्धता लगभग 8925 वर्षों को कवर करती है।
स्नोफ्लेक - टाइमस्टैम्प से 64-बिट ID, एक वर्कर ID और एक अनुक्रम, और उनके लिए आवश्यक समन्वय
स्नोफ्लेक एक 64-बिट पहचानकर्ता है जिसे मूल रूप से ट्विटर द्वारा डिज़ाइन किया गया है, जिसे 41-बिट मिलीसेकंड टाइमस्टैम्प, 10-बिट वर्कर ID और 12-बिट अनुक्रम संख्या के रूप में संरचित किया गया है। 41-बिट टाइमस्टैम्प लगभग 69 वर्षों को कवर करता है और 2106 में ओवरफ्लो हो जाता है, जिसके लिए युग समन्वय और माइग्रेशन योजना की आवश्यकता होती है। वर्कर ID विभिन्न सर्वरों या प्रक्रियाओं द्वारा उत्पन्न पहचानकर्ताओं को अलग करती है - प्रत्येक स्नोफ्लेक जनरेटर को दूसरों के साथ टकराव के बिना अपनी अनूठी वर्कर ID पता होनी चाहिए। स्नोफ्लेक 128 के बजाय 64 bits है, जो इसे UUID के आधे आकार का बनाता है, इंडेक्स के लिए तेज़ और प्रति पहचानकर्ता अधिक भंडारण-कुशल बनाता है। यह समय और वर्कर ID के आधार पर क्रमबद्ध होता है, जो रूटिंग अनुरोधों या स्रोत के आधार पर लॉग के लिए उपयोगी है। खामी परिचालनात्मक है: प्रत्येक जनरेटर को एक कार्यकर्ता ID निर्दिष्ट की जानी चाहिए, घड़ियों को सिंक्रनाइज़ रखा जाना चाहिए।
KSUID - एक बड़े यादृच्छिक पेलोड के साथ एक सेकंड टाइमस्टैम्प, बाइट्स के रूप में क्रमबद्ध
KSUID (K-सॉर्टेबल यूनिक आइडेंटिफ़ायर) एक 128-बिट पहचानकर्ता है जिसमें 32-बिट Unix दूसरा टाइमस्टैम्प और 96-बिट यादृच्छिक पेलोड होता है, जिसे आमतौर पर 27 बेस 62 वर्णों के रूप में एन्कोड किया जाता है। प्रारूप शब्दकोषीय क्रम में क्रमबद्ध है, और यादृच्छिक भाग अपने आकार के लिए क्रिप्टोग्राफ़िक रूप से उपयुक्त है। KSUID को ULID या स्नोफ्लेक की तुलना में कम व्यापक रूप से अपनाया जाता है, लेकिन विशिष्ट शब्दार्थ प्रदान करता है: टाइमस्टैम्प को आसानी से मानव-पठनीय सेकंड (लॉग और डिबगिंग में उपयोगी) में डिकोड किया जाता है, और 96-बिट यादृच्छिक भाग इतना बड़ा है कि एक ही सेकंड में उत्पन्न कई KSUID में अनुक्रम समन्वय के बिना प्रभावी रूप से शून्य डुप्लिकेट संभावना होती है। स्नोफ्लेक के विपरीत, KSUID को किसी कार्यकर्ता ID समन्वय या केंद्रीय आवंटन की आवश्यकता नहीं है। KSUID मिलीसेकंड के बजाय सेकंड पर काम करता है, इसलिए जब तक आप अतिरिक्त तर्क लागू नहीं करते हैं, तब तक एक सेकंड के भीतर एकाधिक ID यादृच्छिक रूप से क्रमबद्ध होती हैं।
UUIDv7 - मानक-ट्रैक उत्तर जो मौजूदा UUID कॉलम और टूलींग में फिट बैठता है
RFC 9562 v7 एक 128-बिट पहचानकर्ता है जिसमें 48-बिट Unix मिलीसेकंड टाइमस्टैम्प, उप-मिलीसेकंड परिशुद्धता का 12 bits (अनुक्रम काउंटर के रूप में प्रयोग करने योग्य), और 62 यादृच्छिक बिट्स सभी संयुक्त होते हैं। यह डेटाबेस में लेक्सिकोग्राफ़िक स्ट्रिंग और 128-बिट बाइट्स दोनों के रूप में सही ढंग से सॉर्ट होता है। महत्वपूर्ण रूप से, यह एक वैध UUID है - यह संस्करण निबल को 7 और वैरिएंट बिट्स को RFC 9562 मानक पर सेट करता है, जिससे यह UUIDs को संभालने वाले प्रत्येक टूल, डेटाबेस कॉलम और API के साथ संगत हो जाता है। किCAन्कोडिंग रूपांतरण की आवश्यकता नहीं है, और मौजूदा UUID बुनियादी ढांचे में किसी संशोधन की आवश्यकता नहीं है। यदि एक ही मिलीसेकंड में एकाधिक v7 पहचानकर्ता उत्पन्न होते हैं, तो RFC 9562 उप-मिलीसेकंड फ़ील्ड को यादृच्छिक बिट्स के बजाय एक मोनोटोनिक काउंटर के रूप में उपयोग करने की अनुशंसा करता है। V7 UUID अनुकूलता बनाए रखने के लिए एक व्यावहारिक विकल्प का प्रतिनिधित्व करता है।
एक मिलीसेकंड के भीतर एकरसता - प्रत्येक प्रारूप विस्फोटों को कैसे संभालता है और ऑर्डर की गारंटी के लिए यह क्यों महत्वपूर्ण है
एकरसता वह गुण है कि यदि दो घटनाएँ अवलोकनीय क्रम में घटित होती हैं, तो उनकी ID की तुलना उसी क्रम में की जाती है। आधुनिक हार्डवेयर पर मिलीसेकंड-स्तर की ग्रैन्युलैरिटी पर, कई घटनाएं नियमित रूप से एक ही घड़ी की टिक के भीतर होती हैं, इसलिए किसी भी सॉर्ट करने योग्य ID योजना को उप-मिलीसेकंड ऑर्डर को सही ढंग से संभालना चाहिए। ULID एक स्पष्ट मोनोटोनिक मोड प्रदान करता है जहां यादृच्छिक भाग यादृच्छिक होने के बजाय बढ़ता है। स्नोफ्लेक में एक 12-बिट अनुक्रम संख्या शामिल होती है जो एक मिलीसेकंड टिक के भीतर बढ़ती है। KSUID में एक अंतर्निहित तंत्र का अभाव है, इसलिए जब तक अतिरिक्त तर्क नहीं जोड़ा जाता है तब तक उप-सेकंड घटनाएं यादृच्छिक रूप से क्रमबद्ध होती हैं। RFC 9562 v7 एक मोनोटोनिक काउंटर के रूप में उप-मिलीसेकंड फ़ील्ड का उपयोग करने की अनुशंसा करता है। यदि आपका सिस्टम प्रति सेकंड हजारों UUID उत्पन्न करता है, तो एक मिलीसेकंड के भीतर एकरसता क्वेरी ऑर्डरिंग को महत्वपूर्ण रूप से प्रभावित करती है।
इसमें क्या शामिल नहीं है - थ्रूपुट बेंचमार्क, जो हार्डवेयर और भाषा पर निर्भर करते हैं; पोस्ट गुणवत्तापूर्ण रहती है
थ्रूपुट बेंचमार्क और प्रदर्शन डेटा शामिल नहीं हैं क्योंकि वे हार्डवेयर आर्किटेक्चर, भाषा कार्यान्वयन, डेटाबेस इंजन और कैशिंग रणनीति पर बहुत अधिक निर्भर करते हैं। चाहे आप यादृच्छिक आवेषण, कैटेगरी क्वेरी, इंडेक्स ओवरहेड, या यथार्थवादी उत्पादन भार के तहत कुल थ्रूपुट को माप रहे हों, डेटाबेस प्रदर्शन विशेषताएँ काफी भिन्न होती हैं। पोस्ट गुणात्मक बनी हुई है, पर्यावरण-विशिष्ट संख्याएं प्रदान करने के बजाय उनके डिजाइनों के आधार पर वैचारिक रूप से प्रारूपों की तुलना करती है जो भ्रामक हो सकती हैं। वास्तविक दुनिया के प्रदर्शन मूल्यांकन के लिए आपके स्वयं के कार्यभार, कोडबेस और परिचालन बाधाओं के साथ आपके अपने वातावरण में परीक्षण की आवश्यकता होती है। विभिन्न ID प्रारूपों को बेंचमार्क करना एक मूल्यवान अभ्यास है।
टेकअवे: संगतता अक्सर निर्णय लेती है - ToolAcre जनरेटर यादृच्छिक UUID उत्पन्न करता है; यह पुष्टि करने के लिए इसकी सुव्यवस्थित जांच का उपयोग करें कि आपकी लाइब्रेरी से UUIDv7 UUID के रूप में पार्स होता है
संगतता अक्सर यह तय करती है कि कौन सा प्रारूप चुनना है। यदि आपके डेटाबेस स्कीमा को पहले से ही UUID कॉलम की आवश्यकता है, तो v7 UUID पारिस्थितिकी तंत्र को छोड़े बिना सॉर्टेबिलिटी का आधुनिक उत्तर है। यदि कस्टम ID प्रकारों के साथ एक नई प्रणाली का निर्माण किया जाता है, तो ULID छोटे पाठ प्रतिनिधित्व और मिलीसेकंड सटीक लाभ प्रदान करता है। यदि आपको 64-बिट स्टोरेज की आवश्यकता है और केंद्रीकृत आवंटन के माध्यम से वर्कर ID समन्वय का प्रबंधन कर सकते हैं, तो स्नोफ्लेक उच्च-वॉल्यूम सिस्टम में एक सिद्ध विकल्प है। बुनियादी समझौता मानक अनुकूलता (v7 चुनें) और छोटे आकार (स्नोफ्लेक) या Base32 पठनीयता (ULID) जैसे वैकल्पिक गुणों के बीच है। सिस्टम की बाधाओं और पारिस्थितिकी तंत्र के निर्णयों के आधार पर चुनाव करें।