Soluzione permanente per il problema dell'indicizzazione comune


23

Abbiamo sviluppato alcuni progetti magento con un ampio inventario e affrontando sempre il problema dell'indicizzazione, abbiamo provato ogni cosa trovata su Internet per risolvere il problema dell'indicizzazione quotidiana come troncare le tabelle piatte e reindicizzare utilizzando l'interfaccia della riga di comando, impostando cron per indicizzazione, ma questo è il nostro mal di testa quotidiano con problemi di indicizzazione.

Siamo alla ricerca di una soluzione permanente per questo problema mentre lavoriamo su progetti in diversi scenari come l'aggiornamento dei prodotti su base giornaliera o l'importazione dei prodotti da altri feed ogni giorno.

Chiunque abbia alcune buone pratiche con questo o qualche soluzione alternativa, condividili che saranno molto apprezzati.


Ho perso un anno in Magento e le sue estensioni e la sua architettura di dati estremamente inefficiente e idiota che rende un sito di e-commerce con soli 10K plus di prodotti. Tutti questi avvertimenti avrebbero dovuto essere dati a chiunque iniziasse a vedere Magento CE. Gli onwer Magento dovrebbero essere portati in tribunale per aver perso migliaia di ore di lavoro. Lascia che un database esegua l'indicizzazione, non fare il lavoro di un database. Consiglio che invece di sprecare denaro su un server dedicato e quindi tonnellate di ore di lavoro insonni durante la notte, è meglio passare a una piattaforma di e-commerce ospitata o a un open source che utilizza MS SQL Server.
semiprecious.com il

Hai mai pensato che forse non hai trovato la giusta estensione o la giusta configurazione del server? Se alcuni software non soddisfano le tue esigenze non significa necessariamente che siano inutili. Ho guadagnato il mio pane (e birra) negli ultimi 5+ anni da Magento e ho avuto anche molti clienti soddisfatti. Alcuni con oltre 10k di catalogo.
Marius

Sono corretti, a causa del modo in cui CE gestisce la manutenzione dei dati è un problema con skus da 10 a 100 migliaia. EE è migliore a causa degli aggiornamenti di indicizzazione che hanno fatto, ma questo è per le società con entrate da milioni di milioni di dollari. Puoi lanciarlo in hosting ma trasformerai il ROI in negativo. La soluzione che utilizziamo è caricamenti di processi molto specifici e delta simili a soluzioni come SAP e Walmart, combinati con una soluzione di prezzo speciale (ATG-esque) che aggira il problema dell'indicizzazione (fx e margine in linea / ricalcolo di attributi), combinato con il cluster ospitando. Semplice risposta no, Magento non è stato progettato in modo ottimale.

Risposte:


31

È importante capire quali indici sono lenti e perché

La complessità del catalogo e, in definitiva, l'architettura del negozio determineranno quanto tempo richiederà un reindicizzazione, combinato con l'infrastruttura sottostante.

  • Se hai 50.000 prodotti e 10 visualizzazioni di negozi, puoi garantire che i pochi milioni di righe catalog_url_rewriteimpiegheranno tempo per l'elaborazione.

  • Se hai 100 prodotti, ma 5.000 attributi, puoi garantire che la tabella catalog_attributeso catalog_product_flatimpiegherà un'età per ricostruirsi o cadere in piano sulla sua faccia

  • Se hai 1.000 prodotti, ma 500 attributi ricercabili, catalog_fulltext_searchci vorrà ancora un'età per completare

La soluzione per ogni problema che affronti non è di 1 taglia, si tratta di progettare correttamente il tuo negozio; disporre della giusta infrastruttura per supportarla e utilizzare una frequenza / strategia di reindicizzazione che supporti la recency e le prestazioni dei contenuti.

  • L'aggiunta della cache front-end non sarà affatto utile
  • Lancio di più hardware alla situazione potrebbe
  • Affrontare le dimensioni / complessità del catalogo sarà di aiuto
  • L'uso di strumenti di indicizzazione di terze parti ti aiuterà
  • Esternalizzare determinati indici (es. Ricerca> SOLR) aiuterà

