Mysql
 sql >> Database >  >> RDS >> Mysql

Qualcuno può spiegare in dettaglio la funzione di indicizzazione di Magentos?

L'indicizzazione di Magento è simile solo all'indicizzazione a livello di database nello spirito. Come afferma Anton, si tratta di un processo di denormalizzazione per consentire un funzionamento più rapido di un sito. Vorrei provare a spiegare alcuni dei pensieri alla base della struttura del database Magento e perché rende necessaria l'indicizzazione per operare velocemente.

In un database MySQL più "tipico", una tabella per la memorizzazione dei prodotti del catalogo sarebbe strutturata in questo modo:

PRODUCT:
    product_id INT
    sku        VARCHAR
    name       VARCHAR
    size       VARCHAR
    longdesc   VARCHAR
    shortdesc  VARCHAR
    ... etc ...

Questo è veloce per il recupero, ma lascia un problema fondamentale per un pezzo di software di eCommerce:cosa fai quando vuoi aggiungere più attributi? Che cosa succede se vendi giocattoli e invece di una colonna di dimensioni, hai bisogno di age_range ? Bene, potresti aggiungere un'altra colonna, ma dovrebbe essere chiaro che in un grande negozio (pensa a Walmart, ad esempio), ciò comporterebbe righe vuote al 90% e tentare di mantenere nuovi attributi è quasi impossibile.

Per combattere questo problema, Magento divide i tavoli in unità più piccole. Non voglio ricreare l'intero sistema EAV in questa risposta, quindi per favore accetta questo modello semplificato:

PRODUCT:
    product_id INT
    sku        VARCHAR

PRODUCT_ATTRIBUTE_VALUES
    product_id   INT
    attribute_id INT
    value        MISC

PRODUCT_ATTRIBUTES
    attribute_id
    name

Ora è possibile aggiungere attributi a piacimento inserendo nuovi valori in product_attributes e quindi inserire i record adiacenti in product_attribute_values . Questo è fondamentalmente ciò che fa Magento (con un po' più di rispetto per i tipi di dati di quello che ho mostrato qui). In effetti, ora non c'è motivo per cui due prodotti abbiano campi identici, quindi possiamo creare interi tipi di prodotto con diversi insiemi di attributi!

Tuttavia, questa flessibilità ha un costo. Se voglio trovare il color di una maglietta nel mio impianto (un banale esempio), devo trovare:

  1. Il product_id dell'articolo (nella tabella prodotti)
  2. Il attribute_id per color (nella tabella degli attributi)
  3. Infine, il value effettivo (nella tabella attributi_valori)

Magento funzionava così, ma era lentissimo. Quindi, per consentire prestazioni migliori, hanno fatto un compromesso:una volta che il proprietario del negozio ha definito gli attributi desiderati, vai avanti e genera il grande tavolo dall'inizio. Quando qualcosa cambia, eliminalo dallo spazio e generalo di nuovo. In questo modo, i dati vengono archiviati principalmente nel nostro bel formato flessibile, ma interrogati da un'unica tabella.

Queste tabelle di ricerca risultanti sono gli "indici" Magento. Quando reindicizzi, fai esplodere la vecchia tabella e la generi di nuovo.

Spero che questo chiarisca un po' le cose!

Grazie, Joe