कब हैश इंडेक्स उचित हो जाते हैं?


4

MySQL मूल रूप से हैश इंडेक्स का समर्थन नहीं करता है।इसलिए, एक छद्म हैश कॉलम बनाने और हैश कॉलम पर एक इंडेक्स बनाने के लिए कुछ सोच की आवश्यकता होती है।

और यह व्यापक रूप से समझा जाता है कि यदि पाठ क्षेत्र लंबा है, तो हैश की आवश्यकता ओवरहेड के लायक है।लेकिन कब तक हैश के बारे में सोचना शुरू करना चाहिए?

यदि मैं 128 बिट हैश का उपयोग करने का इरादा रखता हूं तो पाठ कॉलम के लिए कितने अक्षर दहलीज पर्याप्त न्यूनतम होंगे?

संपादित करेंमेरे अन्य प्रश्न में सूचीबद्ध विवरण शायद उपयोगी https://stackoverflow.com/questions/7403167/index-on-url-or-hashing-considering-ram

  0

आपकी आवश्यकता क्या है?एक इंडेक्स केवल तभी प्ले में आता है जब एक फॉर्म में क्वेरी होगी जो क्वेरी ऑप्टिमाइज़र उनका उपयोग करेगा।प्रश्न में डेटा की प्रकृति क्या है?इस डेटा को शामिल करने वाले आप किस प्रकार के प्रश्नों को करेंगे? 14 sep. 112011-09-14 18:18:53

  0

यहाँ परियोजना का वर्णन http://stackoverflow.com/questions/7403167/index-on-url-or-hashing-considering-ram है 14 sep. 112011-09-14 18:49:42

3

यह तब उचित होने लगता है जब यह आपकी डिस्क को सहेजना शुरू कर देता है।लेकिन साथ ही यह आपकी कम्प्यूटेशनल शक्ति को लेना शुरू कर देता है।

आजकल डिस्क स्पेस को सस्ता माना जाता है लेकिन अगर आप SSD का उपयोग कर रहे हैं तो यह उतना सस्ता नहीं है।जैसा कि आपको सटीक मिलान की आवश्यकता है तो यह बहुत अधिक सीपीयू नहीं लेगा, इसलिए यह एक बेहतर विकल्प हो सकता है।

और हैश के उपयोग को संतुष्ट करने के लिए टेक्स्ट कॉलम की लंबाई के बारे में आपके प्रश्न का सटीक उत्तर सिस्टम पर लोड करने के लिए डीबीए के कौशल से शुरू होने वाले बहुत सारे कारकों के आधार पर भिन्न हो सकता है।

लेकिन अगर आप हैश का उपयोग करके 50% से अधिक रैम को बचाते हैं और कुल रैम की बचत कम से कम 2GB है तो मुझे लगता है कि शायद यह मार्ग लेने के लायक है अन्यथा यह एक अनावश्यक पूर्वाभ्यास है।


3

मुझे यकीन नहीं है कि हैश इंडेक्स चाहने के आपके कारण क्या हैं।

लेकिन अगर आप टेक्स्ट/वर्चर कॉलम को अनुक्रमित करना चाहते हैं तो आप MyISAM/पूर्ण-पाठ के साथ जा सकते हैं या आप Sphinx या Lucene जैसे किसी बाहरी चीज़ का उपयोग कर सकते हैं।

आप वैकल्पिक रूप से दूसरे के हैशेड संस्करण के साथ एक अतिरिक्त कॉलम बना सकते हैं और जब तक इसकी 1000 बाइट्स या उससे कम है, तब इसे MySQL द्वारा अनुक्रमित किया जा सकता है।

मुझे आशा है कि मैंने आपके प्रश्न का उत्तर दिया है।

  0

छद्म हैश इंडेक्स में देखने का मेरा कारण यह है कि मेरी तालिका में 150+ मिलियन रिकॉर्ड हैं और मेरे पास सीमित मेमोरी (8 जीबी) है इसलिए मैं अपने इंडेक्स को ऑप्टिमाइज़ करना चाहता हूं और टेक्स्ट कॉलम पर इंडेक्स नहीं डालना चाहता क्योंकि यह बहुत अधिक खा जाएगा राम। 14 sep. 112011-09-14 17:55:51

  0

