+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 10 su 10

Discussione: conservare dati su file. e leggerli velocemente. Che metodo uso?

  1. #1
    SebastianoFloridia non è in linea Scolaretto
    Post
    130

    conservare dati su file. e leggerli velocemente. Che metodo uso?

    Salve a tutti, al fine di scaricare i dati in memoria della mia struttura dati, vorrei scrivere molti dati, risultato di elaborazioni numeriche, su file.
    In una precedente versione del software in VB6, avevo scritto tanti file (uno per elemento) .
    Mi ritrovavo una cartella temp con centinaia di file.
    Sinceramente soluzione molto ruvida, ma alla fine ha funzionato molto bene ed abbastanza veloce.

    riuscivo a snellire la creazione di report , viste etc...

    Prima di rifare la stessa procedura VS2017, mi chiedo se esiste una maniera alternativa?
    Mi piacerebbe poter avere un unico file stile database da interrogare, filtrare etc....
    Mi chiedo se è meglio un file access, mysql, xml o rimango all'affidabile antico file testo.
    Cosa ne pensate?

    Saluti
    Sebastiano Floridia

  2. #2
    L'avatar di _alka_
    _alka_ non è in linea Very Important Person
    Luogo
    Reggio Emilia
    Post
    1,152
    Quote Originariamente inviato da SebastianoFloridia Visualizza il messaggio
    Mi chiedo se è meglio un file access, mysql, xml o rimango all'affidabile antico file testo.
    Dipende. Che natura hanno le informazioni che devi salvare?
    Sono strutturate? Sono tabelle di dati correlate tra loro?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Homepage | Blog | Delphi Podcast | Delphi Succinctly (e-book)

  3. #3
    SebastianoFloridia non è in linea Scolaretto
    Post
    130
    NO!!!
    un tabella di numeri infiniti 20 x infinito.

    -14.43033,.7116346,17.97151,-61.69313,-5855.486,206.0958,0,0,0,0,0,0,0,0,0,0,0,0
    -14.43033,.7116346,17.97151,-61.69313,-4933.547,169.5889,4.060267E-06,-1.162806E-05,-9.477769E-04,7.482136E-05,3.592703E-05,-4.39112E-07,0,0,0,0,0,0
    -14.43033,.7116346,17.97151,-61.69313,-4011.609,133.0821,8.120534E-06,-4.359357E-05,-3.581119E-03,1.496427E-04,6.571402E-05,-7.928834E-07,0,0,0,0,0,0
    -14.43033,.7116346,17.97151,-61.69313,-3089.671,96.57524,1.21808E-05,-9.151857E-05,-7.585041E-03,2.244641E-04,8.936098E-05,-1.061314E-06,0,0,0,0,0,0
    -14.43033,.7116346,17.97151,-61.69313,-2167.732,60.06839,1.624107E-05,-1.510251E-04,-1.264456E-02,2.992855E-04,1.068679E-04,-1.244404E-06,0,0,0,0,0,0
    -14.43033,.7116346,17.97151,-61.69313,-1245.794,23.56153,2.030134E-05,-2.177351E-04,-1.844469E-02,3.741068E-04,1.182348E-04,-1.342153E-06,0,0,0,0,0,0
    -14.43033,.7116346,17.97151,-61.69313,-323.8555,-12.94532,2.43616E-05,-2.872707E-04,-2.467046E-02,4.489282E-04,1.234617E-04,-1.354562E-06,0,0,0,0,0,0
    -14.43033,.7116346,17.97151,-61.69313,598.0829,-49.45218,2.842187E-05,-3.552538E-04,-3.100687E-02,5.237496E-04,1.225485E-04,-1.28163E-06,0,0,0,0,0,0
    -14.43033,.7116346,17.97151,-61.69313,1520.021,-85.95903,3.248214E-05,-4.173065E-04,-3.713894E-02,5.985709E-04,1.154953E-04,-1.123357E-06,0,0,0,0,0,0
    -14.43033,.7116346,17.97151,-61.69313,2441.96,-122.4659,3.65424E-05,-4.690509E-04,-4.275169E-02,6.733923E-04,1.023021E-04,-8.797433E-07,0,0,0,0,0,0
    -14.43033,.7116346,17.97151,-61.69313,3363.898,-158.9727,4.060267E-05,-5.061089E-04,-4.753014E-02,7.482137E-04,8.296883E-05,-5.50789E-07,0,0,0,0,0,0
    1,2,3,4,5,6,10,20,30,40,50,60,100,200,300,400,500, 600
    -14.43033,-.7116346,17.97151,61.69313,-5855.486,-206.0958,0,0,0,0,0,0,0,0,0,0,0,0
    -14.43033,-.7116346,17.97151,61.69313,-4933.547,-169.5889,4.060267E-06,1.162806E-05,-9.477769E-04,-7.482136E-05,3.592703E-05,4.39112E-07,0,0,0,0,0,0
    -14.43033,-.7116346,17.97151,61.69313,-4011.609,-133.0821,8.120534E-06,4.359357E-05,-3.581119E-03,-1.496427E-04,6.571402E-05,7.928834E-07,0,0,0,0,0,0
    -14.43033,-.7116346,17.97151,61.69313,-3089.671,-96.57524,1.21808E-05,9.151857E-05,-7.585041E-03,-2.244641E-04,8.936098E-05,1.061314E-06,0,0,0,0,0,0
    -14.43033,-.7116346,17.97151,61.69313,-2167.732,-60.06839,1.624107E-05,1.510251E-04,-1.264456E-02,-2.992855E-04,1.068679E-04,1.244404E-06,0,0,0,0,0,0
    -14.43033,-.7116346,17.97151,61.69313,-1245.794,-23.56153,2.030134E-05,2.177351E-04,-1.844469E-02,-3.741068E-04,1.182348E-04,1.342153E-06,0,0,0,0,0,0
    -14.43033,-.7116346,17.97151,61.69313,-323.8555,12.94532,2.43616E-05,2.872707E-04,-2.467046E-02,-4.489282E-04,1.234617E-04,1.354562E-06,0,0,0,0,0,0
    -14.43033,-.7116346,17.97151,61.69313,598.0829,49.45218,2.842 187E-05,3.552538E-04,-3.100687E-02,-5.237496E-04,1.225485E-04,1.28163E-06,0,0,0,0,0,0
    -14.43033,-.7116346,17.97151,61.69313,1520.021,85.95903,3.248 214E-05,4.173065E-04,-3.713894E-02,-5.985709E-04,1.154953E-04,1.123357E-06,0,0,0,0,0,0
    -14.43033,-.7116346,17.97151,61.69313,2441.96,122.4659,3.6542 4E-05,4.690509E-04,-4.275169E-02,-6.733923E-04,1.023021E-04,8.797433E-07,0,0,0,0,0,0
    -14.43033,-.7116346,17.97151,61.69313,3363.898,158.9727,4.060 267E-05,5.061089E-04,-4.753014E-02,-7.482137E-04,8.296883E-05,5.50789E-07,0,0,0,0,0,0
    1,2,3,4,5,6,10,20,30,40,50,60,100,200,300,400,500, 600
    -4.7814,-1.980077,-8.491572,42.07541,1882.448,-145.1236,4.060267E-05,-5.061089E-04,-4.753014E-02,7.482137E-04,8.296883E-05,-5.50789E-07,0,0,0,0,0,0
    -4.7814,-1.980077,-8.491572,42.07541,1823.007,-131.263,4.078625E-05,-5.098075E-04,-.048105,7.412506E-04,8.128514E-05,-5.067083E-07,0,0,0,0,0,0
    -4.7814,-1.980077,-8.491572,42.07541,1763.566,-117.4025,4.096982E-05,-5.132131E-04,-4.866826E-02,7.342876E-04,7.965547E-05,-4.670487E-07,0,0,0,0,0,0
    -4.7814,-1.980077,-8.491572,42.07541,1704.125,-103.542,4.115339E-05,-5.163566E-04,-.0492203,7.273246E-04,7.807982E-05,-4.318103E-07,0,0,0,0,0,0
    -4.7814,-1.980077,-8.491572,42.07541,1644.684,-89.68143,4.133697E-05,-5.192687E-04,-.0497615,7.203616E-04,7.655819E-05,-4.009932E-07,0,0,0,0,0,0
    -4.7814,-1.980077,-8.491572,42.07541,1585.243,-75.82088,4.152055E-05,-5.219807E-04,-5.029224E-02,7.133986E-04,7.509057E-05,-3.745973E-07,0,0,0,0,0,0
    -4.7814,-1.980077,-8.491572,42.07541,1525.802,-61.96035,4.170412E-05,-5.245234E-04,-.0508129,7.064355E-04,7.367698E-05,-3.526226E-07,0,0,0,0,0,0
    -4.7814,-1.980077,-8.491572,42.07541,1466.361,-48.09981,4.18877E-05,-5.269278E-04,-5.132385E-02,6.994725E-04,7.23174E-05,-3.350692E-07,0,0,0,0,0,0
    -4.7814,-1.980077,-8.491572,42.07541,1406.92,-34.23927,4.207127E-05,-5.292248E-04,-5.182547E-02,6.925095E-04,7.101184E-05,-3.219369E-07,0,0,0,0,0,0
    -4.7814,-1.980077,-8.491572,42.07541,1347.479,-20.37873,4.225485E-05,-5.314452E-04,-5.231814E-02,6.855465E-04,6.97603E-05,-3.132259E-07,0,0,0,0,0,0
    -4.7814,-1.980077,-8.491572,42.07541,1288.038,-6.518
    Senza interconnessioni di tabelle ed incroci logici.
    Fiumi di numeri in cascata.
    Però all'occorrenza , per disegnare un grafico o un report , mi serve attingere a 20 righe tra 50.000. tutto velocemente.

    Grazie
    Sebastiano
    Ultima modifica di SebastianoFloridia; 22-08-2019 20:43 

  4. #4
    L'avatar di _alka_
    _alka_ non è in linea Very Important Person
    Luogo
    Reggio Emilia
    Post
    1,152
    Quote Originariamente inviato da SebastianoFloridia Visualizza il messaggio
    NO!!! un tabella di numeri infiniti 20 x infinito.
    Senza interconnessioni di tabelle ed incroci logici.
    Fiumi di numeri in cascata.
    In tal caso, credo che un banale file binario dia le performance migliori, se non devi associare altre informazioni ai singoli pacchetti di valori, se ci sono.

    Quote Originariamente inviato da SebastianoFloridia Visualizza il messaggio
    Però all'occorrenza , per disegnare un grafico o un report , mi serve attingere a 20 righe tra 50.000. tutto velocemente.
    E come le individui?
    Come fai a determinare qual è il blocco di dati da caricare?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Homepage | Blog | Delphi Podcast | Delphi Succinctly (e-book)

  5. #5
    SebastianoFloridia non è in linea Scolaretto
    Post
    130
    Stiamo parlando della versione VB6.
    Ciclando tutte le righe, conoscendo il numero dell'indice dell'elemento e di altri parametri.

    per esempio:
    asta 658 combinazione 50 .
    comincio a prendere 50 righe della riga 658x50 e poi esco.
    Dividendo in tanti file sono riuscito a d essere velocissimo.
    Certo adesso mi piacerebbe, invece di ciclare tutto, di leggere dalla riga che mi interessa.
    Grazie
    Sebastiano Floridia

  6. #6
    L'avatar di _alka_
    _alka_ non è in linea Very Important Person
    Luogo
    Reggio Emilia
    Post
    1,152
    Quote Originariamente inviato da SebastianoFloridia Visualizza il messaggio
    per esempio:
    asta 658 combinazione 50 .
    comincio a prendere 50 righe della riga 658x50 e poi esco.
    Dividendo in tanti file sono riuscito a d essere velocissimo.
    Certo adesso mi piacerebbe, invece di ciclare tutto, di leggere dalla riga che mi interessa.
    Non basterebbe quindi creare un file per ogni blocco? Ad esempio, un file 658.dat per l'asta 658.

    Usando un formato binario dove ogni combinazione ha una lunghezza fissa, basterebbe spostarsi con una "seek" nel file per raggiungere la combinazione richiesta (ad esempio, se una combinazione sono due byte, muoversi di 2xN dove "N" è il numero della combinazione).

    Sono tutte ipotesi, ma non capisco qual è il motivo per cui dovresti usare un formato differente, tipo un database strutturato, se poi non hai intenzione di sfruttare alcuna peculiarità o comodità messa a disposizione del formato?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Homepage | Blog | Delphi Podcast | Delphi Succinctly (e-book)

  7. #7
    SebastianoFloridia non è in linea Scolaretto
    Post
    130
    Concordo. Infatti è stato strutturato così. un file per ogni asta.
    l'unica cosa che ho preferito fare è mantenere il file testo al posto del file binario.
    Molto più comodo per le assistenza ai clienti.
    in effetti è una serie di dati senza grosse necessità.
    Deduco che la scelta fatta 15 anni fa con VB6 era la migliore.
    Grazie Tante.
    Sebastiano Floridia

  8. #8
    SebastianoFloridia non è in linea Scolaretto
    Post
    130
    L'unica cosa che mi sarebbe piaciuto di differente era avere un file unico invece di 2000.
    Grazie
    Sebastiano

  9. #9
    L'avatar di _alka_
    _alka_ non è in linea Very Important Person
    Luogo
    Reggio Emilia
    Post
    1,152
    Quote Originariamente inviato da SebastianoFloridia Visualizza il messaggio
    L'unica cosa che mi sarebbe piaciuto di differente era avere un file unico invece di 2000.
    Se vuoi usare un unico file, applica lo stesso concetto di "spostamento" (offset) nel file binario applicato al pacchetto dell'asta, se questo ha dimensioni fisse.

    In alternativa, puoi pensare di ricorrere a un DB dove ogni file diventa una singola tabella, costituita magari da un solo campo che è il valore della combinazione, o magari due, se vuoi aggiungere il progressivo numerico.

    Il formato testo invece, sebbene sia molto comodo, risulterà sempre il più lento fra le alternative, in quanto per scorrere le combinazioni possibili devi contare i ritorni a capo, a meno che tu non faccia uso di una sorta di "padding", cioè tu non riesca a ricondurre il file a una dimensione fissa per combinazione, ad esempio aggiungendo degli zeri, e così puoi sempre spostarti con sicurezza di un numero di byte determinabile per arrivare al punto desiderato.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Homepage | Blog | Delphi Podcast | Delphi Succinctly (e-book)

  10. #10
    L'avatar di gibra
    gibra non è in linea Amanuense
    Luogo
    Breganze (VI)
    Post
    6,073
    Quote Originariamente inviato da SebastianoFloridia Visualizza il messaggio
    L'unica cosa che mi sarebbe piaciuto di differente era avere un file unico invece di 2000.
    Accedere continuamente ad un unico file di testo è tutt'altro che performante.

    Se vuoi i dati in un solo file allora opterei per un banale database Access (formato MDB) dato che il provider è già pre-installato di default in tutte le versioni di Windows. A meno che tu il tuo programma sia a 64bit, in questo caso come non detto. Devi ripiegare su SQLite o simili.

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi