Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Alguém pode explicar o recurso de indexação do Magentos em detalhes?


A indexação do Magento é apenas semelhante à indexação em nível de banco de dados em espírito. Como afirma Anton, é um processo de desnormalização para permitir uma operação mais rápida de um site. Deixe-me tentar explicar alguns dos pensamentos por trás da estrutura do banco de dados Magento e por que ela torna a indexação necessária para operar em velocidade.

Em um banco de dados MySQL mais "típico", uma tabela para armazenar produtos do catálogo seria estruturada assim:
PRODUCT:
    product_id INT
    sku        VARCHAR
    name       VARCHAR
    size       VARCHAR
    longdesc   VARCHAR
    shortdesc  VARCHAR
    ... etc ...

Isso é rápido para recuperação, mas deixa um problema fundamental para um software de comércio eletrônico:o que você faz quando deseja adicionar mais atributos? E se você vender brinquedos e, em vez de uma coluna de tamanho, precisar de age_range ? Bem, você pode adicionar outra coluna, mas deve ficar claro que em uma loja grande (pense no Walmart, por exemplo), isso resultaria em linhas 90% vazias e tentar manter novos atributos é quase impossível.

Para combater esse problema, o Magento divide as tabelas em unidades menores. Não quero recriar todo o sistema EAV nesta resposta, então aceite este modelo simplificado:
PRODUCT:
    product_id INT
    sku        VARCHAR

PRODUCT_ATTRIBUTE_VALUES
    product_id   INT
    attribute_id INT
    value        MISC

PRODUCT_ATTRIBUTES
    attribute_id
    name

Agora é possível adicionar atributos à vontade inserindo novos valores em product_attributes e, em seguida, colocar registros adjacentes em product_attribute_values . Isso é basicamente o que o Magento faz (com um pouco mais de respeito pelos tipos de dados do que mostrei aqui). Na verdade, agora não há motivo para dois produtos terem campos idênticos, então podemos criar tipos de produto inteiros com diferentes conjuntos de atributos!

No entanto, essa flexibilidade tem um custo. Se eu quiser encontrar a color de uma camisa no meu sistema (um exemplo trivial), preciso encontrar:
  1. O product_id do item (na tabela de produtos)
  2. O attribute_id para color (na tabela de atributos)
  3. Finalmente, o value real (na tabela attribute_values)

Magento costumava funcionar assim, mas era muito lento. Então, para permitir um melhor desempenho, eles fizeram um compromisso:uma vez que o dono da loja tenha definido os atributos que deseja, vá em frente e gere a grande tabela desde o início. Quando algo muda, nuke-o do espaço e gere-o novamente. Dessa forma, os dados são armazenados principalmente em nosso formato flexível e agradável, mas consultados em uma única tabela.

Essas tabelas de pesquisa resultantes são os "índices" do Magento. Ao reindexar, você está explodindo a tabela antiga e gerando-a novamente.

Espero que esclareça um pouco as coisas!

Obrigado, José