Por que o Magento tem um índice de ações?

12

Eu posso estar um pouco míope, mas não consigo encontrar o motivo por trás do Magento ter um índice de ações quando cataloginventory_stock_statuse cataloginventory_stock_status_idxsão idênticos em estrutura.

As únicas diferenças que posso encontrar no nível da tabela são:

  1. Há uma pequena variação no número de linhas
  2. cataloginventory_stock_status possui 3 restrições de chave estrangeira não encontradas na tabela de índice.

Suponho que haverá algum motivo relacionado ao bloqueio ou a certos processos nos quais isso afetaria a finalização da compra, mas não é possível encontrar informações sobre o motivo.

john-jh
fonte
Muito interessante!
Paras Sood

Respostas:

10

O processo de indexação grava os valores inicialmente na _idxtabela, para que não interfira nas ações de leitura na tabela principal durante a execução.
Quando todos os valores são inseridos na _idxtabela, todos os valores são copiados para a tabela principal.

Veja como Mage_CatalogInventory_Model_Resource_Indexer_Stock::reindexAllé.
Veja também meus comentários no código abaixo:

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
fonte