সূচকগুলি কখন বাতিল হয়?


23

আমার একটি দোকান আছে এবং সমস্ত সময় সমস্ত সূচকগুলি অবৈধ। আমি লক্ষ্য করেছি, আমার কোনও সূত্র নেই, যখন কোনও সূচকটি অবৈধ হয়।

আপনি কি আমাকে "সমস্ত" ইভেন্টের একটি তালিকা দিতে পারেন, যা এই সূচকগুলির এক বা একাধিককে অবৈধ করে তোলে?

  • পণ্য বৈশিষ্ট্য
  • পণ্যের দাম
  • ক্যাটালগ ইউআরএল পুনর্লিখন
  • পণ্য ফ্ল্যাট ডেটা
  • বিভাগ পণ্য
  • ক্যাটালগ অনুসন্ধান সূচি
  • সমষ্টি ডেটা ট্যাগ করুন
  • স্টক অবস্থা

উত্তর:


18

কোড ডিরেক্টরিতে একটি গ্রেপ করা আপনাকে এমন ফাইলগুলির একটি তালিকা পাবে যা একটি অবৈধকরণকে ট্রিগার করে। 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

ম্যাজেন্টো সিই কোরের মূল ইভেন্টগুলি

পণ্য বৈশিষ্ট্য

নির্দিষ্ট সংরক্ষণ বৈশিষ্ট্য (ফ্ল্যাট পণ্যের অংশ), ফ্ল্যাট ক্যাটালগ পণ্য সক্ষম থাকলে স্টোর, স্টোর_গ্রুপ

পণ্যের দাম

কনফিগারেশন সেটিংস সংরক্ষণের (দামের স্কোপের মতো) সংরক্ষণ করা হচ্ছে checking বা পণ্য সংরক্ষণ, ওয়েবসাইট তৈরি / মুছুন

ক্যাটালগ ইউআরএল পুনর্লিখন

কোন নির্দিষ্ট অবৈধতা

পণ্য ফ্ল্যাট ডেটা

নির্দিষ্ট সংরক্ষণ বৈশিষ্ট্য (ফ্ল্যাট পণ্য অংশ), যদি ফ্ল্যাট ক্যাটালগ পণ্য সক্ষম করা থাকে, পরে ফ্ল্যাট পণ্য সক্ষম করুন

বিভাগ ফ্ল্যাট ডেটা

চেকটি ফ্ল্যাট ক্যাটালগ বিভাগটি সক্ষম এবং নির্দিষ্ট সংরক্ষণের বিভাগটি সক্ষম করার পরে ফ্ল্যাট বিভাগটি সক্ষম করুন

বিভাগ পণ্য

চেকটি ফ্ল্যাট ক্যাটালগ বিভাগটি সক্ষম এবং নির্দিষ্ট সেভ বিভাগে রয়েছে

ক্যাটালগ অনুসন্ধান সূচি

নির্দিষ্ট সংরক্ষণ বৈশিষ্ট্য (অনুসন্ধানযোগ্য বৈশিষ্ট্যের অংশ), ফ্ল্যাট ক্যাটালগ পণ্য সক্ষম থাকলে স্টোর, স্টোর_গ্রুপ

সমষ্টি ডেটা ট্যাগ করুন

নীচে উল্লিখিত সাধারণ শর্ত ছাড়া কখনও অবৈধ হয় না

স্টক অবস্থা

নির্দিষ্ট সিস্টেম> ইনভেন্টরি ট্যাবে কনফিগারেশন সেটিংস সংরক্ষণ করুন, উদাহরণস্বরূপ স্টক পণ্যগুলির বাইরে দেখান

এগুলি সমস্ত System > Tools > Backupওয়েবসাইট, স্টোর এবং স্টোরভিউ থেকে তৈরি করা, মুছতে বা ঘুরে দেখার থেকে ব্যাকআপের উপরে রোলব্যাকের পরে অবৈধ হয় পণ্যটির জন্য ডেটাফ্লো আমদানি চালনার পরে নিম্নলিখিতটি অবৈধ: ক্যাটালগ_প্রডাক্ট_প্রাইস, ক্যাটালগ_শ্রেণি_প্রোডাক্ট, ক্যাটালগ অনুসন্ধান_ফুলটিেক্সট, ক্যাটালগ_প্রডেক্ট_ফ্লাট

বেশ কয়েকটি সূচক যেমন ফ্ল্যাট ডেটা এবং ইউআরএল সূচকও 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

