मैं Google ऐप इंजन एप्लिकेशन में उपयोग के लिए अद्वितीय आईडी उत्पन्न करने की कोशिश कर रहा हूं और उस दृष्टिकोण की व्यवहार्यता पर फीडबैक चाहूंगा जिसे मैं उपयोग करने के बारे में सोच रहा हूं (अंत में प्रश्न)। मैंने इस विषय पर काफी कुछ प्रश्न पढ़े हैं, लेकिन मुझे इस विशेष दृष्टिकोण में आने की याद नहीं है।छोटे यादृच्छिक दिखने वाली आईडी पीढ़ी
मुझे यादृच्छिक दिखने वाली आईडी, उदाहरण के लिए, एमडी 5 हैश, लेकिन मैं भी उन्हें छोटा होना चाहता हूं। टिन्यूरल की तर्ज पर चार से छह वर्ण आदर्श होंगे। आईडी उपयोगकर्ता द्वारा जेनरेट की गई सामग्री के लिए होगी, मेरे आवेदन के संदर्भ में, परीक्षण प्रश्नों जैसी चीजें जो लोग लिखेंगे। यह आवश्यक नहीं है कि आईडी यादृच्छिक दिख रहे हों (यह ठीक है अगर वे धारावाहिक आईडी की तरह दिखते हैं), लेकिन जिस दृष्टिकोण का मैं उपयोग करने के बारे में सोच रहा हूं वह स्वयं को उधार देता है, इसलिए यह वास्तव में कोई मुद्दा नहीं है।
Google ऐप इंजन से परिचित लोगों को पता चलेगा कि डेटा स्टोर में लिखना विशेष रूप से महंगा है और परिणामस्वरूप समय-समय पर एक ही इकाई समूह में बहुत से लोग हो सकते हैं। शर्डेड काउंटर एक ऐसा दृष्टिकोण है जिसका प्रयोग अक्सर एक वैश्विक काउंटर पर लिखने वाली विवाद से बचने के लिए किया जाता है और इसके साथ चलने वाले असफल लेनदेन।
छोटी आईडी प्राप्त करने और लिखने की विवाद से बचने के साथ, मैं जन्मदिन के विरोधाभास से बचने की कोशिश कर रहा हूं। मैं लाखों आईडी होने की संभावना के लिए तैयार करना चाहता हूं, भले ही यह थोड़ा सा हो रहा हो।
मैं निम्नलिखित लाइनों के साथ एक sharded काउंटर का उपयोग करने का सोच रहा था:
- काउंटर उन पर sharded है, ताकि प्रत्येक उपयोगकर्ता के लिए एक ठीकरा है। प्रत्येक काउंटर ऑब्जेक्ट की अपनी गिनती होती है जो किसी दिए गए उपयोगकर्ता के लिए विशिष्ट होती है, जो उस उपयोगकर्ता द्वारा बनाई गई नई वस्तु के दौरान बढ़ी जाती है। किसी आइटम को सफलतापूर्वक बनाया गया है या नहीं, इस पर ध्यान दिए बिना गिनती बढ़ी है।
- आईडी का आधार निम्न स्ट्रिंग का MD5 हैश है: "< उपयोगकर्ता-ईमेल-पता > | < नवीनतम-काउंटर-मान >"।
- परिणामी एमडी 5 हैश को फिर से चार वर्णों में छोटा कर दिया गया है।
- एक वैश्विक "लंबाई" मान बनाए रखा जाता है। जब भी पिछले चरणों में डुप्लिकेट कुंजी होती है (एक कल्पना करता है कि यह पहले से काफी जल्दी होगा), लंबाई का मूल्य एक से बढ़ाया जाएगा। नए आईडी के लिए एमडी 5 हैश अब चार अक्षरों के बजाय "लंबाई" अक्षरों पर छोटा कर दिया जाएगा।
- मैं उपयोगकर्ता ईमेल पता का पर्दाफाश नहीं करना चाहता, जो बताता है कि किसी प्रकार का हैश जाने का एक अच्छा तरीका होगा।
मेरे सवाल कर रहे हैं: मैं यह सोच कर कि यह काफी हद तक डुप्लिकेट चाबी का एक परिणाम और लंबाई मैदान पर कि विवाद लिखने शायद एक मुद्दा है, विशेष रूप से अब लंबाई पर नहीं होगा के रूप में लिखने के विवाद से बचने जाएगा में हूं? क्या कोई यहां शामिल गणित का वर्णन कर सकता है? क्या लंबाई एमडी 5 हैश की लंबाई के करीब तेजी से बढ़ेगी, जो पूरे दृष्टिकोण के मूल्य पर सवाल उठाती है? क्या चीजों को बनाए रखने में आसान रखने के लिए पूर्ण (लंबा) MD5 हैश के साथ जाना बेहतर होगा? क्या मैं कुछ भी देख रहा हूं?
दिलचस्प दृष्टिकोण के लिए धन्यवाद। मैं इसे कुछ विचार दूंगा और इसे बेहतर ढंग से समझने की कोशिश करूंगा। मेरे पास एक सवाल यह है कि यह कितना है कि यह टकराव (या रीट्रीज़) में कितना होगा क्योंकि चाबियों की संख्या बड़ी हो जाती है। मैं टकराव को यथासंभव शून्य के करीब रखने की कोशिश कर रहा हूं। –
विभाजन केवल भरने पर आप केवल टकराव में भाग लेंगे। – Dave
अन्य ऑप्टिमाइज़ेशन आप इसके साथ कर सकते हैं: 1. "भरे विभाजन" की एक सूची मेमकैच 2. यदि आपको एक बार में आईडी का गुच्छा मिल जाएगा, तो आप एन आईडी के ब्लॉक को पकड़ सकते हैं विभाजन और उसके बाद उस मूल्य से अपने काउंटर को बढ़ाएं। – Dave