दिलचस्प पोस्ट
MVC3 DropDownListFor – एक सरल उदाहरण? पायथन: ओएस क्या चल रहा है? पायथन डिक्शनिक्स में कुंजी ऑर्डर वेबमेल के लिए टाइमआउट सेट करें। डाउनलोडफ़ाइल () सुरक्षा नियमों के साथ बच्चे / क्षेत्र में पहुंच सीमित करना वेब एपीआई रखी अनुरोध एक एचटीपी 405 विधि उत्पन्न नहीं करता है त्रुटि की अनुमति है फाइनल और प्रभावी रूप से अंतिम के बीच अंतर <Ui: दोहराने> <h: inputText> का उपयोग करके एक सूची <स्ट्रिंग> मॉडल मान अपडेट नहीं करता है क्या मुझे अधिकतम-डिवाइस-चौड़ाई या अधिकतम-चौड़ाई का उपयोग करना चाहिए? पृष्ठभूमि प्रक्रिया के पीआईडी ​​कैसे प्राप्त करें? जब भी लागू होता है "अंतिम" संशोधक का प्रयोग करके एक ही कक्षा के साथ तत्वों के माध्यम से लूप को jQuery जस्पर रिपोर्ट्स के साथ JVM के लिए फ़ॉन्ट उपलब्ध नहीं है आपको अनावश्यक सी # निर्देशों का उपयोग क्यों करना चाहिए? स्ट्रिंग के पहले एन वर्ण प्राप्त करें

हाय / लो एल्गोरिदम क्या है?

हाय / लो एल्गोरिदम क्या है?

मैंने इसे NHibernate प्रलेखन में पाया है (यह अद्वितीय कुंजियां, खंड 5.1.4.2 उत्पन्न करने के लिए एक विधि है), लेकिन मुझे यह पता नहीं चला है कि यह कैसे काम करता है।

मुझे पता है कि निब्बरनेट ने इसे संभाल लिया है, और मुझे अंदर की जानकारी नहीं है, लेकिन मैं सिर्फ उत्सुक हूं।

वेब के समाधान से एकत्रित समाधान "हाय / लो एल्गोरिदम क्या है?"

मूल विचार यह है कि आपके प्राथमिक नंबर के लिए दो संख्याएं हैं- एक "उच्च" संख्या और एक "कम" संख्या। एक क्लाइंट मूल रूप से "उच्च" अनुक्रम को बढ़ा सकता है, यह जानने के बाद कि वह "कम" मानों के साथ पिछले "उच्च" मान की पूरी रेंज से सुरक्षित रूप से कुंजी उत्पन्न कर सकती है

उदाहरण के लिए, मानते हुए कि आपके पास 35 के वर्तमान मूल्य के साथ एक "उच्च" क्रम है, और "कम" संख्या 0-1023 की सीमा में है। तब क्लाइंट अनुक्रम को 36 से बढ़ा सकता है (अन्य क्लाइंट के लिए 35 का उपयोग करते हुए कुंजी उत्पन्न करने में सक्षम होने के लिए) और पता है कि चाबियाँ 35/0, 35/1, 35/2, 35/3 … 35/1023 हैं सभी उपलब्ध।

यह प्राथमिक कुंजी के बिना मूल्य डालने के बजाय क्लाइंट की ओर प्राथमिक कुंजी सेट करने में सक्षम होने के लिए बहुत उपयोगी (विशेषकर ओआरएम के साथ) हो सकता है और फिर उन्हें क्लाइंट पर वापस ला सकता है किसी और चीज के अलावा, इसका मतलब है कि आप आसानी से माता-पिता / बच्चे के रिश्तों को बना सकते हैं और कोई भी सम्मिलित करने से पहले आपके पास चाबियाँ पूरी हो सकती हैं, जिससे उन्हें आसान बना दिया जा सकता है।

जॉन के उत्तर के अलावा:

इसका उपयोग डिस्कनेक्ट करने में सक्षम होने के लिए किया जाता है। एक क्लाइंट तब सर्वर को एक ही नंबर के लिए पूछ सकता है और ऑब्जेक्ट्स को लो संख्या में बढ़ाना ही बना सकता है। लो रेंज का इस्तेमाल होने तक सर्वर से संपर्क करने की आवश्यकता नहीं है।

हाय-लो आवंटन की तुलना में बेहतर, "रैखिक चक" आवंटन है। यह समान तालिका-आधारित सिद्धांत का उपयोग करता है, लेकिन छोटे, आसानी से आकार के हिस्से को आवंटित करता है और अच्छे मानव-मित्रत्व के मूल्यों को उत्पन्न करता है।

create table KEY_ALLOC ( SEQ varchar(32) not null, NEXT bigint not null, primary key (SEQ) ); 

अगले आवंटन के लिए, कहते हैं, 20 चाबियाँ (जो तब सर्वर में एक सीमा के रूप में आयोजित की जाती हैं और आवश्यकतानुसार उपयोग की जाती हैं):

 select NEXT from KEY_ALLOC where SEQ=?; update KEY_ALLOC set NEXT=(old value+20) where SEQ=? and NEXT=(old value); 

आपको यह लेन-देन (दिक्कत संभालने के लिए पुनः उपयोग का उपयोग) कर सकते हैं प्रदान करने के लिए, आपने 20 कुंजी आवंटित की है और उन्हें आवश्यकतानुसार वितरित कर सकते हैं।