যেহেতু অন্যরা ইতিমধ্যে আপনার প্রশ্নের সুনির্দিষ্ট উত্তর দিয়েছে। আমি ভেবেছিলাম কেন কেন ইনডেক্সিং প্রয়োজন এবং এটি কীভাবে ম্যাজেন্টো এবং আধুনিক ডাটাবেসের সাথে সম্পর্কের সাথে সম্পর্কিত তা ব্যাখ্যা করা ভাল ।

সূচক: নাম, বিষয় ইত্যাদির বর্ণানুক্রমিক তালিকা, যেখানে তারা ঘটে থাকে সেই জায়গাগুলির উল্লেখ, সাধারণত কোনও বইয়ের শেষে পাওয়া যায়।

সুতরাং ডাটাবেসের ক্ষেত্রে একটি সূচক ঠিক কী ?

একটি সূচক একটি ডেটা স্ট্রাকচার যা এক বা একাধিক ক্ষেত্রের মধ্যে বেশ কয়েকটি রেকর্ড সাজিয়ে তোলে এবং ডেটা পুনরুদ্ধারের গতি বাড়ায়। ডাটাবেসগুলির মাধ্যমে অনুসন্ধানের সময় এটি কোনও টেবিল দ্বারা বিস্তৃত ডিস্ক ব্লকগুলির মাধ্যমে স্ক্যান করা এড়ানো।

এবং ম্যাজেন্টোর নিরিখে ইনডেক্সিং কী ? EAV (সত্তা গুণ মান) এর উপ-পণ্য একা একটি ডাটাবেসের মধ্যে একটি ডাটাবেস। একাধিক অনুসন্ধান সারণী সহ, দ্রুত অনুসন্ধান এবং কম আই / ও, এবং সিপিইউ চক্রের জন্য, সমস্ত অনুসন্ধানের টেবিলের একটি সমতল টেবিলের সাথে একত্রে সূচকযুক্ত হিসাবে চিহ্নিত সমস্ত বৈশিষ্ট্য সংগ্রহ করা।

আমি একটি উল্লেখ স্মরণ করি যে প্রথমদিকে যখন ম্যাজেন্টো বিকাশ করা হচ্ছিল তখন অগ্রাধিকার তালিকার উপর নমনীয়তা বেশি ছিল যা তারা EAV ডেটা মডেলের সাথে কেন যেতে বেছে নিয়েছিল তা বোধগম্য। শেষ পর্যন্ত তবে এই ধরনের নমনীয়তার জন্য ব্যয় সম্পাদনের জন্য ব্যয় হয়েছিল এবং এটি শুরু থেকেই ম্যাজেন্টোকে জর্জরিত করেছে।

সাধারণভাবে, ম্যাজেন্টো ইঞ্জিনিয়ারদের প্রথম এবং সর্বাগ্রে সর্বাধিক নমনীয়, কাস্টমাইজযোগ্য সিস্টেম তৈরি এবং পরবর্তী সময়ে কর্মক্ষমতা সম্পর্কে উদ্বেগের সাথে দায়িত্ব দেওয়া হয়েছিল। ম্যাজেন্টো এত ধীর কেন?

EAV ডেটা গুদামজাতের জন্য দুর্দান্ত তবে লেনদেনের জন্য ভয়ানক। তাহলে আমাদের সূচকের প্রয়োজন কেন শুরু করা উচিত? যেহেতু সম্পর্কের মডেলটির একই পদ্ধতির পুনরায় প্রয়োগ করা হয়েছে, তাই মাইজেন্টোকে এখন মাইএসকিউএল অভ্যন্তরীণভাবে সমস্ত কিছু পরিচালনা করতে হবে। কিছু বিষয় বিবেচনা করা উচিত, যেমন মাইএসকিউএল টেবিলগুলিতে সূচকগুলি ইতিমধ্যে বিদ্যমান। এটিও মাথায় রেখে, এখনই ইএভি ডেটা মডেলটি বিবেচনা করুন:

  • E ntity = টেবিল
  • একটি ttribute = ক্ষেত্র
  • ভি alue = মান

একইটি পুনরায় প্রয়োগ করতে হবে, এটি অত্যন্ত "অ্যান্টি-প্যাটার্ন" আইএমও।

এছাড়াও, সূচকটি সূচক প্রক্রিয়াটি লক করতে ব্যবহারvar/locks করে এমনটি একই কারণে আপনি খুঁজে পান । একই কারণে ডাটাবেসে সারি / সারণী লক করা থাকে।

