आपके तार कितने लंबे हैं?
यदि वे अपेक्षाकृत कम हैं (उदाहरण के लिए अंग्रेजी शब्द; avg_len=5) और आपके पास अतिरिक्त डेटाबेस संग्रहण है, तो इस दृष्टिकोण को आजमाएं:
- प्रत्येक शब्द के लिए जिसे आप तालिका में संग्रहीत करना चाहते हैं, इसके बजाय उस शब्द का हर संभव प्रत्यय लें। दूसरे शब्दों में, आप पहले चरित्र को तब तक अलग करते रहते हैं जब तक कि कुछ भी नहीं बचा। उदाहरण के लिए, शब्द
value
देता है:value
alue
lue
ue
e
- स्टोर प्रत्येक डेटाबेस में इन प्रत्ययों में से।
- अब आप
LIKE 'alu%'
. का उपयोग करके सबस्ट्रिंग खोज सकते हैं (जो 'अलु' को 'मान' के हिस्से के रूप में खोजेगा)।
सभी प्रत्ययों को संग्रहीत करके, आपने संग्रहण स्थान की कीमत पर अग्रणी वाइल्डकार्ड (तेजी से देखने के लिए अनुक्रमणिका का उपयोग करने की अनुमति) की आवश्यकता को हटा दिया है।
भंडारण लागत
किसी शब्द को संग्रहीत करने के लिए आवश्यक वर्णों की संख्या हो जाती है word_len*word_len / 2
, यानी शब्द की लंबाई में द्विघात, प्रति शब्द के आधार पर। यहाँ विभिन्न शब्द आकारों के लिए वृद्धि का कारक है:
- 3-अक्षर वाला शब्द:
(3*3/2) / 3 = 1.5
- 5 अक्षर का शब्द:
(5*5/2) / 5 = 2.5
- 7-अक्षर वाला शब्द:
(7*7/2) / 7 = 3.5
- 12-अक्षर का शब्द:
(12*12/2) / 12 = 6
किसी शब्द को संग्रहीत करने के लिए आवश्यक पंक्तियों की संख्या 1 से बढ़कर word_len
. हो जाती है . इस ओवरहेड से सावधान रहें। बड़ी मात्रा में अनावश्यक डेटा संग्रहीत करने से बचने के लिए अतिरिक्त कॉलम को न्यूनतम रखा जाना चाहिए। उदाहरण के लिए, एक पृष्ठ संख्या जिस पर शब्द मूल रूप से पाया गया था, ठीक होना चाहिए (अहस्ताक्षरित छोटे से सोचें), लेकिन शब्द पर व्यापक मेटाडेटा को प्रत्येक प्रत्यय के बजाय प्रति-शब्द के आधार पर एक अलग तालिका में संग्रहीत किया जाना चाहिए।पी>
विचारों
जहां हम 'शब्दों' (या टुकड़े) को विभाजित करते हैं, वहां एक व्यापार-बंद होता है। वास्तविक दुनिया के उदाहरण के रूप में:हम हाइफ़न के साथ क्या करते हैं? क्या हम विशेषण five-letter
. को स्टोर करते हैं? एक या दो शब्द के रूप में?
व्यापार बंद इस प्रकार है:
- जो कुछ भी टूटा हुआ है उसे एक तत्व के रूप में नहीं पाया जा सकता है। अगर हम
five
स्टोर करते हैं औरletter
अलग से,five-letter
के लिए खोज रहे हैं याfiveletter
विफल हो जाएगा। - कुछ भी नहीं टूटा हुआ अधिक संग्रहण स्थान लेगा। याद रखें, भंडारण की आवश्यकता शब्द की लंबाई में द्विघात रूप से बढ़ जाती है।
सुविधा के लिए, हो सकता है कि आप हाइफ़न को हटाना चाहें और fiveletter
को संग्रहित करना चाहें . शब्द अब five
. खोज कर पाया जा सकता है , letter
, और fiveletter
. (यदि आप किसी खोज क्वेरी से हाइफ़न भी हटाते हैं, तो उपयोगकर्ता अभी भी सफलतापूर्वक five-letter
ढूंढ सकते हैं ।)
अंत में, प्रत्यय सरणियों को संग्रहीत करने के तरीके हैं जो अधिक ओवरहेड नहीं लेते हैं, लेकिन मुझे अभी तक यकीन नहीं है कि वे डेटाबेस में अच्छी तरह से अनुवाद करते हैं।