दिलचस्प पोस्ट
डेटाबेस ऑप्टिमाइज़ेशन ऑर्डर मैं Python का उपयोग कर Windows पर क्लिपबोर्ड पर एक स्ट्रिंग की प्रतिलिपि कैसे करूं? Django में, मैं वर्तमान में लॉग-इन उपयोगकर्ता को कैसे जान सकता हूं? सक्रियरेकॉर्ड में उपकुंजी MYSQL में FIELD द्वारा आदेश PHP – डॉट नेशन कुंजी के साथ 2 डी सरणी के लिए बहुआयामी सरणी को परिवर्तित करें दो तारों के बीच कम से कम मैचों का पता लगाएं क्यों ContentResolver.requestSync एक समन्वयन को ट्रिगर नहीं करता? तू STD :: वेक्टर से वारिस नहीं होगा जावा का उपयोग कर पाठ फ़ाइल में स्ट्रिंग को कैसे बचा सकता हूँ? आप PHP स्क्रिप्ट कैसे डिबग करते हैं? एंड्रॉइड पर इंटरनेट कनेक्शन की जांच कॉलम "चयन सूची में अमान्य है क्योंकि यह एक समग्र फ़ंक्शन या ग्रुप बाय खंड में निहित नहीं है" TypeError: 'अपरिभाषित' एक फ़ंक्शन नहीं है (मूल्यांकन '$ (दस्तावेज़)') jQuery के यूआई संवाद बटन प्रतीक

जावा में यूयूआईडी के सबसे महत्वपूर्ण बिट्स का उपयोग करके टकराव की संभावना

अगर मैं Long uuid = UUID.randomUUID().getMostSignificantBits() का उपयोग कर रहा हूं Long uuid = UUID.randomUUID().getMostSignificantBits() यह एक टकराव प्राप्त करने की संभावना है। यह कम से कम महत्वपूर्ण बिट्स को काट देता है, इसलिए एक संभावना है कि आप एक टकराव में चलते हैं, है ना?

Solutions Collecting From Web of "जावा में यूयूआईडी के सबसे महत्वपूर्ण बिट्स का उपयोग करके टकराव की संभावना"

प्रलेखन के अनुसार, स्थिर विधि UUID.randomUUID() एक प्रकार 4 UUID उत्पन्न करता है।

इसका अर्थ है कि छह बिट्स को कुछ प्रकार की जानकारी के लिए उपयोग किया जाता है और शेष 122 बिट्स को बेतरतीब ढंग से सौंपा गया है।

छह गैर-यादृच्छिक बिट्स को चार के साथ यूयूआईडी के सबसे महत्वपूर्ण आधे हिस्से में वितरित किया जाता है और कम से कम महत्वपूर्ण आधे में दो तो आपके यूयूआईडी का सबसे महत्वपूर्ण आधा 60 बिट्स यादृच्छिकता में है, जिसका मतलब है कि आप टक्कर लेने के लिए औसतन 2 ^ 30 यूयूआईडी बनाने की आवश्यकता रखते हैं (पूर्ण यूयूआईडी के लिए 2 ^ 61 की तुलना में)।

तो मैं कहूंगा कि आप बल्कि सुरक्षित हैं। नोट, हालांकि, यह बिल्कुल अन्य प्रकार के UUIDs के लिए सही नहीं है, जैसा कि कार्ल सेलेबोर्ग में उल्लेख है।

संयोग से, आप यूयूआईडी के कम से कम महत्वपूर्ण आधे (या केवल सैक्योररेन्डम का इस्तेमाल करते हुए एक यादृच्छिक लंबी सृजन) का उपयोग करके थोड़ा बेहतर होगा।

रेमंड चेन इस पर एक बहुत ही बढ़िया ब्लॉग पोस्ट है:

GUID विश्वव्यापी अद्वितीय हैं, लेकिन GUIDs की सबस्ट्रिंग नहीं है

मुझे लगता है कि यह यादृच्छिक यूयूआईआईडी के उपयोग के लिए सबसे अच्छा उदाहरण है:

http://www.javapractices.com/topic/TopicAction.do?Id=56

आप सिर्फ एक यादृच्छिक लंबे मूल्य पैदा करने से बेहतर हैं, फिर सभी बिट यादृच्छिक हैं। जावा 6 में, नया रैंडम () सिस्टम। नैनोटाइम () प्लस एक बीज के रूप में एक काउंटर का उपयोग करता है।

विशिष्टता के विभिन्न स्तर हैं

अगर आपको कई मशीनों में विशिष्टता की आवश्यकता है, तो आप अद्वितीय आईडी को आवंटित करने के लिए, या अद्वितीय आईडी के बैचों के लिए एक केंद्रीय डेटाबेस तालिका भी कर सकते हैं।

अगर आपको एक ऐप में अनोखीपन की आवश्यकता है, तो आपके पास सिर्फ एक काउंटर (या एक काउंटर हो सकता है जो आपकी आवश्यकताओं के आधार पर वर्तमान टाइममिलिस () * 1000 या नैनो टाइम () से शुरू होता है)

उपसर्ग के रूप में समय YYYYDDDD (वर्ष + वर्ष का वर्ष) का उपयोग करें। यह तालिकाओं और अनुक्रमणिका में डेटाबेस विखंडन घटता है। यह विधि byte[40] रिटर्न करती है byte[40] मैंने इसे एक हाइब्रिड वातावरण में उपयोग किया था, जहां सक्रिय निर्देशिका एसआईडी ( varbinary(85) ) एलडीएपी उपयोगकर्ताओं की कुंजी है और गैर-एलडीएपी प्रयोक्ताओं के लिए एक ऐप्लिकेशन ऑटो-जनरेटेड आईडी का उपयोग किया जाता है। लेनदेन तालिकाओं (बैंकिंग उद्योग) में प्रतिदिन लेन-देन की बड़ी संख्या कुंजी के लिए मानक Int प्रकार का उपयोग नहीं कर सकती

 private static final DecimalFormat timeFormat4 = new DecimalFormat("0000;0000"); public static byte[] getSidWithCalendar() { Calendar cal = Calendar.getInstance(); String val = String.valueOf(cal.get(Calendar.YEAR)); val += timeFormat4.format(cal.get(Calendar.DAY_OF_YEAR)); val += UUID.randomUUID().toString().replaceAll("-", ""); return val.getBytes(); }