এখন যখন একটি রেকর্ড, বলুন একটি পণ্যের মান পরিবর্তন করা হয়েছে flat tableবা index(মাইএসকিউএল এটি হিসাবে কী উল্লেখ করবে) নতুন রেকর্ডের মাধ্যমে স্ক্যান না করে দ্রুত এবং দক্ষতার সাথে সন্ধান করা নতুন পরিবর্তিত তথ্য সম্পর্কিত প্রশ্নের জন্য প্রতিফলিত হওয়ার জন্য আপডেট করতে হবে। ফ্ল্যাট টেবিলগুলির উপস্থিতি যেমন মাইএসকিউএল তাদের একই কারণেই ব্যবহার করে, যেমন একটি সূচি (কোনও বইয়ের মতো) ছাড়াই রেকর্ডটি পুনরুদ্ধার করতে একটি পূর্ণ টেবিল স্ক্যান প্রয়োজন scan এর অর্থ হ'ল ডিস্ক এবং মেমরি উভয়ের জন্য প্রচুর পরিমাণে I / O পাশাপাশি অনুরোধ করা ডেটা সনাক্ত করতে সিপিইউ চক্র, যা কার্য সম্পাদনের জন্য খুব খারাপ।

যেহেতু ম্যাজেন্টো EAV ডেটা মডেল ব্যবহার করে, তাই অনেকগুলি সন্ধানের টেবিল রয়েছে যা অনুরোধ করা হয়েছে এমন ডেটা সনাক্ত করতে সমস্ত ডেটা একসাথে টুকরো টুকরো করে স্ক্যান করতে হবে। আপনি ফ্ল্যাট ক্যাটালগগুলি অক্ষম করলে এটিই ঘটে। মাইএসকিউএলের মতো, মূল্যবান আই / ও সাইকেল সংরক্ষণের সময় রেকর্ডটি দ্রুত সনাক্ত করতে ব্যবহার করতে একটি সূচক (ফ্ল্যাট টেবিল) ব্যবহার করে রেকর্ডের জন্য স্ক্যান করা। একটি টেবিল তৈরি করা এবং কোনও সূচক যুক্ত না করা ম্যাজেন্টোতে ফ্ল্যাট টেবিল ব্যবহার না করার সমান। এই দুটি পরিস্থিতিতে বিভিন্ন পরিস্থিতিতে ভাল কাজ করতে পারে, সোনাসির এই প্রশ্নের খুব ভাল উত্তর দেখুন বেন । (ইঙ্গিত এটি ডেটার সুযোগ বুঝতে জড়িত।)

যদিও এটি আপনার প্রশ্নের সরাসরি উত্তর নয়, চলমান অংশগুলি বোঝা এবং সেগুলির জন্য আরও ভালভাবে প্রস্তুত হওয়ার জন্য ইনডেক্সিংয়ের সাথে আগত কিছু মাথাব্যথা হ্রাস করতে সহায়তা করা উচিত। " উপসর্গের চেয়ে সমস্যার সমাধান করুন। "

আধুনিক ডাটাবেস সিস্টেমগুলির অভ্যন্তরীণ বিষয়ে আরও অন্বেষণ করা ইনডেক্সিং কীভাবে এবং কেন প্রয়োজনীয় এবং এটি ম্যাজেন্টোর সূচকগুলির সাথে (কিছুটা) কীভাবে সম্পর্কিত তা আরও ভালভাবে বুঝতে সাহায্য করতে পারে।

সংক্ষিপ্তসার হিসাবে: অন্ধভাবে সমাধান প্রয়োগের আগে আপনার সমস্যার স্কোপগুলি বুঝতে। প্রতিটি বিট ডেটা হুবহু একই রকম হবে না এবং পরিকল্পনার সমাধান এবং প্রয়োগের সমাধানের পরে আপনি সমস্যার ভাল / সম্পূর্ণ উপলব্ধি পেয়ে গেছেন । ডেটাবেস অপ্টিমাইজেশন পরিবর্তন পরিচালনার জন্য খুব পুরস্কৃত হতে পারে। যেমন ভয়ঙ্করতা রোধ করা DEADLOCKS

আপনি আপনার সমস্ত সূচককে সেট করার বিষয়ে বিবেচনা করতে পারেন এবং Manualঅফ-পিক টাইম ঘন্টা (যখন প্রশাসকরা দূরে থাকবেন) এ সূচিটি পুনর্নির্মাণের জন্য বিকল্প প্রক্রিয়াগুলি সেটআপ করতে পারেন। শুধুমাত্র Product Pricesএবং Stock Statusসেট করা উচিত Update on Save

