इंडेक्स को कब अमान्य किया जाता है?


23

मेरे पास एक दुकान है और सभी समय सभी सूचकांक अमान्य हैं। मैंने देखा, कि मेरे पास कोई सुराग नहीं है, जब एक सूचकांक अमान्य है।

क्या आप मुझे "सभी" घटनाओं की एक सूची दे सकते हैं, जो अमान्य पाने के लिए इनमें से एक या अधिक अनुक्रमित बनाती हैं?

  • उत्पाद विशेषताएं
  • उत्पाद की कीमतें
  • कैटलॉग URL पुनर्लेखन
  • उत्पाद फ्लैट डेटा
  • श्रेणी के उत्पाद
  • कैटलॉग सर्च इंडेक्स
  • टैग एकत्रीकरण डेटा
  • स्टॉक स्थिति

जवाबों:


18

कोड निर्देशिका पर एक grep करने से आपको उन फ़ाइलों की एक सूची मिल जाएगी जो अमान्य हो जाती हैं। grep -Ri '::STATUS_REQUIRE_REINDEX' .

निम्न कोर फ़ाइलें एक अमान्य ट्रिगर करती हैं

./core/Mage/CatalogSearch/Model/Indexer/Fulltext.php
./core/Mage/Catalog/Model/Product/Indexer/Flat.php
./core/Mage/Catalog/Model/Product/Indexer/Price.php
./core/Mage/Catalog/Model/Category/Indexer/Flat.php
./core/Mage/Catalog/Model/Category/Indexer/Product.php
./core/Mage/Catalog/Model/System/Config/Backend/Catalog/Product/Flat.php
./core/Mage/Catalog/Model/System/Config/Backend/Catalog/Category/Flat.php
./core/Mage/Catalog/Model/Indexer/Url.php
./core/Mage/Backup/Helper/Data.php
./core/Mage/CatalogInventory/Model/Indexer/Stock.php
./core/Mage/ImportExport/Model/Import.php

Magento CE कोर में बुनियादी घटनाएँ हैं

उत्पाद विशेषताएं

विशिष्ट कैटलॉग (फ्लैट उत्पाद का हिस्सा है), स्टोर, store_group अगर फ्लैट कैटलॉग उत्पाद सक्षम है

उत्पाद की कीमतें

कॉन्फ़िगरेशन सेटिंग्स की जाँच करें (जैसे मूल्य गुंजाइश) सहेजें। या उत्पाद को बचाने, वेबसाइट बनाने / हटाने

कैटलॉग URL पुनर्लेखन

कोई विशिष्ट अमान्य नहीं है

उत्पाद फ्लैट डेटा

विशिष्ट बचत विशेषता (फ्लैट उत्पाद का हिस्सा है), यदि फ्लैट कैटलॉग उत्पाद सक्षम है, तो फ्लैट उत्पाद सक्षम करने के बाद

श्रेणी फ्लैट डेटा

चेक फ्लैट कैटलॉग श्रेणी सक्षम और विशिष्ट सहेजें श्रेणी है, सक्षम के बाद फ्लैट श्रेणी

श्रेणी के उत्पाद

चेक फ्लैट कैटलॉग श्रेणी सक्षम और विशिष्ट बचत श्रेणी है

कैटलॉग सर्च इंडेक्स

यदि फ्लैट कैटलॉग उत्पाद सक्षम है तो विशिष्ट सेव एट्रिब्यूट (खोज योग्य विशेषताओं का हिस्सा है), स्टोर, स्टोर_ग्रुप

टैग एकत्रीकरण डेटा

नीचे उल्लिखित सामान्य स्थितियों को छोड़कर कभी भी अमान्य नहीं है

स्टॉक स्थिति

विशिष्ट सिस्टम> इन्वेंट्री टैब सेव में सेटिंग्स कॉन्फ़िगर करें, उदाहरण के लिए स्टॉक उत्पादों से बाहर दिखाएं