सिर्फ 20 का हिस्सा-आकार के साथ, यह योजना ओरेकल अनुक्रम से आवंटित की तुलना में 10x तेज है, और सभी डेटाबेस में 100% पोर्टेबल है। आवंटन प्रदर्शन हाई-लो के बराबर है

एम्ब्लर के विचार के विपरीत, यह चाबियाँ को एक समान रैखिक संख्या रेखा के रूप में मानता है।

यह समग्र कुंजी के लिए गति को टालता है (जो वास्तव में एक अच्छा विचार नहीं था) और सर्वर को पुनरारंभ होने पर संपूर्ण लो-शब्द बर्बाद कर रहा है। यह "मैत्रीपूर्ण", मानव-स्तरीय कुंजी मान उत्पन्न करता है

श्री एम्ब्लर के विचार, तुलनात्मक रूप से, उच्च 16- या 32-बिट्स को आवंटित करते हैं, और उच्च-शब्द वृद्धि के रूप में बड़े मानव-मित्रत्वपूर्ण प्रमुख मूल्यों को उत्पन्न करते हैं।

आवंटित कुंजी की तुलना:

 Linear_Chunk Hi_Lo 100 65536 101 65537 102 65538 .. server restart 120 131072 121 131073 122 131073 .. server restart 140 196608 

मैं वास्तव में श्री अनबलेटर के साथ 90 के दशक में इस सुधार योजना का सुझाव देने के लिए उनके साथ संवाद करता था, लेकिन वह एक स्थिर रैंकियर नंबर-लाइन का उपयोग करने के फायदों और स्पष्ट सादगी को स्वीकार करने के लिए बहुत हद तक रुका हुआ था।

डिजाइन-वार, उसका समाधान, रैखिकांकों की तुलना में नंबर-लाइन (समग्र कुंजी, बड़े hi_word उत्पादों) पर मौलिक रूप से अधिक जटिल है, जबकि कोई तुलनात्मक लाभ नहीं प्राप्त कर रहा है। उनकी डिजाइन इस प्रकार गणितीय साबित हुई कमी है।

हाय / लो एल्गोरिदम दृश्यों डोमेन को "हाय" समूहों में विभाजित करता है एक "नमस्ते" मूल्य समन्वयित किया जाता है प्रत्येक "हाय" समूह को "लो" प्रविष्टियों की अधिकतम संख्या दी जाती है, जो समवर्ती डुप्लिकेट प्रविष्टियों के बारे में चिंता किए बिना ऑफ-लाइन निर्दिष्ट कर सकते हैं।

  1. "नमस्ते" टोकन को डेटाबेस द्वारा सौंपा गया है, और दो समवर्ती कॉलों को लगातार लगातार मूल्यों को देखने की गारंटी है
  2. एक बार "हाय" टोकन पुनर्प्राप्त हो जाने पर हमें केवल "वृद्धि आकार" ("लो" प्रविष्टियों की संख्या) की आवश्यकता होती है
  3. पहचानकर्ता श्रेणी निम्न सूत्र द्वारा दी गई है:

     [(hi -1) * incrementSize) + 1, (hi * incrementSize) + 1) 

    और "लो" मान सीमा में होगा:

     [0, incrementSize) 

    के प्रारंभ मूल्य से लागू किया जा रहा है:

     [(hi -1) * incrementSize) + 1) 
  4. जब सभी "लो" मानों का उपयोग किया जाता है, तो एक नया "नमस्ते" मान प्राप्त होता है और चक्र जारी रहता है

आप इस लेख में अधिक विस्तृत व्याख्या पा सकते हैं:

और इस दृश्य प्रस्तुति का पालन करना आसान है:

यहां छवि विवरण दर्ज करें

जबकि हाइ / लो अनुकूलक पहचानकर्ता पीढ़ी को अनुकूलित करने के लिए ठीक है, यह हमारी पहचानकर्ता रणनीति के बारे में कुछ भी जानने के बिना, हमारे सिस्टम में पंक्तियां डालने वाली अन्य प्रणालियों के साथ अच्छी तरह से नहीं खेलता है

हाइबरनेट पूल-लो ऑप्टिमाइज़र प्रदान करता है, जो इंटरऑपरेबिलिटी अनुक्रम आवंटन तंत्र के साथ एक हाय / लो जनरेटर रणनीति को जोड़ती है। यह अनुकूलक अन्य प्रणालियों के साथ दोनों कुशल और अंतरणीय है, पिछला विरासत हाई / लो पहचानकर्ता रणनीति से बेहतर उम्मीदवार है।

मैंने पाया कि हाय / लो एल्गोरिदम मेरे अनुभव में आधारित प्रतिकृति परिदृश्यों के साथ कई डेटाबेस के लिए एकदम सही है। इसकी कल्पना करें। आपके पास न्यूयॉर्क में न्यूयॉर्क (उर्फ 01) और लॉस एंजेल्स (उर्फ 02) में एक सर्वर है, तो आपके पास एक व्यक्ति की मेज है … तो न्यूयॉर्क में जब एक व्यक्ति बना रहता है … तो आप हमेशा हिम मूल्य के रूप में 01 का उपयोग करते हैं और LO मान अगले secuential है उदाहरण के लिए उदाहरण

  • 010000010 जेसन
  • 010000011 डेविड
  • 010000012 थियो

लॉस एंजिल्स में आप हमेशा HI 02 का उपयोग करते हैं। उदाहरण के लिए:

  • 020000045 रुपर्ट
  • 020000046 ओसवाल्ड
  • 020000047 मारियो

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

इस परिदृश्य में जाने का सबसे अच्छा तरीका यह है