Sto usando il framework Codeigniter per PHP su piattaforma Windows. Il mio problema è che sto cercando di tenere traccia dell'avanzamento di un metodo di controllo in esecuzione in background. Il controller estrae i dati dal database (MySQL) quindi esegue qualche elaborazione e quindi memorizza nuovamente i risultati nel database. Il processo completo di cui sopra può essere considerato come una singola attività. È possibile assegnare una nuova attività mentre è in esecuzione un'altra attività. L'attività appena assegnata verrà aggiunta in una coda. Quindi, se posso tenere traccia dell'avanzamento del controller, posso mostrare lo stato di ciascuna di queste attività. Come se fosse possibile visualizzare lo stato "In sospeso" per le attività in coda, "In corso" per le attività in esecuzione e "Fatto" per le attività completate.
Problema principale:
Ora la prima cosa di cui ho bisogno per trovare è un algoritmo per tenere traccia dell'avanzamento della quantità di esecuzione che il metodo del controller ha completato e che significa tenere traccia di quanto quantità di metodo ha completato l'esecuzione. Ad esempio, questo script PHP tiene traccia dell'avanzamento degli array . Qui lo stato e lo stato attuali dopo l'esecuzione totale sono noti, quindi è possibile tracciare i suoi progressi. Ma non sono in grado di escogitare nulla di analogo nel mio caso.
Forse ciò che sto cercando di ottenere è programmaticamente impossibile. Se non è possibile, suggeriscimi una soluzione alternativa o un approccio completamente nuovo. Se alcuni dettagli sono in sospeso, puoi menzionarli. Scusa per la mia ignoranza, questo è il mio primo post qui. Ti do il benvenuto per sottolineare i miei errori.
Modifica
Struttura del database:
Gli URL e le parole chiave vengono prima inseriti dall'utente che sono memorizzati in una tabella di database chiamata link_master e keyword_master rispettivamente. Quindi le parole chiave vengono estratte da tutti i link presenti in questa tabella e confrontate con le parole chiave inserite dall'utente e viene calcolata la loro frequenza, che è il risultato finale. E i risultati sono memorizzati in un'altra tabella chiamata link_result . Ora i collegamenti secondari vengono estratti dai link del dominio e archiviati in una tabella chiamata sott_link_master . Ora di nuovo le parole chiave vengono estratte da questi collegamenti secondari ei risultati corrispondenti sono memorizzati in una tabella chiamata sub_link_result .
Il numero di record non può essere definito in anticipo in quanto il numero di link su qualsiasi pagina web può essere diverso. Si può conoscere solo la cardinalità della tabella link_result che sarà uguale alla moltiplicazione del numero di parole chiave e URL (s).
Inserisco più record alla volta utilizzando questa risorsa .
Struttura del controller:
Il controller estrae le parole chiave da una pagina Web e estrae anche le parole chiave da tutti i link presenti su quella pagina. Esiste un metodo chiamato crawlLink . Ho usato Rolling Curl per estrarre parole chiave e contenuti di pagine web. Ha una funzione di callback che ho usato per estrarre parole chiave insieme a generare risultati ed estrarre link secondari validi. Esiste un metodo insertResult che memorizza i risultati per link e sottol link nelle rispettive tabelle.
Sì, l'elaborazione dipende dal numero di record. Maggiore è il numero di record, maggiore è il tempo necessario per l'esecuzione:
Considera questo scenario:
Numero di collegamenti di dominio = 1
Numero di parole chiave = 3
Numero di risultati di collegamenti di dominio generati = 3 (3 x 1 come descritto nella domanda)
Numero di collegamenti secondari generati = 41
Numero di collegamenti secondari Risultato = 117 (41 x 3 = 123 ma alcuni link non sono validi o ricercabili)
Tempo approssimativo necessario per completare il processo sopra = 55 secondi.
Il risultato sopra è per un singolo link. Voglio tenere traccia dell'avanzamento dei risultati sopra riportati che vengono memorizzati nel database. Quando tutti i risultati sono memorizzati, l'attività è completa. Se i risultati vengono memorizzati, l'attività è In corso. Non sono chiaro come posso monitorare questo progresso.