उन सभी को बैकअप से रोलबैक के बाद अमान्य कर दिया जाता है System > Tools > Backupऔर वेबसाइट, स्टोर और स्टोरेज से हटाने या बनाने, उत्पाद के लिए डेटाफ़्लो आयात करने के बाद निम्नलिखित को अमान्य कर दिया जाता है: कैटलॉग_प्रोडक्ट_प्राइस, कैटलॉग_कैटरोरी_प्रोडक्ट, कैटलॉग सर्च_फ्लोटेक्स, कैटलॉग_प्रोडक्ट_फ्लैट।

फ्लैट डेटा और URL इंडेकर जैसे कई इंडेक्स भी core_config_dataमानों को सहेज कर अमान्य किए जाते हैं।


14

हो सकता है कि यह इस साइट के लिए अस्थायी रूप से फिर से लिखने का विचार हो

Mage_Index_Model_Resource_Process

फिर कुछ ऐसा करें:

<?php

class YourNamespace_YourModule_Model_Resource_Process
    extends Mage_Index_Model_Resource_Process
{

    public function updateStatus($process, $status)
    {
        if ($status === Mage_Index_Model_Process::STATUS_REQUIRE_REINDEX) {
            Mage::log(sprintf('Indexer %s was invalidated.', $process->getIndexer()->getName()), null, 'invalid_index.log', true);
            foreach (debug_backtrace() as $db) {
                Mage::log(sprintf('%s::%s', $db['class'], $db['function']), null, 'invalid_index.log', true);
            }
        }
        return parent::updateStatus($process, $status);
    }

}

जब एक अनुक्रमणिका अमान्य हो जाती है और इसके लिए जिम्मेदार कॉल ट्रेस आसानी से इंगित करना चाहिए।


10

चूंकि अन्य लोगों ने पहले ही आपके सवालों के जवाब दिए हैं। मैंने सोचा कि यह समझाने के लिए बेहतर हो सकता है कि अनुक्रमण की आवश्यकता क्यों है और यह मैगेंटो और आधुनिक डेटाबेस के संबंध से कैसे संबंधित है

सूचकांक: नाम, विषयों आदि की एक वर्णमाला सूची, उन स्थानों के संदर्भ में जहां वे होते हैं, आमतौर पर एक पुस्तक के अंत में पाया जाता है।

तो डेटाबेस के संदर्भ में वास्तव में एक सूचकांक क्या है ?

एक सूचकांक एक डेटा संरचना है जो एक या एक से अधिक क्षेत्रों पर कई रिकॉर्ड बनाती है, और डेटा पुनर्प्राप्ति को गति देती है। यह डिस्क ब्लॉक के माध्यम से स्कैनिंग से बचने के लिए है जो डेटाबेस के माध्यम से खोजते समय एक टेबल स्पैन करता है।

और Magento के संदर्भ में अनुक्रमण क्या है ? एक डेटाबेस के भीतर एक डेटाबेस EAV (इकाई गुण मान) AKA के उप-उत्पाद। कई लुकअप टेबलों के साथ, सभी विशेषताओं को एकत्रित करते हुए चिह्नित किया गया है, ताकि तेजी से प्रश्नों और कम I / O, और CPU चक्रों के लिए सभी लुकअप तालिकाओं के एक समतल तालिका में संयोजित किया जा सके।

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

सामान्य तौर पर, मैगेंटो इंजीनियर्स को सबसे लचीला, अनुकूलन योग्य सिस्टम बनाने और बाद में प्रदर्शन के बारे में चिंता करने के साथ, सबसे पहले और सबसे महत्वपूर्ण काम सौंपा गया था। Magento इतना धीमा क्यों है?

ईएवी डेटा वेयरहाउसिंग के लिए महान है लेकिन लेनदेन के लिए भयानक है। तो हमें शुरुआत करने के लिए अनुक्रमित की आवश्यकता क्यों है? चूंकि रिलेशनल मॉडल के समान दृष्टिकोण को फिर से लागू किया गया है, इसलिए Magento को अब उन सभी चीजों को संभालना है जो MySQL आंतरिक रूप से खुद करता है। कुछ चीजों पर विचार करना, जैसे कि इंडेक्स पहले से ही MySQL टेबल में मौजूद है। इसे भी ध्यान में रखते हुए, EAV डेटा मॉडल पर अभी विचार करें:

  • ntity = तालिका
  • एक श्रद्धांजलि = क्षेत्र
  • V alue = मान

