Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2022
    Messaggi
    88

    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,509
    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
    Utente di HTML.it
    Registrato dal
    Oct 2022
    Messaggi
    88
    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

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

  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
    88
    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
    88
    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
    88
    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
    Quote Originariamente inviata da optime Visualizza il messaggio
    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/intermediate-microsoft-jet-sql-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
    Ottimo consiglio! Importare in MySQL permette di gestire i dati con più flessibilità. E grazie per le letture, utili per rinfrescare le query SQL! ��
    very high ranked vendor at gamer choice

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 © 2026 vBulletin Solutions, Inc. All rights reserved.