आप (और) को निर्दिष्ट कर सकते हैं कि आप किसी पाठ स्तंभ के वर्णों को कितना अनुक्रमित करना चाहते हैं।जैसे कि माईटेक्स्टीकुलम (1000) - 1000 की सीमा है।मैं MySQL को मेमोरी पार्ट को हैंडल करने देता हूं क्योंकि यह उस तरफ बहुत अच्छा है।वैकल्पिक रूप से, इन चीजों के लिए स्फिंक्स का उपयोग करना शायद नौकरी के लिए सबसे उपयुक्त उपकरण होगा। 15 sep. 112011-09-15 06:58:59

  0

जब मुझे हैश कॉलम बनाने और हैश कॉलम पर अद्वितीय बाधा डालने के बजाय परिवर्तनशील लंबाई होती है, तो मुझे टेक्स्ट कॉलम पर अनुक्रमणिका क्यों डालनी चाहिए।हैश कॉलम पर इंडेक्स लगाने में केवल समस्या टकराव को कम से कम करना है। 15 sep. 112011-09-15 16:42:11

  0

आप एक और हैशेड कॉलम बना सकते हैं और इसे इंडेक्स कर सकते हैं और साथ ही इस तरह से सर्च करने के लिए अपने कोड को अपने एप्लिकेशन में जोड़ सकते हैं।मैं सिर्फ इतना कहूंगा कि यह एक ऐसी समस्या है जो पहले से ही अन्य उपकरणों का उपयोग करके हल कर ली गई है और यह काफी हद तक अन्य लोगों द्वारा सत्यापित की गई है।यदि आप यह देखना चाहते हैं कि क्या आपका तरीका काम करता है और कम जटिल है, तो मेरे सभी साधन, इसे आज़माएं। 16 sep. 112011-09-16 10:41:14

  0

वास्तव में वे उपकरण स्फिंक्स जैसे पूर्ण पाठ खोज समाधान के लिए हैं।लेकिन मुझे यह जानने में अधिक दिलचस्पी है कि 16 बाइट्स हैश के लिए कब संभव है।जैसे, 16 कॉलम के टेक्स्ट कॉलम (जब जोड़ा गया सूचकांक) का 100 बाइट्स का उपयोग करने के बजाय योग्य है।और सबसे महत्वपूर्ण केवल सटीक मिलान की आवश्यकता होती है, न कि रेंज स्कैन की। 16 sep. 112011-09-16 18:45:01


0

आपके विवरण को पढ़ने के बाद, मैं देख सकता था कि कैसे एक हैश का अर्थ होता है।हालाँकि, जब आप मेमोरी के बारे में बात करते हैं तो एक इंडेक्स कॉलम के आकार का उपयोग बड़े डेटा सेट की खोज के लिए असंभव नहीं बनाता है।Mysql की बेसिक इंडेक्स टेक्नोलॉजी एक btree है।बीट्रीस विभाजित और जीतते हैं।

विशिष्ट सलाह जो मैं दे सकता हूं वह यह है: मान लें कि आप md5() हैश का उपयोग करने जा रहे हैं।अधिकतम दक्षता के लिए आपको हैश को इंसोडब इंजन टेबल की प्राथमिक कुंजी बनाना चाहिए जहां हैश एक चर (32) है।चूँकि innodb ने अनुक्रमित क्लस्टर किया है, डेटा को पुनः प्राप्त करने से डिस्क रीड्स पर बचत होगी, और ऐसे काम को भी कम करना होगा जब आपको एक चार का उपयोग करना होगा, जैसा कि आप md5() के परिणाम के बाद से कभी नहीं कर पाएंगे ।

  0

जब उद्देश्य RAM को बचाना है तो InnoDB का उपयोग करना एक बुद्धिमान निर्णय होगा? 15 sep. 112011-09-15 16:44:51