Home>Guide>Come aggiornare gli indici su Magento

Come aggiornare gli indici su Magento


Come aggiornare gli indici su Magento


La ricostruzione degli indici dei dati in Magento è un’operazione fondamentale, che permette di avere un catalogo prodotti sempre aggiornato e si rende spesso necessaria dopo attività di modifica delle informazioni.
Ma prima di passare alla pratica, è bene fissare qualche concetto teorico, per comprendere come lavora Magento e soprattutto quando e perché si rende necessaria la reindicizzazione dei dati.

  • Leggi l'articolo, ti bastano solo 2 minuti, 31 secondi
    Sei di fretta? Scarica il PDF e consultalo quando vuoi!

Normalizzazione del database

Una delle prime nozioni da imparare quando si lavora con i database, è il concetto di normalizzazione. Non mi dilungherò troppo sulla questione, ma giusto per rinfrescare un po’ la memoria:

La normalizzazione è un procedimento che ha lo scopo di eliminare la ridondanza di dati, fornendo al database una struttura che limiti il più possibile il rischio di incoerenza dei dati, decomponendo le relazioni tra essi in relazioni via via più piccole.

Magento, con il suo database, non fa eccezione e rispetta questa consuetudine, ma allo stesso tempo consente una strada alternativa.
Vediamo le differenze sostanziali, analizzando i pro e contro dell’una e dell’altra soluzione.


EAV Catalog vs FLAT Catalog

L’organizzazione delle tabelle in forma “normale”, si basa sulla corrispondenza Entità-Attributo-Valore: i dati vengono memorizzati in differenti tabelle relazionate tra loro.
Questo implica che per ottenere le informazioni, ad esempio, su un prodotto è necessaria una query complessa che prevede 5-6 operazioni di join. La distribuzione dei dati su più tabelle, comporta una grande flessibilità ed estensibilità, nonché una forte riduzione della ridondanza dei dati (conseguenza proprio del processo di normalizzazione), ma al contempo l’utilizzo di molteplici join tra le tabelle riduce sensibilmente le performance, in termini di velocità.

L’alternativa proposta da Magento, è l’utilizzo del catalogo FLAT che consiste nella memorizzazione dei dati in una unica tabella, non normalizzata. Conseguenza di questo tipo di sistema, sono un notevole aumento dello spazio occupato nel database, in quanto la stessa informazione, anche se condivisa tra più prodotti, verrà replicata per ogni riga; ma il grosso vantaggio, è la possibilità di accedere a tutti i dati di cui si ha bisogno effettuando una unica query, che il database ci fornirà in molto meno tempo.

Nota nella prima immagine, come i valori evidenziati siano ripetuti per ben tre volte (flat), mentre nella seconda, lo stesso dato viene memorizzato una sola volta e richiamato tramite future operazioni di join (eav).


Come abilitare il Flat catalog

Come opzione di default, Magento fornisce la memorizzazione dei dati basata sul catalogo di tipo EAV, ma è possibile scegliere il formato Flat dal backend di Magento andando su:

Sistema > Configurazione

nel menu in alto, e scegliere:

CATALOGO

nel menu laterale. Nella tab:

FRONTEND

ti basta selezionare SI nelle opzioni:

USA IL CATALOGO FLAT PER I PRODOTTI

e

USA IL CATALOGO FLAT PER LE CATEGORIE

ed il gioco è fatto!


La reindicizzazione delle informazioni

Nel caso di cataloghi di tipo Flat, Magento utilizza gli “indexers”, una serie di funzioni che periodicamente (tramite i cron jobs) aggiornano e popolano le tabelle flat, elaborando e indicizzando i dati per garantire una elevata velocità di lettura.
Si tratta di una pratica molto indicata in caso di cataloghi con molti prodotti, per avere delle performance sempre elevate; tutti i calcoli relativi a prezzi (con relativa applicazione di tassazioni, sconti, ecc.), gestione delle scorte (soprattutto in caso di prodotti bundle), vengono effettuati durante l’indicizzazione e memorizzati già pronti per essere visualizzati, senza la necessità di essere rigenerati ad ogni richiesta, con un notevole risparmio di risorse e di tempo.

Ad esempio, la semplice visualizzazione del prezzo di vendita finale di un prodotto, è la risultante di molteplici calcoli: bisogna tener conto di eventuali regole di sconto, tier pricing, listini diversi applicati ad ogni gruppo utenti, applicazione delle tasse ed effettuare questi calcoli per ogni utente che visualizza una pagina del tuo e-commerce richiede tempo e potrebbe tradursi in un carrello abbandonato. Ma questo è da evitare, giusto?

Una volta attivato il Flat catalog, Magento opererà una “traduzione e riorganizzazione” delle informazioni e le disporrà su una unica tabella. Ma cosa succede se viene creata ad esempio una regola di sconto nuova?
Magento ha pensato anche a questo e ti avvisa che è necessario effettuare la reindicizzazione dei dati affinché vengano aggiornati e ricalcolati.


Come effettuare il reindex in Magento

