Kapan indeks tidak valid?

23

Saya memiliki toko dan sepanjang waktu SEMUA indeks tidak valid. Saya perhatikan, bahwa saya tidak tahu, ketika indeks tidak valid.

Dapatkah Anda memberi saya daftar acara "semua", yang membuat satu atau lebih indeks ini menjadi tidak valid?

  • Atribut Produk
  • Harga produk
  • URL Penulisan Ulang URL
  • Data Rata Produk
  • Kategori Produk
  • Indeks Pencarian Katalog
  • Tag Data Agregasi
  • Status stok
Fabian Blechschmidt
sumber

Jawaban:

18

Melakukan grep pada direktori kode akan memberi Anda daftar file yang memicu pembatalan. grep -Ri '::STATUS_REQUIRE_REINDEX' .

File inti berikut memicu pembatalan

./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

Peristiwa dasar di inti Magento CE adalah

Atribut Produk

atribut penyimpanan spesifik (merupakan bagian dari produk flat), store, store_group jika produk katalog datar diaktifkan

Harga produk

memeriksa pengaturan konfigurasi simpan (seperti ruang lingkup harga). atau penyimpanan produk, situs web membuat / menghapus

URL Penulisan Ulang URL

tidak ada pembatalan khusus

Data Rata Produk

Atribut penyimpanan khusus (merupakan bagian dari produk flat), jika produk katalog datar diaktifkan, Setelah mengaktifkan produk datar

Kategori Data Rata

Periksa kategori katalog datar diaktifkan dan kategori simpan tertentu, Setelah mengaktifkan kategori datar

Kategori Produk

cek kategori katalog datar diaktifkan dan kategori simpan tertentu

Indeks Pencarian Katalog

atribut penyimpanan spesifik (adalah bagian dari atribut yang dapat dicari), store, store_group jika produk katalog datar diaktifkan

Tag Data Agregasi

Jangan pernah batal kecuali kondisi umum yang disebutkan di bawah ini

Status stok

Sistem spesifik> Konfigurasi pengaturan dalam tab penyimpanan inventaris, tunjukkan kehabisan stok produk misalnya

Semua itu tidak valid setelah rollback pada cadangan dari System > Tools > Backupdan membuat, menghapus atau bergerak di sekitar situs web, toko dan tampilan toko Setelah menjalankan impor dataflow untuk produk berikut ini tidak valid: catalog_product_price, catalog_category_product, catalogsearch_fulltext, catalog_product_flat

Beberapa pengindeks seperti data rata dan pengindeks URL juga tampaknya tidak valid dengan menyimpan core_config_datanilai.

Sander Mangel
sumber
14

Mungkin ini adalah ide untuk sementara membuat penulisan ulang untuk situs ini

Mage_Index_Model_Resource_Process

Kemudian lakukan sesuatu seperti:

<?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);
    }

}

Itu harus dengan mudah menunjukkan ketika pengindeks tidak valid dan jejak panggilan yang bertanggung jawab untuk itu.

Daniel Sloof
sumber
10

Karena orang lain sudah menjawab pertanyaan Anda secara spesifik. Saya pikir mungkin lebih baik untuk menjelaskan mengapa pengindeksan diperlukan dan bagaimana hubungannya dengan Magento dan hubungannya dengan database modern .

Indeks: daftar nama, subyek, dan lain-lain menurut abjad, dengan referensi ke tempat-tempat itu muncul, biasanya ditemukan di akhir buku.

Jadi apa sebenarnya Indeks dalam hal Basis Data ?

Indeks adalah struktur data yang mengurutkan sejumlah catatan pada satu atau beberapa bidang, dan mempercepat pengambilan data. Ini untuk menghindari pemindaian melalui blok disk yang terbentang tabel, saat mencari melalui database.

Dan apa Pengindeksan dalam hal Magento ? Produk sampingan dari EAV (Nilai Atribut Entitas) AKA database dalam database. Dengan beberapa tabel pencarian, kumpulkan semua atribut yang ditandai sebagai diindeks untuk digabungkan menjadi satu tabel datar dari semua tabel pencarian, untuk kueri yang lebih cepat dan lebih sedikit I / O, dan siklus CPU.

Saya ingat disebutkan bahwa ketika Magento awalnya dikembangkan, fleksibilitas tinggi pada daftar prioritas, yang dapat dimengerti mengapa mereka memilih untuk pergi dengan model data EAV. Namun pada akhirnya biaya untuk fleksibilitas seperti itu datang pada biaya untuk kinerja dan telah mengganggu Magento sejak awal.

Secara umum, Insinyur Magento ditugaskan, pertama dan terutama, dengan membangun sistem yang paling fleksibel dan dapat disesuaikan, dan khawatir tentang kinerja nanti. Mengapa Magento sangat lambat?

EAV sangat bagus untuk penyimpanan data tetapi mengerikan untuk transaksi. Jadi mengapa kita perlu indeks untuk memulainya? Karena pendekatan yang sama dari model relasional telah diterapkan kembali, Magento sekarang harus menangani semua hal yang dilakukan MySQL sendiri secara internal. Beberapa hal yang perlu dipertimbangkan, seperti Indeks yang sudah ada di tabel MySQL. Dengan mengingat hal itu, pertimbangkan model data EAV sekarang:

  • E ntity = Table
  • A ttribute = Field
  • V alue = Nilai

Hal yang sama harus diterapkan kembali, yang sangat "anti-pola" IMO.

Juga, ini alasan yang sama Anda menemukan var/locksyang digunakan pengindeks untuk mengunci proses pengindeksan. Alasan yang sama database memiliki penguncian baris / tabel.