C'è anche il caso di valutare se determinati indici sono persino richiesti. L'uso del prodotto / categoria flat non sempre rende tutti i negozi più veloci; l'abbiamo visto rendere i negozi molto più lenti. Quindi potresti scoprire che dopo aver testato le prestazioni prima / dopo - non sono nemmeno una considerazione.


8

tl; dr

Non esiste una soluzione di proiettile d'argento. Ci sono alcune soluzioni alternative, suggerisco Sonassi_Fastsearchindex, ma è specifico per la ricerca nel catalogo.

Forse la disabilitazione degli aggiornamenti dell'indice sul salvataggio - la pianificazione per l'esecuzione durante la notte - fornirà qualche sollievo? In combinazione con l'aggiunta di più cache - memcached, Redis, APC - e una cache a pagina intera come Varnish (se stai eseguendo CE) potresti iniziare. Se hai intenzione di usare Varnish, dai un'occhiata a Nexcess_Turpentinegithub per un avvio rapido.

Maggiori informazioni

I problemi di indicizzazione, in particolare catalog_url_rewrites, sono ben noti e documentati nella comunità. Magento li ha gestiti nella versione Enterprise perché questi sono i clienti più colpiti. Molti clienti EE hanno 10k + prodotti e più punti vendita, siti Web, ecc.

Tuttavia, se si dispone di un catalogo di grandi dimensioni e un numero elevato di attributi, è possibile che si verifichi che l'indicizzazione richiederà un lungo periodo di tempo, in particolare catalog_url_rewrite, product_flat, in tal caso il mio suggerimento è di non correggere il tempo di esecuzione dell'indice lunghezza ma piuttosto per scaricare un po 'di elaborazione per consentire alla scatola di spendere i cicli della CPU indicizzando piuttosto che servire il contenuto .

Le domande da porsi:

  • Sto perdendo affari a causa di problemi di indicizzazione?
  • Sto perdendo produttività a causa di problemi di indicizzazione?
  • Sono a rischio di perdere le conversioni o il mio tasso di conversione soffre?
  • I miei clienti sono a rischio di acquistare articoli non disponibili che sono il risultato diretto della mancata sincronizzazione degli indici (inventario, ecc.)
  • Le mie regole sui prezzi del catalogo fanno parte del mio core business e
  • Il mio tasso di conversione della ricerca sul sito è superiore alla norma (8-10%), beneficiando così di una migliore indicizzazione?

Non esiste una soluzione di proiettile d'argento a questo particolare problema: come fornitore di soluzioni dovresti aiutare il tuo cliente a prendere la decisione che migliorerà al meglio le vendite e il business mantenendo bassi i costi generali.

alternative

Scarica il catalogo di ricerca e nav a strati su Solr.

Scala in orizzontale. Aggiungi altri server Apache / nginx. Più server = più throughput simultaneo. Questo non è 1: 1. Nexcess ha un ottimo white paper sulle prestazioni e la configurazione di Apache qui: http://www.nexcess.net/magento-best-practices-whitepaper

E, se opti per andare con Varnish, ricorda:

inserisci qui la descrizione dell'immagine


Apprezziamo gli oggetti di scena, ma la reindicizzazione non ha nulla a che fare con la cache front-end; è interamente un'operazione di back-end. L'aumento del carico front-end impedirà un reindicizzazione che richiede più tempo, ma sicuramente non lo renderà più veloce.
Ben Lessani - Sonassi,