Magento dispone di otto indexers, che si occupano ciascuno di aggiornare diversi raggruppamenti di dati. Eccoli nel dettaglio:

  • Attributi prodotto
  • Prezzi prodotto
  • URL rewrites del catalogo
  • Dati prodotto Flat
  • Prodotti categoria
  • Indice di ricerca nel catalogo
  • Stato scorte
  • Tag dei dati aggregati

Esistono sostanzialmente tre modalità di aggiornamento degli indici, eccole una per una.


Reindex da admin

La più semplice e la più utilizzata, è quella effettuata da pannello di amministrazione. Per avviarla, ti basta entrare nel backend di Magento ed andare su:

Sistema > Gestione indice

nel menu in alto. Qui Magento segnala gli indici che necessitano di essere aggiornati.

Per farlo, basta selezionare uno o più indici da aggiornare, dopodiché a destra, nel menu a tendina “Azioni”, scegli:

REINDICIZZAZIONE INFORMAZIONI

ed infine clicca su:

INVIA

Fatto?
Ora il tuo catalogo è pronto ed aggiornato!


Reindex da SSH

È possibile lanciare le operazioni di aggiornamento degli indici anche attraverso riga di comando, accedendo in SSH al server ed utilizzando i seguenti comandi, ciascuno per ognuno degli indexers precedentemente elencati:

php shell/indexer.php -reindex catalog_product_attribute
php shell/indexer.php -reindex catalog_product_price
php shell/indexer.php -reindex catalog_url
php shell/indexer.php -reindex catalog_product_flat e php shell/indexer.php -reindex catalog_category_flat
php shell/indexer.php -reindex catalog_category_product
php shell/indexer.php -reindex catalogsearch_fulltext
php shell/indexer.php -reindex cataloginventory_stock
php shell/indexer.php -reindex tag_summary

Per eseguirli tutti in una volta, ti basta digitare:

php shell/indexer.php -reindexall

Reindex da script PHP

Infine, è possibile effettuare l’aggiornamento degli indici anche tramite funzioni PHP (magari al termine di uno script di inserimento massivo dei prodotti). Se non sai come creare uno script per utilizzare le funzioni Magento in un file esterno, ti consiglio di dare una sbirciata a:


La funzione da utilizzare è:

// clear cache
Mage::app()->removeCache( 'catalog_rules_dirty' );
// reindex
Mage::getModel( 'index/process' )->load( 2 )->reindexEverything();

dove il numero presente come parametro della funzione load() alla riga 4, sta ad indicare l’ID dell’indexer da richiamare, secondo la legenda:

1 = Product Attributes
2 = Product Attributes
3 = Catalog URL Rewrites
4 = Product Flat Data
5 = Category Flat Data
6 = Category Products
7 = Catalog Search Index
8 = Tag Aggregation Data
9 = Stock Status

Mentre la funzione per eseguirli tutti in una sola volta è:

$oCollection = Mage::getModel( 'index/process' )->getCollection();
foreach ( $oCollection as $oIndex ) {
	$oIndex->reindexAll();
}

Sbloccare la reindicizzazione degli indici

Qualche volta potrebbe capitare che il processo di indicizzazione possa rimanere bloccato, spesso perché interrotto bruscamente in maniera anomala, magari a seguito di un blocco o un riavvio del server. In questo caso, un fastidioso messaggio comparirà ad ogni tentativo di effettuare un nuovo aggiornamento degli indici:

Index process is working now. Please try run this process later

Come fare?
Quando Magento effettua un reindex, genera un file di “lock” nella cartella:

/var/locks/

il quale serve al sistema come controllo per non eseguire alcune operazioni che potrebbero interferire con l’indicizzazione. È sufficiente eliminare la cartella ed il gioco è fatto, il reindex è pronto per essere eseguito nuovamente.



Ti è piaciuto questo articolo? Regalami un click per ripagarmi dello sforzo



Code4Life ti è stato utile? Sostienici con una donazione!

Dona con PayPal

Hai trovato interessante l’articolo? Allora ti consiglio di leggere:

Come fare il debug in Magento

Come fare il debug in Magento


Ecco una piccola guida per riuscire a scovare gli errori generati nel tuo e-commerce Magento, sfruttando al meglio gli strumenti di supporto allo sviluppo messi a disposizione dalla piattaforma.

Come ritagliare un'immagine con PHP

Come ritagliare un’immagine con PHP


Ecco come utilizzare le funzioni PHP per ritagliare un’immagine con misure stabilite a partire da un preciso punto per estrapolare particolari e porzioni precise.


E tu cosa ne pensi? Condividi la tua opinione e discutiamone insieme
La tua email non sarà resa pubblico o utilizzata per inviarti spam, te lo prometto

Iscrivimi alla newsletter per ricevere news ed aggiornamenti
Utilizziamo piattaforme di terze parti per l’invio di newsletter. (Informativa sulla privacy)
Tienimi aggiornato su questo articolo
Ricevi una email di notifica quando qualcuno scriverà un commento a questo articolo. (Informativa sulla privacy)
Ricorda i miei dati per la prossima volta che scriverò un commento
Il tuo nome e la tua email verranno salvati in un cookie in questo browser. (Informativa sulla privacy)