- Magento में अनुक्रमण कैसे काम करता है
- वास्तव में यह क्या करता है?
- इसकी आवश्यकता क्यों है?
जवाबों:
Magento में विभिन्न प्रकार के सूचकांक हैं।
सभी इंडेक्सर्स चीजें तेजी से चलाने के लिए हैं।
मैं उनमें से केवल कुछ को यहां कवर करूंगा।
फ्लैट इंडेक्स
2 ऐसे इंडेक्स होते हैं। श्रेणियों के लिए एक और उत्पादों के लिए एक।
डिफ़ॉल्ट रूप से श्रेणी और उत्पाद संस्थाएँ (और ग्राहक और ग्राहक पते लेकिन वे इस स्थिति में महत्वपूर्ण नहीं हैं) ईएवी संस्थाएँ हैं। यह एक्स्टेंसिबिलिटी के लिए बहुत अच्छा है। लेकिन यह एक प्रदर्शन हत्यारा है क्योंकि सभी विशेषताओं के लिए सभी मान प्राप्त करने के लिए आपको बहुत सारे जॉइन या कई प्रश्नों की आवश्यकता होती है।
यहाँ वह जगह है जहाँ फ्लैट इंडेक्सर खेल में आता है।
यह ईएवी संरचना को एक सपाट संरचना में बदल देता है। मेरा मतलब है कि यह एक मेज बनाता है (मैगेंटो में प्रत्येक स्टोर दृश्य के लिए) जिसमें एक विशेषता के अनुरूप एक कॉलम होता है। इससे चयन तेजी से होता है। श्रेणियों के लिए सभी विशेषताओं को टेबल कॉलम में बदल दिया जाता है। केवल उन्हीं उत्पादों के लिए जिन्हें आप 'उत्पाद प्रविष्टि में प्रयुक्त' के रूप में चिह्नित करते हैं, क्योंकि आप सभी प्रकार के उत्पाद विभिन्न विशेषताओं के साथ बेच सकते हैं और एक गजिलीन कॉलम के साथ एक तालिका बनाना संभव नहीं हो सकता है।
इसके अलावा, कुछ उत्पाद निष्क्रिय हो सकते हैं या एक निश्चित वेबसाइट से संबंधित नहीं हो सकते हैं और उन्हें खोजने के लिए प्रविष्टियों में शामिल करने की कोई आवश्यकता नहीं है। उन्हें अनुक्रमणिका द्वारा बाहर रखा गया है।
उत्पन्न फ्लैट टेबल का उपयोग फ्रोंडेंड में डेटा पढ़ने के लिए किया जाता है। बैकएंड अभी भी ईएवी संरचना का उपयोग करता है।
कैटलॉग सर्च इंडेक्स
आप कई विशेषता मूल्यों द्वारा उत्पादों की खोज कर सकते हैं। उनमें से कुछ फ्लैट इंडेक्सर द्वारा उत्पन्न फ्लैट टेबल में शामिल नहीं हो सकते हैं। यह सूचकांक उत्पादों के लिए खोज योग्य विशेषता मानों के साथ एक तालिका में भरता है ताकि कीवर्ड के आधार पर उन्हें देखना आसान हो। एक तालिका (या एक फ़ील्ड) में सभी जानकारी होने से पूर्ण पाठ खोज का उपयोग करना और प्रासंगिक परिणाम प्राप्त करना संभव हो जाता है।
उत्पाद की कीमतें ।
एक उत्पाद की कीमत कई चर से प्रभावित हो सकती है। उदाहरण के लिए, ग्राहक समूह, वेबसाइट, कैटलॉग छूट नियम।
ऊपर के समान, उनकी कीमतों के साथ उत्पादों को प्राप्त करने का मतलब बहुत सारे जोड़ या एकाधिक चयन होंगे। इसके अलावा बंडल उत्पादों में एक अजीब मूल्य निर्धारण प्रणाली है। यह अनुक्रमणिका कुछ तालिकाओं ( catalog_product_index_price_*
) में डेटा को एकत्रित करती है और चयन (छांटना और फ़िल्टर करना) को बहुत आसान बना देती है।
कैटलॉग यूआरएल रिवाइराइट्स
यह यूआरएल रीराइट नियमों को साफ करके सेट करता है कि कौन सा यूआरएल किस उत्पाद या श्रेणी से मेल खाता है। Url प्रबंधन आंतरिक प्रणाली के लिए यह तय करना आसान है कि आपको गैर-मानक url कहते समय किस पृष्ठ को देखना चाहिए। सभी उत्पाद और श्रेणियों URL कुंजी के माध्यम से खोजने के बजाय यह सिर्फ एक तालिका में खोज करता है।
श्रेणी उत्पाद
मैगेंटो में आप 'एंकर' नाम की श्रेणी विशेषता को सही या गलत पर सेट कर सकते हैं। यदि यह सच है तो इसका मतलब है कि प्रश्न की श्रेणी बाल श्रेणियों से सभी उत्पादों को सूचीबद्ध करेगी। इस रीयलटाइम को फिर से निर्धारित करते हुए, यह केवल एक तालिका पढ़ने की तुलना में अधिक संसाधन लेगा। यह अनुक्रमणिका आपके द्वारा बैकएंड में सेट किए गए संघों और श्रेणियों पर 'एंकर' ध्वज के आधार पर उत्पादों और श्रेणियों के बीच संबंध बनाती है।
स्टॉक की स्थिति
सरल उत्पादों के लिए यह आसान है। वे स्टॉक में या स्टॉक से बाहर हो सकते हैं, लेकिन कॉन्फ़िगर करने योग्य, समूहीकृत और बंडल के लिए यह आसान नहीं है। वे मुख्य उत्पाद से जुड़े बाल उत्पादों के आधार पर स्टॉक में या स्टॉक से बाहर हो सकते हैं। फिर से (मैं यहां सिर्फ अपने आप को दोहरा रहा हूं) उनकी स्थिति को वास्तविक समय मिलने से बहुत सारे प्रश्नों का मतलब होगा।
उत्पाद विशेषताओं ।
यह एक ही कारण के लिए स्तरित नेविगेशन में इस्तेमाल किया जा सकता है कि सभी विशेषताओं को एकत्र करता है। तेजी से पढ़ने के लिए उन सभी को एक स्थान पर रखना।
टैग एकत्रीकरण
मुझे नहीं पता कि यह क्या करता है। मैंने कभी भी वास्तविक लाइव प्रोजेक्ट में टैग का उपयोग नहीं किया है।
इसके लिए श्रेय नहीं लिया जा सकता क्योंकि यह मूल पोस्ट से लिया गया है: https://stackoverflow.com/questions/4945307/can-someone-explain-magentos-indexing-feature-in-dadail
Magento के इंडेक्सिंग केवल आत्मा में डेटाबेस-लेवल इंडेक्सिंग के समान है। जैसा कि एंटोन बताता है, किसी साइट के तेजी से संचालन की अनुमति देने के लिए यह अपभ्रंश की प्रक्रिया है। मुझे Magento डेटाबेस संरचना के पीछे के कुछ विचारों को समझाने की कोशिश करें और यह गति में संचालित करने के लिए अनुक्रमण को आवश्यक क्यों बनाता है।
अधिक "विशिष्ट" MySQL डेटाबेस में, कैटलॉग उत्पादों को संग्रहीत करने के लिए एक तालिका को कुछ इस तरह संरचित किया जाएगा:
PRODUCT:
product_id INT
sku VARCHAR
name VARCHAR
size VARCHAR
longdesc VARCHAR
shortdesc VARCHAR
... etc ...
यह पुनर्प्राप्ति के लिए तेज़ है, लेकिन यह ईकामर्स सॉफ़्टवेयर के एक टुकड़े के लिए एक मूलभूत समस्या छोड़ देता है: जब आप अधिक विशेषताओं को जोड़ना चाहते हैं तो आप क्या करते हैं? यदि आप खिलौने बेचते हैं, और आकार के कॉलम के बजाय, आपको age_range की आवश्यकता है? ठीक है, आप एक और कॉलम जोड़ सकते हैं, लेकिन यह स्पष्ट होना चाहिए कि एक बड़े स्टोर में (उदाहरण के लिए वॉलमार्ट, उदाहरण के लिए), इसका परिणाम उन पंक्तियों में होगा जो 90% खाली हैं और नई विशेषताओं के रखरखाव का प्रयास करना असंभव है।
इस समस्या से निपटने के लिए, Magento ने छोटी इकाइयों में तालिकाओं को विभाजित किया। मैं इस उत्तर में पूरे EAV सिस्टम को फिर से बनाना नहीं चाहता, इसलिए कृपया इस सरलीकृत मॉडल को स्वीकार करें:
PRODUCT:
product_id INT
sku VARCHAR
PRODUCT_ATTRIBUTE_VALUES
product_id INT
attribute_id INT
value MISC
PRODUCT_ATTRIBUTES
attribute_id
name
अब product_attributes में नए मान दर्ज करके और फिर product_attribute_values में आसन्न रिकॉर्ड डालकर विशेषताओं को जोड़ना संभव होगा। यह मूल रूप से मैगेंटो करता है (डेटाटाइप के लिए थोड़ा अधिक सम्मान के साथ जो मैंने यहां प्रदर्शित किया है)। वास्तव में, अब दो उत्पादों के लिए समान क्षेत्र होने का कोई कारण नहीं है, इसलिए हम विभिन्न गुणों के साथ पूरे उत्पाद प्रकार बना सकते हैं!
हालाँकि, यह लचीलापन एक लागत पर आता है। अगर मैं अपने सिस्टम में एक शर्ट का रंग खोजना चाहता हूं (एक तुच्छ उदाहरण), मुझे खोजने की आवश्यकता है:
Magento इस तरह से काम करता था, लेकिन यह धीमी गति से मृत था। इसलिए, बेहतर प्रदर्शन की अनुमति देने के लिए, उन्होंने एक समझौता किया: एक बार दुकान के मालिक ने उन विशेषताओं को परिभाषित किया जो वे चाहते हैं, आगे बढ़ें और शुरुआत से बड़ी तालिका बनाएं। जब कुछ बदलता है, तो इसे अंतरिक्ष से nuke और फिर से उत्पन्न करें। इस तरह, डेटा मुख्य रूप से हमारे अच्छे लचीले प्रारूप में संग्रहीत होता है, लेकिन एक ही तालिका से क्वेरी की जाती है।
ये परिणामी लुकअप टेबल Magento के "अनुक्रमित" हैं। जब आप पुन: सूचकांक करते हैं, तो आप पुरानी तालिका को उड़ा रहे हैं और इसे फिर से बना रहे हैं।
आशा है कि चीजों को थोड़ा स्पष्ट करता है!
nuke it from space
, अच्छा :)
Magento एक बहुत शक्तिशाली और जटिल प्रणाली है। यह बड़े पैमाने पर डेटा के साथ काम करने की अनुमति देता है, लेकिन जब डेटाबेस रिकॉर्ड के टन के साथ अतिभारित होता है तो यह भारी और धीमा हो जाता है। Magento इस समस्या को हल करने के लिए अनुक्रमित का उपयोग करता है। इंडेक्स कुछ फ्लैट डेटा के साथ अतिरिक्त डेटाबेस टेबल हैं, जो डेटाबेस से तेजी से प्रतिक्रियाओं को व्यवस्थित करने की अनुमति देता है।
डिफ़ॉल्ट रूप से, कोर सिस्टम प्रत्येक आइटम के सेव पर इंडेक्स अपडेट करता है। लेकिन कुछ मामलों में आपको इसे मैन्युअल रूप से करने की आवश्यकता होती है, उदाहरण के लिए कुछ प्रकार की सामूहिक क्रियाएं आदि। आप किसी भी समय एडमिन बैकएंड से अपडेट कर सकते हैं (एडमिन-> सिस्टम-> इंडेक्स मैनेजमेंट)। लेकिन कभी-कभी यह समस्याओं का कारण बनता है।
उदाहरण के लिए, यदि आपके पास 10k + उत्पाद और बहुत सी श्रेणियां हैं, तो 'कैटलॉग url rewrite' इंडेक्स के पुनर्निर्माण में घंटों लग सकते हैं। तब php स्क्रिप्ट सिर्फ ज्यादा से ज्यादा max_execution_time की वजह से टूट सकती है। कमांड लाइन से reindex प्रक्रिया चलाकर कई समस्याओं को हल करने का एक तरीका है।