उसी को फिर से लागू किया जाना चाहिए, जो बहुत "विरोधी पैटर्न" आईएमओ है।

साथ ही, यह वही कारण है var/locksजो आप पाते हैं कि अनुक्रमणिका अनुक्रमण प्रक्रिया को लॉक करने के लिए किसका उपयोग करती है । समान कारणों से डेटाबेस में पंक्ति / तालिका लॉकिंग होती है।

अब जब कोई रिकॉर्ड होता है, तो मान लें कि उत्पाद का मूल्य बदल दिया गया है flat tableया index(जैसे कि MySQL इसे किस रूप में संदर्भित करेगा) को नए बदले गए डेटा पर प्रश्नों के लिए प्रतिबिंबित होने के लिए अपडेट किया जाना है और कई रिकॉर्डों के माध्यम से स्कैन किए बिना कुशलता से पाया जा सकता है। फ्लैट टेबल मौजूद हैं क्योंकि यह बहुत ही कारण में इस्तेमाल किया गया था MySQL उन्हें है, इस तरह के सूचकांक (एक किताब की तरह) के बिना इसे रिकॉर्ड प्राप्त करने के लिए एक पूर्ण टेबल स्कैन की आवश्यकता होती है। यह डिस्क और मेमोरी दोनों के साथ-साथ सीपीयू चक्रों के लिए अनुरोध किए गए डेटा का पता लगाने के लिए बड़े पैमाने पर I / O का अर्थ है, जो प्रदर्शन के लिए बहुत खराब है।

चूंकि मैगेंटो ईएवी डेटा मॉडल का उपयोग करता है, इसलिए कई लुकअप टेबल हैं जिन्हें अनुरोध किए गए डेटा का पता लगाने के लिए सभी डेटा को एक साथ स्कैन करने के लिए स्कैन करना होगा। यदि आप फ्लैट कैटलॉग को अक्षम करते हैं तो यही होता है। MySQL की तरह, कीमती I / O चक्रों के संरक्षण के दौरान रिकॉर्ड का पता लगाने के लिए एक इंडेक्स (फ्लैट टेबल) का उपयोग करके रिकॉर्ड बनाम स्कैन करने के लिए उपयोग किया जा सकता है। मेज बनाना और किसी भी इंडेक्स को नहीं जोड़ना वैसा ही है जैसा कि मैग्नेटो में फ्लैट टेबल का उपयोग नहीं करना। हालांकि ये दो परिदृश्य विभिन्न परिदृश्यों में अच्छी तरह से काम कर सकते हैं, इस सवाल का जवाब सोनासी के बेन में देखें । (संकेत में डेटा के दायरे को समझना शामिल है।)

हालांकि, यह आपके प्रश्न का सीधा जवाब नहीं है, चलती भागों को समझना और उनके लिए बेहतर रूप से तैयार होना कुछ ऐसे सिरदर्द को कम करने में मदद करना चाहिए जो अनुक्रमण के साथ आते हैं। " लक्षण के बजाय समस्या का इलाज करें। "

आधुनिक डेटाबेस सिस्टम के इंटर्नल्स में अधिक खोज करना बेहतर समझ के साथ मदद कर सकता है कि कैसे और क्यों इंडेक्सिंग आवश्यक है और कैसे यह (कुछ) मैगेंटो के इंडेक्सिंग से भी संबंधित है।

संक्षेप में: समाधान लागू करने से पहले अपनी समस्या को समझें। जैसा कि डेटा का प्रत्येक बिट बिल्कुल वैसा ही नहीं होगा और योजना के कार्यान्वयन और समाधान को लागू करने के बाद आपको समस्या की अच्छी / पूरी समझ मिल जाएगी। डेटाबेस अनुकूलन परिवर्तन प्रबंधन के लिए बहुत फायदेमंद हो सकता है। जैसे कि खूंखार को रोकना DEADLOCKS

