Mengapa Magento memiliki indeks saham?

12

Saya mungkin menjadi sedikit pandangan pendek tetapi saya tidak dapat menemukan alasan di balik Magento memiliki indeks saham kapan cataloginventory_stock_statusdan cataloginventory_stock_status_idxidentik dalam struktur.

Satu-satunya perbedaan yang dapat saya temukan di tingkat tabel adalah:

  1. Ada variasi kecil dalam jumlah baris
  2. cataloginventory_stock_status memiliki 3 batasan kunci asing tidak ditemukan pada tabel indeks.

Saya berasumsi akan ada beberapa alasan yang berkaitan dengan penguncian atau proses tertentu di mana itu akan mempengaruhi checkout tetapi tidak dapat menemukan informasi mengapa.

john-jh
sumber
Sangat menarik!
Paras Sood

Jawaban:

10

Proses pengindeksan menulis nilai pada awalnya di _idxtabel sehingga tidak akan mengganggu tindakan baca di tabel utama saat sedang berjalan.
Ketika semua nilai dimasukkan dalam _idxtabel maka semua nilai disalin ke tabel utama.

Lihatlah bagaimana Mage_CatalogInventory_Model_Resource_Indexer_Stock::reindexAlltampilannya.
Lihat juga komentar saya dalam kode di bawah ini:

public function reindexAll()
{
    $this->useIdxTable(true); //tell the indexer to use the _idx table
    $this->beginTransaction();
    try {
        $this->clearTemporaryIndexTable(); //clear data from the _idx table

        foreach ($this->_getTypeIndexers() as $indexer) {
            $indexer->reindexAll(); //reindex everything in the _idx table
        }

        $this->syncData(); //clear the main table and insert the values from the _idx table.
        $this->commit();
    } catch (Exception $e) {
        $this->rollBack();
        throw $e;
    }
    return $this;
}
Marius
sumber