অফিসিয়াল ডকুমেন্টেশনে:
https://devdocs.magento.com/guides/v2.3/extension-dev-guide/indexing.html
এখানে স্টিমেন্ট রয়েছে:
`Allows tracking database changes for a certain entity (product, category and so on) and running change handler.
Emulates the materialized view technology for MySQL using triggers and separate materialization process (provides executing PHP code instead of SQL queries, which allows materializing multiple queries).`
এমভিউ মানে মেটেরালাইজড ভিউ যা সময়ে সময়ে একটি ডাটাবেসের স্ন্যাপশট।
https://en.wikedia.org/wiki/Materialized_view
কেন আমাদের টেবিলগুলি নকল করতে হবে। সূচকগুলি চালানো ব্যয়বহুল, বিশেষত যখন বিভাগের পৃষ্ঠাগুলিতে ট্র্যাফিক থাকে, গ্রাহকরা অর্ডার এবং প্রশাসকদের পণ্য সংরক্ষণ করে। পণ্য সংরক্ষণে ক্যাশে অবৈধ হয়ে যায় (বিষয় ছাড়াই)। স্টক ইনডেক্সারের ক্ষেত্রে, মৃত্যুদন্ড কার্যকর হওয়ার আগে, এটি ক্যাশে ট্যাগগুলি প্রভাবিত সত্তা আইডিগুলি পরিষ্কার করার জন্য প্রেরণ করে (পূর্ণ পৃষ্ঠা ক্যাশে প্রকার)। ম্যাজেন্টো ২.০ বিভাগে ক্রয়কৃত পণ্যগুলির আইডি প্রেরণ করা হয়। ম্যাজেন্টো ২.১ এ পণ্য আইডি প্রেরণ করা হয়।
এখানে 2 টি মাইএসকিউএল টেবিল রয়েছে যা সূচক কোড এবং স্থিতিগুলি রাখে:
indexer_state
mview_state
mview_state
সাথে কাজ করে Update by Schedule
এডমিন> সিস্টেম> Indexer ম্যানেজমেন্ট
Update by Schedule
সূচকদের ক্রোন চালানো হয়।
এখানে 3 টি এন্ট্রি রয়েছে Magento_Indexer/etc/contab.xml
:
<group id="index">
<job name="indexer_reindex_all_invalid" instance="Magento\Indexer\Cron\ReindexAllInvalid" method="execute">
<schedule>* * * * *</schedule>
</job>
<job name="indexer_update_all_views" instance="Magento\Indexer\Cron\UpdateMview" method="execute">
<schedule>* * * * *</schedule>
</job>
<job name="indexer_clean_all_changelogs" instance="Magento\Indexer\Cron\ClearChangelog" method="execute">
<schedule>0 * * * *</schedule>
</job>
</group>
indexer_reindex_all_invalid
উপর চালানো হয় indexer_state
। ক্রোনটিতে এখনও 'নরমাল' ইনডেক্সার চালানোর দরকার আছে
indexer_update_all_views
চালানো হয় mview_state
indexer_clean_all_changelogs
- দ্বারা ব্যবহৃত চেঞ্জলগগুলি সাফ করে mview_state
লক্ষ্য করুন ক্রন indexer দলের কাজের, যেমন ঘোষণা পৃথক পিএইচপি প্রক্রিয়ায় দেশ পরিচালিত etc/contab_groups.xml
:
<use_separate_process>1</use_separate_process>
।
চেঞ্জলগ টেবিলগুলি হ'ল:
[indexer name]_cl
(প্রত্যয়যুক্ত _cl
)। যেমন cataloginventory_stock_cl
। আপনার যদি সূচকগুলি সেট করে থাকে Update by Schedule
এবং প্রশাসকে কোনও পণ্য সংরক্ষণ করে থাকেন তবে entity_id
আপনি এই টেবিলটিতে সেই পণ্যটি দেখতে পাবেন । এটি একটি বড় চেনাশোনা, আমি জায়গা অর্ডার ভাবছি বা চালান তৈরি করা এখানেও একটি এন্ট্রি যুক্ত করবে।
কেউ কীভাবে নতুন বস্তুগত দৃষ্টিভঙ্গি তৈরি করবেন এবং ইন্টারফেস পদ্ধতিগুলি কী কী প্রয়োজন (স্নিপেট বেলোতে অর্ডার সম্পর্কে উপরের বিবৃতিটি উপেক্ষা করুন) সম্পর্কে অফিসিয়াল ডিডোকের উদাহরণ দিয়েছেন:
<?php
<VendorName>\Merchandizing\Model\Indexer;
class Popular implements \Magento\Framework\Indexer\ActionInterface, \Magento\Framework\Mview\ActionInterface
{
public function executeFull(); //Should take into account all placed orders in the system
public function executeList($ids); //Works with a set of placed orders (mass actions and so on)
public function executeRow($id); //Works in runtime for a single order using plugins
public function execute($ids); //Used by mview, allows you to process multiple placed orders in the "Update on schedule" mode
}
এটি অর্থবোধ করবে:
//public function execute($ids); Used by mview, allows you to process multiple **entities** in the "Update on schedule" mode
}
যেখানে $ids
প্যারামিটারে *_cl
সারণীগুলি থেকে সত্তা আইডি রয়েছে ।
ক্যাশে অবৈধকরণ এবং সূচকগুলির মধ্যে লিঙ্কটি কী। বিভাগ পৃষ্ঠাতে এখন সম্পূর্ণ পৃষ্ঠা ক্যাশেড (অন্তর্নির্মিত পূর্ণ পৃষ্ঠা ক্যাশে বা বার্নিশের মাধ্যমে)।
আছে \Magento\Indexer\Model\Processor\InvalidateCache::afterUpdateMview
:
/**
* Update indexer views
*
* @param \Magento\Indexer\Model\Processor $subject
* @return void
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public function afterUpdateMview(\Magento\Indexer\Model\Processor $subject)
{
if ($this->moduleManager->isEnabled('Magento_PageCache')) {
$this->eventManager->dispatch('clean_cache_after_reindex', ['object' => $this->context]);
}
}
ফিরে Magento\Indexer\Cron\UpdateMview::execute()
:
/**
* Regenerate indexes for all invalid indexers
*
* @return void
*/
public function execute()
{
$this->processor->updateMview();
}
Magento\Indexer\Model\Processor::updateMview()
:
/**
* Update indexer views
*
* @return void
*/
public function updateMview()
{
$this->mviewProcessor->update('indexer');
}
ইন app/etc/di.xml
থাকে:
<preference for="Magento\Framework\Mview\ProcessorInterface" type="Magento\Framework\Mview\Processor" />
/**
* Materialize all views by group (all views if empty)
*
* @param string $group
* @return void
*/
public function update($group = '')
{
foreach ($this->getViewsByGroup($group) as $view) {
$view->update();
}
}
Magento\Framework\Mview\ViewInterface
/**
* Materialize view by IDs in changelog
*
* @return void
* @throws \Exception
*/
public function update();
app/etc/di.xml
<preference for="Magento\Framework\Mview\ViewInterface" type="Magento\Framework\Mview\View" />
ইন Magento\Framework\Mview\View::update()
থাকে:
$action = $this->actionFactory->get($this->getActionClass());
$this->getState()->setStatus(View\StateInterface::STATUS_WORKING)->save();
..
$action->execute($ids);
..
আপনি যদি vendor/
ডিরেক্টরিতে অনুসন্ধান করেন তবে Magento\Framework\Mview\ActionInterface
উদাহরণস্বরূপ এটি পাবেন:
ইন \Magento\CatalogInventory\Model\Indexer
:
class Stock implements \Magento\Framework\Indexer\ActionInterface, \Magento\Framework\Mview\ActionInterface
এই শ্রেণিতে আছে:
/**
* Execute materialization on ids entities
*
* @param int[] $ids
*
* @return void
*/
public function execute($ids)
{
$this->_productStockIndexerRows->execute($ids);
}
এবং দেখে মনে হচ্ছে এটি 'সাধারণ' সূচকের 'ক্লাসে চলে গেছে' এক্সিকিউটিভ পদ্ধতি যা এমভিউ দ্বারা ব্যবহৃত হয়।
স্টক সূচক পরে ক্যাশে পরিষ্কার সম্পর্কে । যখন চেকআউটে কোনও অর্ডার দেওয়া হয়, তখন এই পর্যবেক্ষককে ব্যবহার করে পরিমাণগুলি বিয়োগ করা হয়:\Magento\CatalogInventory\Observer\SubtractQuoteInventoryObserver
$itemsForReindex = $this->stockManagement->registerProductsSale(
$items,
$quote->getStore()->getWebsiteId()
);
আরও, অন্য পর্যবেক্ষক সূচককে ট্রিগার করে (তবে সিডিউল অনুসারে এমভিউ / ইনডেক্সারে সরাসরি নয়):
\Magento\CatalogInventory\Observer\ReindexQuoteInventoryObserver
if ($productIds) {
$this->stockIndexerProcessor->reindexList($productIds);
}
মিউউ ক্ষেত্রে, যখন নতুন পরিমাণগুলি বিয়োগ করা হয় SubtractQuoteInventoryObserver
, তখন মাইএসকিউএল ট্রিগার (এমভিউর জন্য তৈরি) একটি সারি সন্নিবেশ করবে cataloginventory_stock_cl
, চিহ্নিত করে যে সেই ক্রয়কৃত পণ্যের আইডিতে একটি রিইন্ডেক্স (স্টক এবং ফুলটেক্সট) করা দরকার। এমভিউর জন্য অনেকগুলি মাইএসকিউএল ট্রিগার তৈরি করা হয়েছে। তাদের সাথে সমস্ত দেখুন SHOW TRIGGERS;
।
যখন কোনও পণ্য চেকআউট করার পরে স্টক থেকে বেরিয়ে যায় আপনি সেই টেবিলটিতে 2 সারি sertedোকানো দেখতে পাবেন (ম্যাজেন্টো এই 2 পর্যবেক্ষকের মধ্যে 2 বার স্টক আইটেমটি সংরক্ষণ করে)।
ক্রোন যখন মভিউ মোডে স্টক সূচকটি চালায় তখন প্রভাবিত পণ্য আইডিগুলি (এম 2.1 এ) বা বিভাগ আইডির (এম 2.0 এ) ক্যাশে ট্যাগ হিসাবে ক্যাশে পরিষ্কার প্রেরণ করা হয়। ক্যাশে দ্বারা আমি সম্পূর্ণ পৃষ্ঠার ক্যাশে প্রকারের অর্থ। উদাহরণ: catalog_product_99
বা অন্যান্য ক্যাশে ট্যাগ ফর্ম্যাটটি ম্যাজেন্টো সংস্করণের উপর নির্ভর করে। যখন ভিউ সক্ষম করা থাকে না তখন একই।
\Magento\CatalogInventory\Model\Indexer\Stock\AbstractAction::_reindexRows
...
$this->eventManager->dispatch('clean_cache_by_tags', ['object' => $this->cacheContext]);
এবং ম্যাজেন্টো_প্যাজক্যাচে এমন পর্যবেক্ষক রয়েছে \Magento\PageCache\Observer\FlushCacheByTags
যা পুরো পৃষ্ঠা ক্যাশে প্রকারের ট্যাগগুলি সাফ করবে। এটি বিল্ট-ইন পুরো পৃষ্ঠা ক্যাশে করার জন্য এটি করে। বার্নিশ সম্পর্কিত কোড রয়েছে \Magento\CacheInvalidate\Observer\InvalidateVarnishObserver
।
একটি নিখরচায় এক্সটেনশন রয়েছে যা গ্রাহক চেকআউট করার পরেও স্টক পণ্যগুলিতে ক্যাশে পরিষ্কার অস্বীকার করবে:
https://github.com/daniel-ifrim/innovo-cache-improve
ডিফল্ট ম্যাজেন্টো ২.২.x সালে চেকআউট চালু হওয়ার পরে কেবল স্টক পণ্যগুলির বাইরে ক্যাশে পরিষ্কার করা দেখুন \Magento\CatalogInventory\Model\Indexer\Stock\CacheCleaner
।
আমি ভাবছি ইনডেক্সারের জন্য ক্রোন এক্সিকিউশনটি Admin > Stores > Configuration > Advanced > System > Cron configuration options for group: index
1 মিনিটেরও বেশি সেট করা উচিত।
Mview
বোঝায় , যা সূচক টেবিলগুলি।