आप अपने सभी इंडेक्सर्स को Manualसेट-ऑफ टाइम पीक टाइम (जब एड्मिन दूर होते हैं) पर इंडेक्स को फिर से बनाने के लिए वैकल्पिक इंडेक्स की स्थापना पर विचार करना चाहते हैं। केवल Product Pricesऔर Stock Statusसेट होना चाहिए Update on Save

अब विचार करें कि तकनीकी दृष्टि से अनुक्रमण कैसे काम करता है। मुख्य मॉड्यूल अनुक्रमण के लिए जिम्मेदार है Mage_Index। इंडेक्सर के बुनियादी मॉडल: Indexer, Process, Event

Mage_Index_Model_Indexerअनुक्रमणिका है, अन्य मॉड्यूल के साथ सभी इंटरैक्शन Mage_Indexइस सेवा के माध्यम से होते हैं। इसमें निम्नलिखित विधियाँ शामिल हैं:

  • processEntityAction() ईवेंट बनाता और पंजीकृत करता है और अनुक्रमण प्रक्रिया शुरू करता है
  • logEvent() एक घटना बनाता है और बाद के अनुक्रमण के लिए इसे पंजीकृत करता है;
  • indexEvent() अनुक्रमण घटनाओं को चलाता है;
  • getProcessesCollection()आम तौर पर सार बदलने के बाद सभी प्रक्रियाओं जैसे उत्पाद गुण, उत्पाद की कीमतें, कैटलॉग यूआरएल रिवाइराइट्स आदि का संग्रह लौटाता है, जैसे कि विधि _afterSaveया _afterCommitहम आंशिक पुन: सूचकांक करते हैं।

Mage_Index_Model_Processया प्रक्रिया अपने इंडेक्सर का सार है कि दुकानों की स्थिति, पिछले रन आपरेशन। सभी प्रक्रियाओं को तालिका में संग्रहीत किया जाता है index_process। कार्यक्रम में एक विधि है getIndexer()जो मॉडल के सूचकांक को वापस करती है। इंडेक्स मॉडल की प्रक्रिया द्वारा अधिकांश कार्य सौंपे गए हैं।

Mage_Index_Model_Eventहोने वाली घटना के बारे में जानकारी संग्रहीत करता है। उदाहरण के लिए, हम उत्पाद को संग्रहीत करते हैं और सहेजने के बाद, हम एक नया ईवेंट बनाते हैं और इस बारे में जानकारी संग्रहीत करते हैं कि हमने किस प्रकार की इकाई को बचाया है कि किस आईडी में आत्मा है और इस पदार्थ के लिए हमने क्या कार्रवाई की है।

अमान्य होने की एक सामान्य सूची:

  1. कैटलॉग / उत्पाद (बचाओ, DELETE, MASS_ACTION)
  2. सूची / श्रेणी (बचाओ, DELETE)
  3. कैटलॉग / रिसोर्स_एवी_टैब (सेव, DELETE)
  4. ग्राहक / समूह (बचाओ)
  5. कैटलॉगवेंट्री / स्टॉक_इटेम (बचाओ)
  6. टैग / टैग (बचाओ)
  7. कोर / स्टोर (बचाओ, DELETE)
  8. कोर / store_group (बचाओ, DELETE)
  9. कोर / वेबसाइट (SAVE, DELETE)

config.xmlलेन-देन की बचत पर मॉड्यूल में पंजीकृत सूचकांक के साथ कोई भी संसाधन मॉडल । afterCommitCallback()एक उपसर्ग के साथ कहा जाता है। यह वह जगह है जहां सूचकांक घटनाओं को लॉग किया जाता है, क्योंकि यह एक सफल लेनदेन के अंत में है।

... और यह मुझे दुखी करता है कि EAV अभी भी Magento 2 में है। :(

संदर्भ:


1
merch.docs.magento.com/ee/user_guide/system-operations/… "देखें कि ट्रिगर ट्रिगर"
B00MER
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.