L'esecuzione del codice è scaduta occasionalmente

2

Sto lavorando su un sito di e-commerce. C'è un caso in cui ho bisogno di recuperare tutti i dati nel database attraverso un'API di terze parti e inviarlo a un motore di indicizzazione. Questa API di terze parti ha molte funzioni come getproducts, getproductprice, ecc. E ognuna di queste funzioni restituirà i dati in formato XML.

Da lì prenderò in carico, userò varie chiamate API e gestirò i dati XML con XSLT. E scriverà in un file CSV. Questo file verrà caricato su un motore di indicizzazione.

In questo momento ho i dettagli di 8000 prodotti per alimentare il motore, e quasi tutto il tempo che questo processo richiede circa 15 minuti per completare, e talvolta fallisce. Non riesco a trovare una soluzione migliore per questo. Sto pensando di gestire i dati XML in C # e di eliminare XSLT. Come penso, XSLT è molto più lento di C #.

È una buona idea? O che altro posso fare per risolvere questo problema?

    
posta Athul k Surendran 02.08.2013 - 08:24
fonte

2 risposte

2

XSLT è fatto per questo tipo di elaborazione. Anche se fosse più lento, sarebbe ridicolo provare a riscriverlo da solo. Sarebbe come dire che non ti piace quanto siano lente le espressioni regolari, quindi vuoi scrivere un programma per fare il modello che ti corrisponde.

Il problema non è tecnico ma piuttosto concettuale. Perché stai per alimentare 8000 prodotti da un database di terze parti? Probabilmente la maggior parte di questi dati non è cambiata dall'ultima volta che l'hai eseguita. Sicuramente ci deve essere un modo per ottenere le differenze tra l'ultima volta che hai recuperato i dati e ora.

Hai considerato l'utilizzo di un programma ETL per trasferire regolarmente i dati dal database del tuo cliente al tuo? Questi programmi sono fatti per il porting dei dati e raramente falliscono. Tuttavia, nel caso in cui non riescano, la maggior parte consente la possibilità di ritentare o eseguire operazioni alternative in caso di errore. Potrebbero essere programmati per funzionare regolarmente al mattino quando nessuno sta prestando molta attenzione. Presumo che il tuo motore di indicizzazione sia progettato per importare tutti questi dati dal file csv, nel qual caso il tuo lavoro sarebbe finito se invece utilizzassi l'ETL per aggiornare il database. L'applicazione web non deve sapere dell'esistenza di questo ETL e può continuare a funzionare utilizzando i dati caricati dal database locale.

    
risposta data 02.08.2013 - 10:13
fonte
1

Per lo meno, hai considerato di sfruttare i metodi dell'API di terze parti su più per recuperare i dati dal DB in più viaggi (ad esempio un sottoinsieme alla volta)? È possibile inviarlo al motore di indicizzazione in blocchi più piccoli (se possibile) o almeno creare i dati XML restituiti in memoria fino al termine del recupero di tutti i dati.

Ci sarebbero più viaggi di andata e ritorno, ma ognuno non impiegherebbe più tempo (hai usato la parola "timeout" - non sono sicuro di quanto letteralmente). Inoltre, se una di queste operazioni minori ha avuto esito negativo, è sufficiente riprovare l'operazione singola piuttosto che dover riavviare l'intero processo.

    
risposta data 02.08.2013 - 10:42
fonte

Leggi altre domande sui tag