Quello a cui sto arrivando è ridurre il traffico che arriva al box. La preoccupazione principale qui è che il sito non è disponibile durante l'indice o viene bloccato per un periodo di tempo sconosciuto mentre i lavori vengono eseguiti. Alla fine della giornata se l'indicizzazione non ha avuto effetti negativi sul frontend, non importa per quanto tempo dura il lavoro. Non ci sono correzioni o miglioramenti nell'indicizzazione dei tempi di caricamento. Nessuno vuole una risposta "Esegui l'upgrade alla versione a pagamento", quindi il mio suggerimento è migliorare la disponibilità del front-end e pianificare l'esecuzione non di punta dell'indice.
Filwinkle,

Assolutamente, l'ho capito - ma mentre la disponibilità è importante per un sito Web; non è abbastanza per un sito di e-commerce. Se non puoi effettivamente effettuare un acquisto a causa del blocco degli indici, il sito potrebbe anche essere off-line.
Ben Lessani - Sonassi,

abbiamo solo poche centinaia di prodotti e ci vogliono ancora alcuni minuti per salvare un prodotto semplice su Magento 1.7 e pago oltre $ 500 al mese per un server Rackspace dedicato. Non sono sicuro da dove cominciare, ma sospetto che forse un indice sia corrotto. Qualcuno può consigliare un buon consulente magento?
Max Hodges,

5

Nella maggior parte dei webshop di Magento pesanti è stato per lo più così difficile far funzionare l'Indice Backend di Magento. Ho avuto questo problema spesso. L'esecuzione dello script shell continuamente da parte dello sviluppatore è spesso frenetica. Di solito risolvo questo problema in modo permanente come questo.

Creo una nuova copia di shell / indexer.php> shell / myindexer.php

