सामान्य रूप से हायलो एल्गोरिदम मूल रूप से दो पूर्णांक को एक पूर्णांक आईडी में मैप करते हैं। यह गारंटी देता है कि संख्याओं की जोड़ी प्रति डेटाबेस अद्वितीय होगी। आम तौर पर, अगला कदम यह गारंटी देना है कि संख्याओं की एक अद्वितीय जोड़ी एक अद्वितीय पूर्णांक आईडी के लिए मानचित्र बनाती है।
कैसे हिलो धारणात्मक काम करता है this previous SO answer
में max_lo बदलने की संपत्ति है कि संख्या के अपने जोड़ी अनूठा होगा सुरक्षित करेगा दिया जाता है की एक अच्छा विवरण। हालांकि, क्या यह सुनिश्चित करेगा कि मैप किए गए आईडी अद्वितीय और टकराव रहित हैं?
चलिए हाइलोनेट के HiLo के कार्यान्वयन को देखते हैं। एल्गोरिथ्म वे दिखाई देते हैं उपयोग करने के लिए (मैं क्या एकत्रित की हैं से के रूप में) है: (और मैं एक तकनीकी पर बंद हो सकता है)
h = high sequence (starting at 0)
l_size = size of low block
l = low sequence (starting at 1)
ID = h*l_size + l
इसलिए, यदि आपका कम ब्लॉक, है कहते हैं, 100, अपने आरक्षित आईडी अवरोधों 1-100, 101-200, 201-300, 301-400 ...
आपका उच्च अनुक्रम अब 3 है। अब क्या होगा यदि आप अचानक अपने l_size को 10 में बदल दें? आपका अगला ब्लॉक, आपका उच्च बढ़ाया गया है, और आपको 4*10+1 = 41
ओप्स मिलेगा। यह नया मान निश्चित रूप से 1-100
के "आरक्षित ब्लॉक" के भीतर आता है। 0 के उच्च अनुक्रम वाले किसी व्यक्ति को लगता है, "ठीक है, मेरे पास केवल 1-100
रेंज है जो मेरे लिए आरक्षित है, इसलिए मैं इसे 41
पर डाल दूंगा, क्योंकि मुझे पता है कि यह सुरक्षित है।"
आपके l_max को कम करते समय निश्चित रूप से टक्कर का एक बहुत ही उच्च अवसर है।
विपरीत मामले के बारे में क्या, इसे उठा रहा है?
हमारे उदाहरण पर वापस जाएं, आइए हम अपने l_size को 500 तक बढ़ाएं, अगली कुंजी को 4*500+1 = 2001
में बदल दें, 2001-2501 की सीमा को आरक्षित करें।
ऐसा लगता है कि हाइलो के इस विशेष कार्यान्वयन में टकराव से बचा जाएगा, जब आपके l_max को बढ़ा रहा है।
बेशक, आपको यह सुनिश्चित करने के लिए अपने स्वयं के कुछ परीक्षण करना चाहिए कि यह वास्तविक कार्यान्वयन है, या इसके करीब है। एक तरीका यह है कि l_max को 100 पर सेट करें और पहले कुछ कुंजियां पाएं, फिर इसे 500 पर सेट करें और अगला खोजें।यदि यहां उल्लेख की गई एक बड़ी छलांग है, तो आप सुरक्षित रहें।
हालांकि, मैं किसी भी सुझाव दिया कि यह एक मौजूदा डेटाबेस पर अपने l_max बढ़ाने के लिए सबसे अच्छा अभ्यास है भी तरह से नहीं कर रहा हूँ।
अपने विवेकाधिकार का प्रयोग करें; HiLo एल्गोरिदम बिल्कुल अलग-अलग l_max के साथ दिमाग में नहीं बनाया गया है, और अंत में आपके परिणाम आपके सटीक कार्यान्वयन के आधार पर अप्रत्याशित हो सकते हैं। हो सकता है कि कोई व्यक्ति जिसने अपने l_max को बढ़ाने और परेशानियों को ढूंढने का अनुभव किया हो, यह गिनती सही साबित कर सकती है।
तो निष्कर्ष में, भले ही, सिद्धांत रूप में, हाइबरनेट के हिलो कार्यान्वयन सबसे अधिक संभावना टकराव से बचने जाएगा जब l_max उठाया है, यह शायद अभी भी अच्छा अभ्यास नहीं है। आपको कोड करना चाहिए जैसे कि समय के साथ l_max नहीं बदला जा रहा था।
लेकिन अगर आपकी किस्मत अच्छी है ...
बहुत अच्छी तरह से, धन्यवाद! –