Dlaczego Magento ma indeks giełdowy?

12

Mogę być trochę krótkowzroczny, ale nie mogę znaleźć uzasadnienia, by Magento miał indeks giełdowy, kiedy cataloginventory_stock_statusi cataloginventory_stock_status_idxsą identyczne w strukturze.

Jedyne różnice, które mogę znaleźć na poziomie stołu, to:

  1. Istnieje niewielka różnica w liczbie rzędów
  2. cataloginventory_stock_status ma 3 ograniczenia klucza obcego, których nie znaleziono w tabeli indeksu.

Zakładam, że będzie jakiś powód związany z blokowaniem lub niektórymi procesami, w których wpłynie to na kasę, ale nie będzie w stanie znaleźć informacji o tym, dlaczego.

john-jh
źródło
Bardzo interesujące!
Paras Sood,

Odpowiedzi:

10

Proces indeksowania zapisuje najpierw wartości w _idxtabeli, aby nie zakłócał działań odczytu na głównej tabeli podczas jej działania.
Gdy wszystkie wartości zostaną wstawione do _idxtabeli, wszystkie wartości zostaną skopiowane do głównej tabeli.

Zobacz, jak to Mage_CatalogInventory_Model_Resource_Indexer_Stock::reindexAllwygląda.
Zobacz także moje komentarze w poniższym kodzie:

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
źródło