Sekarang ketika sebuah catatan, katakanlah nilai produk telah diubah flat tableatau index(seperti apa yang akan disebut oleh MySQL) harus diperbarui agar tercermin untuk pertanyaan pada data yang baru diubah agar dapat ditemukan dengan cepat dan efisien tanpa memindai melalui banyak catatan. Tabel datar ada seperti yang digunakan dalam alasan yang sama MySQL memilikinya, tanpa indeks seperti itu (seperti buku) itu membutuhkan pemindaian tabel penuh untuk mengambil catatan. Ini berarti sejumlah besar I / O untuk Disk dan Memori serta siklus CPU untuk menemukan data yang diminta, yang sangat buruk untuk kinerja.

Karena Magento menggunakan model data EAV, ada banyak tabel pencarian yang harus dipindai untuk menyatukan semua data bersama-sama untuk menemukan data yang diminta. Inilah yang terjadi jika Anda menonaktifkan katalog Flat. Sama seperti MySQL, pemindaian untuk catatan vs menggunakan indeks (tabel datar) untuk digunakan untuk menemukan catatan dengan cepat sambil menjaga Siklus I / O yang berharga. Membuat tabel dan tidak menambahkan indeks sama dengan tidak menggunakan tabel datar di magento. Sementara dua skenario ini dapat bekerja dengan baik dalam skenario yang berbeda, lihat Ben di Sonassi jawaban yang sangat baik untuk pertanyaan ini. (Petunjuk ini melibatkan pemahaman tentang ruang lingkup data.)

Meskipun itu bukan jawaban langsung untuk pertanyaan Anda, memahami bagian yang bergerak dan lebih siap untuk mereka harus membantu meringankan beberapa sakit kepala yang datang dengan pengindeksan. " Perlakukan masalahnya daripada gejalanya. "

Menjelajahi lebih dalam ke internal sistem database modern dapat membantu dengan pemahaman yang lebih baik tentang bagaimana dan mengapa pengindeksan diperlukan dan bagaimana hal itu berkaitan (agak) dengan Pengindeksan Magento juga.

Untuk meringkas: Pahami cakupan masalah Anda sebelum menerapkan solusi secara membabi buta. Karena tidak setiap bit data akan persis sama dan perencanaan dan implementasi solusi SETELAH Anda punya pemahaman yang baik / penuh masalah. Pengoptimalan basis data bisa sangat bermanfaat bagi manajemen perubahan. Seperti mencegah yang ditakuti DEADLOCKS.

Anda mungkin juga ingin mempertimbangkan untuk mengatur semua pengindeks Anda Manualdan mengatur proses alternatif untuk membangun kembali indeks pada jam-jam waktu tidak sibuk (ketika admin sedang tidak ada). Hanya Product Pricesdan Stock Statusharus diatur ke Update on Save.

Sekarang pertimbangkan bagaimana pengindeksan bekerja dari sudut pandang teknis. Modul utama bertanggung jawab untuk pengindeksan Mage_Index. Model dasar dari pengindeks: Indexer, Process, Event.

Mage_Index_Model_Indexeradalah pengindeks, semua interaksi dengan modul modul lainnya Mage_Indexterjadi melalui layanan ini. Ini berisi metode berikut:

  • processEntityAction() Membuat dan mendaftarkan acara dan memulai proses pengindeksan
  • logEvent() Membuat acara dan mendaftarkannya untuk pengindeksan selanjutnya;
  • indexEvent() Menjalankan acara pengindeksan;
  • getProcessesCollection()Mengembalikan koleksi semua proses seperti Atribut Produk, Harga Produk, Penulisan Url Katalog, dll. Biasanya setelah mengubah esensi, seperti metode _afterSaveatau _afterCommitkami melakukan pengindeksan ulang sebagian.

Proses Mage_Index_Model_Processatau adalah inti dari pengindeks Anda yang menyimpan status, operasi yang terakhir dijalankan. Semua proses disimpan dalam tabel index_process. Program ini memiliki metode getIndexer()yang mengembalikan indeks model. Sebagian besar tugas didelegasikan oleh proses model indeks.

Mage_Index_Model_Eventmenyimpan informasi tentang peristiwa yang terjadi. Misalnya, kami menyimpan produk dan setelah menyimpan, kami membuat acara baru dan menyimpan informasi tentang jenis entitas apa yang baru saja kami simpan id apa yang memiliki semangat dan tindakan apa yang kami lakukan untuk zat ini.

Daftar umum saat pembatalan terjadi:

  1. katalog / produk (SIMPAN, HAPUS, MASS_ACTION)
  2. katalog / kategori (SIMPAN, HAPUS)
  3. katalog / resource_eav_attribute (SIMPAN, HAPUS)
  4. pelanggan / grup (SIMPAN)
  5. kataloginventory / stock_item (SAVE)
  6. tag / tag (SIMPAN)
  7. inti / toko (SIMPAN, HAPUS)
  8. core / store_group (SIMPAN, HAPUS)
  9. inti / situs web (SIMPAN, HAPUS)

Model sumber daya apa pun dengan indeks terdaftar di modul config.xml, setelah menghemat transaksi. afterCommitCallback()disebut dengan awalan. Di sinilah peristiwa indeks dicatat, karena pada akhir transaksi yang berhasil.

... dan itu membuat saya sedih bahwa EAV masih ada di Magento 2. :(

Referensi:

B00MER
sumber
1
merch.docs.magento.com/ee/user_guide/system-operations/… Lihat "Acara yang Memicu Reindexing"
B00MER