প্রযুক্তিগত দৃষ্টিকোণ থেকে সূচি কীভাবে কাজ করে তা বিবেচনা করুন। মূল মডিউল সূচকের জন্য দায়বদ্ধ Mage_Index। Indexer মৌলিক মডেল: Indexer, Process, Event

Mage_Index_Model_Indexerসূচক হয়, অন্যান্য মডিউল মডিউলগুলির সাথে সমস্ত মিথস্ক্রিয়া Mage_Indexএই পরিষেবার মাধ্যমে ঘটে। এটিতে নিম্নলিখিত পদ্ধতি রয়েছে:

  • processEntityAction() ইভেন্টটি তৈরি এবং নিবন্ধভুক্ত করে এবং সূচীকরণ প্রক্রিয়া শুরু করে
  • logEvent() একটি ইভেন্ট তৈরি করে এবং পরবর্তী সূচকের জন্য এটি নিবন্ধন করুন;
  • indexEvent() সূচকের ইভেন্টগুলি চালায়;
  • getProcessesCollection()সমস্ত বৈশিষ্ট্য যেমন পণ্য বৈশিষ্ট্য, পণ্য মূল্য, ক্যাটালগ url পুনরায় লেখাগুলি ইত্যাদির সংগ্রহ ফিরিয়ে দেয় সাধারণত পদ্ধতিটি পরিবর্তনের পরে যেমন পদ্ধতি _afterSaveবা _afterCommitআমরা আংশিক পুনরায় সূচি সম্পাদন করি।

Mage_Index_Model_Processঅথবা পদ্ধতি আপনার indexer সারাংশ যে দোকানে অবস্থা, শেষ রান অপারেশন। সমস্ত প্রক্রিয়া সারণীতে সংরক্ষণ করা হয় index_process। প্রোগ্রামটির একটি পদ্ধতি রয়েছে getIndexer()যা মডেলটির সূচক ফেরত দেয়। সূচক মডেলের প্রক্রিয়া দ্বারা বেশিরভাগ কার্য নির্ধারিত।

Mage_Index_Model_Eventঘটনা ঘটেছে সম্পর্কে তথ্য সঞ্চয় করে। উদাহরণস্বরূপ, আমরা পণ্যটি সংরক্ষণ করি এবং সংরক্ষণের পরে, আমরা একটি নতুন ইভেন্ট তৈরি করি এবং কী সত্ত্বার সুনির্দিষ্টভাবে আমরা কী সংরক্ষণ করেছি তা কী আইডির স্পিরিট রয়েছে এবং এই পদার্থের জন্য আমরা কী পদক্ষেপ নিয়েছি।

যখন অবৈধতা ঘটে তার একটি সাধারণ তালিকা:

  1. ক্যাটালগ / পণ্য (সংরক্ষণ করুন, মোছা, ম্যাসেজ_এ্যাকশন)
  2. ক্যাটালগ / বিভাগ (সংরক্ষণ করুন, মোছা)
  3. ক্যাটালগ / রিসোর্স_ইভ_ট্রিবিউট (সংরক্ষণ করুন, মোছা)
  4. গ্রাহক / গোষ্ঠী (সংরক্ষণ)
  5. ক্যাটালগের তালিকাভুক্ত / স্টক_ইটেম (সংরক্ষণ করুন)
  6. ট্যাগ / ট্যাগ (সংরক্ষণ)
  7. কোর / স্টোর (সংরক্ষণ করুন, মোছা)
  8. কোর / স্টোর_গোষ্ঠী (সংরক্ষণ করুন, মোছা)
  9. মূল / ওয়েবসাইট (সংরক্ষণ করুন, মোছা)

config.xmlলেনদেনের সংরক্ষণের পরে মডিউলটিতে নিবন্ধিত সূচী সহ যে কোনও সংস্থান মডেল । afterCommitCallback()একটি উপসর্গ সঙ্গে বলা হয়। এটিই সূচক ইভেন্টগুলি লগইন করা হয়, যেহেতু এটি একটি সফল লেনদেনের শেষে।

... এবং এটি আমার দু: খিত করে তোলে যে EAV এখনও ম্যাজেন্টো ২: এর মধ্যেই রয়েছে (

তথ্যসূত্র:


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.