Personalizza shell / myindexer.php alcuni intorno alla linea 154

} else if ($this->getArg('reindex') || $this->getArg('reindexall')) {

A

} else if ($this->getArg('reindex') || $this->getArg('reindexall')  || $this->getArg('reindexallrequired') ) {

e aggiungi questo segno di spunta attorno alla linea 166

//reindex only if required
if( $this->getArg('reindexallrequired') && $process->getStatus() == Mage_Index_Model_Process::STATUS_PENDING )
    continue;

prima

$startTime = microtime(true);
$process->reindexEverything();
$resultTime = microtime(true) - $startTime;
Mage::dispatchEvent($process->getIndexerCode() . '_shell_reindex_after');

E poi aggiungo il nuovo script shell a cpanel cron per eseguirlo ogni 5 minuti

/home/public_html/shell/indexer.php --reindexallrequired >/dev/null

Come sopra, lo script della shell viene eseguito ogni 5 minuti e reindicizza solo i processi che richiedono la reindicizzazione, riduce il rischio del carico pesante per la CPU del server e l'intero processo di reindicizzazione è molto veloce. Se nessun processo richiede la reindicizzazione, semplicemente non eseguirà il processo di reindicizzazione. Ricorda inoltre di impostare la modalità di reindicizzazione su "Aggiorna su Salva" nella pagina Gestione indice. Se non lo sai, puoi ottenere questa opzione in Azioni> Cambia modalità indice accanto al pulsante Invia.


@changeling, prego. Sono contento che ti valga la pena.
rbncha,

L'ho incorporato nella mia sceneggiatura, nel caso qualcuno lo trovasse utile: gist.github.com/steverobbins/…
Steve Robbins,

4

Sarebbe più facile dire se potessi fornire qualche dato in più (dimensioni dell'inventario, visitatori, macchina), ma qui c'è una possibilità:

  • usiamo l' Sonassi_Fastsearchindexestensione per l'indice di ricerca del catalogo. Sebbene indicizzi solo titolo, descrizione e sku (penso di averlo notato), funziona benissimo e riduce il tempo dell'indicizzatore di catalogsearch.
  • molto probabilmente ci saranno alcuni indicizzatori che non devi eseguire, ad esempio per tag o per attributi di prodotto. A volte è sufficiente che tu faccia regolarmente il prezzo, il prodotto piatto, i prodotti della categoria e la ricerca del catalogo regolarmente, e gli altri forse ogni giorno.
  • sincronizziamo i prodotti con un sistema esterno ogni due ore e nel frattempo indicizziamo con script php. Quindi, abbiamo un cronjob per ogni indicizzatore che vogliamo eseguire in un determinato momento e lasciamo che questo cron esegua lo script. Questa sembra essere la migliore via di mezzo tra ciò che il server può fare e dati aggiornati sul prodotto.

Questo è in esecuzione su Magento CE 1.7.0.2; ancora un dolore, però;)


In genere stiamo affrontando un problema con il prodotto piatto, tutti gli altri indici vanno bene.
Ravisoni,

3

usando Dnd_Patchindexurl sono stato in grado di ridurre il tempo di reindice di catalog_url_rewrite a quasi il 70%

Penso che sia una buona soluzione per escludere prodotti disabilitati o prodotti non visibili per avere il loro URL creato per niente!

$ php ./shell/indexer.php -reindexall
Product Attributes index was rebuilt successfully in 00:00:11
Product Prices index was rebuilt successfully in 00:00:22
Catalog URL Rewrites index was rebuilt successfully in 00:08:49
Product Flat Data index was rebuilt successfully in 00:00:51
Category Products index was rebuilt successfully in 00:00:19
Catalog Search Index index was rebuilt successfully in 00:00:12
Stock Status index was rebuilt successfully in 00:00:00
Tag Aggregation Data index was rebuilt successfully in 00:00:00

Dopo:

$ php ./shell/indexer.php -reindexall
Product Attributes index was rebuilt successfully in 00:00:12
Product Prices index was rebuilt successfully in 00:00:24
Catalog URL Rewrites index was rebuilt successfully in 00:02:52
Product Flat Data index was rebuilt successfully in 00:00:57
Category Products index was rebuilt successfully in 00:00:25
Catalog Search Index index was rebuilt successfully in 00:00:13
Stock Status index was rebuilt successfully in 00:00:00
Tag Aggregation Data index was rebuilt successfully in 00:00:00

L'ho installato su 1.9.1.1 e funzionava benissimo!

Può essere installato anche tramite Connect http://www.magentocommerce.com/magento-connect/catalog/product/view/id/15074/s/dn-d-patch-index-url-1364/category/12863/


1

Aggiornamento a EE 1.13. Gli indicizzatori sono stati notevolmente migliorati in questa versione.


2
Ma la maggior parte dei client preferisce la versione della community.
Ravisoni,

1
Concordato. 1.8 uscirà tra un paio di settimane ma molto probabilmente non includerà le ottimizzazioni dell'indicizzatore. Neanche a me piace, ma questo è il modo più semplice, sicuro e forse più economico per far funzionare i tuoi indicizzatori.
Paul Grigoruta,

è impossibile trovare una soluzione permanente.
Ravisoni,

Nella maggior parte dei casi, dove qualcuno ha così tante SKU che si imbattono davvero in un muro di mattoni con gli indicizzatori CE 1.7 esistenti, allora dovrebbero andare con EE 1.13. Esistono molti siti senza problemi con questi indicizzatori CE 1.7 ed EE 1.12 con SKU da 10-25k. La chiave è gestirli direttamente a livello di flusso di lavoro e avere la giusta infrastruttura.
davidalger,

CE è una scelta perfettamente adeguata. Le funzionalità di EE 1.13 sono correzioni di bug - che la community ha comunque guidato in CE. Indipendentemente da ciò e indipendentemente dal fatto che si utilizzi CE o EE, il tempo di indicizzazione dipenderà sempre interamente dalla complessità del catalogo, dalla configurazione del server, dalla concorrenza dei visitatori e dalla frequenza di reindicizzazione. EE non è un proiettile magico e certamente non è una soluzione appropriata per qualsiasi problema relativo all'architettura.
Ben Lessani - Sonassi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.