Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2022
    Messaggi
    74

    Velocità di lettura da PHP: file XLSX vs MySQL

    Buongiorno,

    tramite PHP elaboro un file XLSX che ho precedentemente caricato sul portale.

    Questo file ha 65.000 righe (ma credo che a breve si arriver� anche a 100.000) e 20 colonne. Per leggere il file, immagazzinare i dati in diversi array multimediali ed infine, per stampare i dati a video tramite tabelle HTML, impiega circa 2 minuti. Questa operazione viene fatta pi� volte al giorno da pi� utenti.

    Vorrei cercare di ridurre l'attesa, dato che mi sono reso conto che il 'grosso' del tempo lo impiega nella lettura del file XLSX. Ho quindi pensato di immagazzinare i dati direttamente in un database MySQL, quando faccio l'upload del file (capita una o due volte al giorno ed in questa fase non ho fretta). In questo modo, ogni volta che devo consultare i dati (pi� volte al giorno), leggo direttamente nella tabella del database. Preciso che comunque le linee e le colonne da leggere sono tutte.

    Secondo voi ci sar� un risparmio in termini di tempo?

    p.s. per leggere i file XLSX uso PHPExcel-1.8.1. Prima ne usavo uno diverso, pi� veloce, ma leggeva solo i file XLS (e purtroppo non superava le 62.000 righe circa, in fase di lettura).

    Grazie

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,493
    Potresti anche cambiare la logica di presentazione dei dati.
    Invece di caricare tutte le righe in un colpo solo, le carichi a seconda delle esigenze.
    Non penso che presenterai su una singola pagina una tabella con 65.000 righe, sarà paginata no?
    Carica solo le righe che verranno presentate di volta in volta, o porta avanti i caricamenti per qualche altra pagina, ad esempio carichi la pagina da visualizzare e le 5 successive e 5 precedenti (nel caso l'utente andasse indietro).

    Comunque un DB aiuterebbe la gestione.

  3. #3
    è sempre buona norma NON usare excel come fosse un database

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2022
    Messaggi
    74
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Potresti anche cambiare la logica di presentazione dei dati.
    Invece di caricare tutte le righe in un colpo solo, le carichi a seconda delle esigenze.
    Non penso che presenterai su una singola pagina una tabella con 65.000 righe, sarà paginata no?
    Carica solo le righe che verranno presentate di volta in volta, o porta avanti i caricamenti per qualche altra pagina, ad esempio carichi la pagina da visualizzare e le 5 successive e 5 precedenti (nel caso l'utente andasse indietro).

    Comunque un DB aiuterebbe la gestione.
    Purtroppo non lo posso fare. In pratica ogni riga è un accesso effettuato da un operatore sanitario a casa di un suo paziente. Non mostro le 65.000 righe, ma un riassunto e sono più che altro statistiche. Esempio: quanti e quali pazienti ha un operatore, su quali comuni e distretti lavora un operatore, quali sono i pazienti presenti su un comune, ecc, ecc. Ci sono tantissimi dati raccolti a livello di statistiche che immagazzino in array multidimensionali ed ovviamente mi tocca leggere tutte le righe del file (che poi rappresentano gli accessi effettuati in un determinato periodo), per avere un quadro completo.

    Quote Originariamente inviata da optime Visualizza il messaggio
    è sempre buona norma NON usare excel come fosse un database
    me ne sono accorto, ma quando ho iniziato questo lavoro è partito quasi come un gioco per cercare di trovare un bug nella piattaforma che utilizziamo a lavoro. Poi è cresciuto esponenzialmente perché mi avvantaggiava di non poco nel mio lavoro quotidiano. C'è da dire che quando ho iniziato non usavo (e non uso) mysql da più di 15 anni ed anche all'epoca facevo piccole cose.
    Ultima modifica di jip77; 09-12-2024 a 17:24

  5. #5
    potresti eseguire delle query (le classiche SELECT ... FROM ..., se hai i driver giusti) sul foglio excel come se fosse un db invece di leggere tutte le righe e poi fare i calcoli in memoria. Ma vale quanto detto prima, excel non è un db, sarebbe una pezza in attesa di una ristrutturazione

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2022
    Messaggi
    74
    Quote Originariamente inviata da optime Visualizza il messaggio
    Ma vale quanto detto prima, excel non � un db, sarebbe una pezza in attesa di una ristrutturazione
    Infatti stavo pensando proprio a questo...

    Sul lavoro, da inizio dicembre, stiamo usando una nuova piattaforma che ci d� sempre la possibilit� di scaricare dei report xlsx, che io poi vado a rielaborare. Ho rifatto quasi tutta la struttura precedente usando meno codice e raggiungendo maggiori risultati, proprio perch� avevo un obiettivo ben chiaro (a differenza della volta precedente nella quale � stato un continuo 'aggiungere' di cose).

    A questo punto non mi resta che iniziare di nuovo con MySQL.

    Giusto per capire... quando carico i dati nella tabella nel database, devo effettuare una query per ogni rigo?

    codice:
    for ($row = 1; $row <= $highestRow; $row++){ 
    //query db
    }
    Forse in questa fase potrei anche scavalcare un altro problema che ho riscontrato.
    Attualmente la piattaforma mette a disposizione il download solo di file CSV, quindi dopo averli scaricati, mi tocca aprirli con Excel e salvarli in formato XLSX, per poi caricarli nella struttura che ho realizzato (una volta) e dove verranno letti ogni volta che ce ne sar� bisogno.

    Lo so che con PHP si possono leggere anche i file CSV, ma ho avuto problemi con le date e ho desistito per non perdere tempo.

    A questo punto potrei caricare direttamente i dati dal file CSV al database.
    Ultima modifica di jip77; 09-12-2024 a 21:19

  7. #7
    direi che la soluzione potrebbe essere quella di scaricare il csv, importarlo in mysql e poi lavorare con il db

    se hai perso un po' di smalto con le query, ti consiglio queste letture:
    https://blog.pagesd.info/public/2006...for-access.pdf
    https://blog.pagesd.info/public/2006...for-access.pdf
    https://blog.pagesd.info/public/2006...for-access.pdf

    sono per access, ma le istruzioni sql sono indipendenti dal db. ricordati poi che per questiti sui db qui nel forum c'è una sezione apposita

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2022
    Messaggi
    74
    Purtroppo mi sono appena accorto che sul mio nas Synology, ho phpMyAdmin, ma non ho MySql. Ho solo MariaDB. L'ho installato, ma di tutti gli esempi trovati in rete non me ne funziona neppure uno. Sarà questo il problema?

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2022
    Messaggi
    74
    Mi veniva restituito questo errore:
    codice:
    Warning: mysqli_query(): LOAD DATA LOCAL INFILE forbidden
    Dopo una breve ricerca ho impostato:
    codice:
    mysqli.allow_local_infile = 1
    Ora funziona

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2022
    Messaggi
    74
    Buonasera,

    sono riuscito a passare dalla lettura dei file XLS al database, e sono molto soddisfatto del risultato.

    Prima, dopo il download, ero costretto a salvare il file csv in formato xlsx e subito dopo, con un form per l'upload lo caricavo nella sua cartella. L'operazione di upload durava meno di 2 secondi, mentre ora siamo sui 3 minuti e mezzo per fare le seguenti operazioni:
    1) leggo direttamente il file csv (senza salvarlo in formato xlsx);
    2) elaboro direttamente i dati, mentre prima dovevo farlo in fase di lettura e stampa a video (es. ricavare il sesso dal codice fiscale);
    3) carico i dati 'puliti' nel database;

    Invece, la fase di lettura dal database e stampa, è passato da circa 2 minuti a circa 25 secondi.
    Quindi database batte xlsx 4 a 1 (almeno)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.