Dimensione file access

di il
35 risposte

35 Risposte - Pagina 2

  • Re: Dimensione file access

    Che dimensione ha il file di testo?

  • Re: Dimensione file access

    23/11/2023 - Stifone ha scritto:


    Che dimensione ha il file di testo?

  • Re: Dimensione file access

    23/11/2023 - Toki ha scritto:


    Come suggerito da altri stai utilizzando un sistema di database che non è progettato per un utilizzo simile.

    Hai considerato di utilizzare Access solo per le maschere e un DBMS con SQL Server per i dati?

    Vista la massiva attività di BULK, hai provato a fare così?

    1. Eliminare la tabella con i dati da ricostruire
    2. Creare nuovamente la tabella
    3. Inserire i dati

    È solo un test che potresti fare… magari impatta meno di altri meccanismi 

    Alla fine per non dover fare lavorazioni parziali, compattare e riprendere dovrò provare a fare come avete suggerito anche se penso che non cambi la sostanza. le routine con la creazione di elementi temporanei girano sempre sul fiel access.

  • Re: Dimensione file access

    Nell'esempio dei dati che hai postato ved UN SACCO di numeri, UN SACCO di zeri.

    Direi che c'e' abbondante spazio per fare delle ottimizzazioni e ridurre DRASTICAMENTE la quantita di spazio allocato.

    Non hai ancora indicato come sono fatte le tabelle e che cosa contengono le colonne. NON SERVE che indichi esplicitamente il nome della colonna, puo isemplicemente dire:

    nella tabella 1, colonna 1, metto i primi 5 caratteri del record di tipo 1,

    Ma a parte questo direi che ci sono almeno TRE modi per risparmiare un bel po' di spazio:

    1. se una stringa puo' essere convertita in un numero interno, salvare in Access il valore intero e NON la stringa
    2. se la stringa e' composta dalla ripetizione di un particolare carattere (ad esempio lo 0), sostituire la sequenza dei caratteri ripetuti con una sua rappresentazione ‘compatta’. 
    3. se ci sono particolari stringhe che si ripetono MOLTISSIME VOLTE, invece di DUPLICARLE, metterle in una tabella SEPARATA (con relativo indice) e referenziare tale tabelle nelle altre tabelle.

    .

    Per quanto riguarda 1, la stringa

    03000065822023022023020

    ruslta presente 40 (QUARANTA) volte. Se la metti in una tabella separata, ne tieni un'UNICA copia e al suo posto metti un indice numerico composto da 4 byte. Quindi converti una string di 24 caratteri/byte in una di 4, riducendo lo spazio DEL 83%

    Per quanto riguarda 2, ad esempio, invece di

    00350100000000000000000000000000000000000000

    potresti scrivere 

    003501Z38  

    (ci sono 38 zeri finali). Gia' cosi' hai ridotto una stringa da 45 caratteri a 10. Trucchetto che ti permette di ridurre lo spazio allocato DEL 75%.

    https://it.wikipedia.org/wiki/Run-length_encoding

    come vedi, senza saper ne leggere ne scrivere, sono state identificate delle strategie per ridurre di ALMENO il 50% lo spazio allocato!

    Pa robabilmente si puo' fare di MOOOOLTO meglio.

    Per QUALUNQUE algoritmo/implementazione software c'e' SEMPRE un bilanciamento tra SPAZIO e TEMPO: 

    Per RIDURRE il tempo, bisogna usare PIU' SPAZIO: classico esempio sono le cache usate nei siti web per evitare di rigenerare piu' volte la stessa pagina

    per RIDURRE lo spazio, bisogna fare piu' calcoli quindi usare PIU' TEMPO: come in questo caso, perche' per ridurre lo spazio allocato devi mettere in piedi un meccanismo di compressione/decompressione delle stringhe.

  • Re: Dimensione file access

    Prova a postare, su un sito di condivisione tipo Dropbox, :

    • i file di testo 
    • il file di Access con le tabelle tutte vuote e compattandolo alla chiusura
    • i criteri, se non li hai salvati all'interno del file di Access, con cui riconoscere le condizioni con cui inserirli nelle tabelle

    naturalmente il tutto in un file compresso, così si prova a farti vedere un esempio di come agire.

  • Re: Dimensione file access

    23/11/2023 - migliorabile ha scritto:


    Nell'esempio dei dati che hai postato ved UN SACCO di numeri, UN SACCO di zeri.

    Direi che c'e' abbondante spazio per fare delle ottimizzazioni e ridurre DRASTICAMENTE la quantita di spazio allocato.

    Non hai ancora indicato come sono fatte le tabelle e che cosa contengono le colonne. NON SERVE che indichi esplicitamente il nome della colonna, puo isemplicemente dire:

    nella tabella 1, colonna 1, metto i primi 5 caratteri del record di tipo 1,

    Ma a parte questo direi che ci sono almeno TRE modi per risparmiare un bel po' di spazio:

    1. se una stringa puo' essere convertita in un numero interno, salvare in Access il valore intero e NON la stringa
    2. se la stringa e' composta dalla ripetizione di un particolare carattere (ad esempio lo 0), sostituire la sequenza dei caratteri ripetuti con una sua rappresentazione ‘compatta’. 
    3. se ci sono particolari stringhe che si ripetono MOLTISSIME VOLTE, invece di DUPLICARLE, metterle in una tabella SEPARATA (con relativo indice) e referenziare tale tabelle nelle altre tabelle.

    .

    Per quanto riguarda 1, la stringa

    03000065822023022023020

    ruslta presente 40 (QUARANTA) volte. Se la metti in una tabella separata, ne tieni un'UNICA copia e al suo posto metti un indice numerico composto da 4 byte. Quindi converti una string di 24 caratteri/byte in una di 4, riducendo lo spazio DEL 83%

    Per quanto riguarda 2, ad esempio, invece di

    00350100000000000000000000000000000000000000

    potresti scrivere 

    003501Z38  

    (ci sono 38 zeri finali). Gia' cosi' hai ridotto una stringa da 45 caratteri a 10. Trucchetto che ti permette di ridurre lo spazio allocato DEL 75%.

    https://it.wikipedia.org/wiki/Run-length_encoding

    come vedi, senza saper ne leggere ne scrivere, sono state identificate delle strategie per ridurre di ALMENO il 50% lo spazio allocato!

    Pa robabilmente si puo' fare di MOOOOLTO meglio.

    Per QUALUNQUE algoritmo/implementazione software c'e' SEMPRE un bilanciamento tra SPAZIO e TEMPO: 

    Per RIDURRE il tempo, bisogna usare PIU' SPAZIO: classico esempio sono le cache usate nei siti web per evitare di rigenerare piu' volte la stessa pagina

    per RIDURRE lo spazio, bisogna fare piu' calcoli quindi usare PIU' TEMPO: come in questo caso, perche' per ridurre lo spazio allocato devi mettere in piedi un meccanismo di compressione/decompressione delle stringhe.

    1. La riga, e quindi il record, non si ferma ai caratteri che hai riportato ma è tutta, quindi sono 40 record diversi.
    2. Per riempire i campi della tabella devo sapere il numero di zeri che ci sono
  • Re: Dimensione file access

    23/11/2023 - migliorabile ha scritto:


    Nell'esempio dei dati che hai postato ved UN SACCO di numeri, UN SACCO di zeri.

    Direi che c'e' abbondante spazio per fare delle ottimizzazioni e ridurre DRASTICAMENTE la quantita di spazio allocato.

    Non hai ancora indicato come sono fatte le tabelle e che cosa contengono le colonne. NON SERVE che indichi esplicitamente il nome della colonna, puo isemplicemente dire:

    nella tabella 1, colonna 1, metto i primi 5 caratteri del record di tipo 1,

    Ma a parte questo direi che ci sono almeno TRE modi per risparmiare un bel po' di spazio:

    1. se una stringa puo' essere convertita in un numero interno, salvare in Access il valore intero e NON la stringa
    2. se la stringa e' composta dalla ripetizione di un particolare carattere (ad esempio lo 0), sostituire la sequenza dei caratteri ripetuti con una sua rappresentazione ‘compatta’. 
    3. se ci sono particolari stringhe che si ripetono MOLTISSIME VOLTE, invece di DUPLICARLE, metterle in una tabella SEPARATA (con relativo indice) e referenziare tale tabelle nelle altre tabelle.

    .

    Per quanto riguarda 1, la stringa

    03000065822023022023020

    ruslta presente 40 (QUARANTA) volte. Se la metti in una tabella separata, ne tieni un'UNICA copia e al suo posto metti un indice numerico composto da 4 byte. Quindi converti una string di 24 caratteri/byte in una di 4, riducendo lo spazio DEL 83%

    Per quanto riguarda 2, ad esempio, invece di

    00350100000000000000000000000000000000000000

    potresti scrivere 

    003501Z38  

    (ci sono 38 zeri finali). Gia' cosi' hai ridotto una stringa da 45 caratteri a 10. Trucchetto che ti permette di ridurre lo spazio allocato DEL 75%.

    https://it.wikipedia.org/wiki/Run-length_encoding

    come vedi, senza saper ne leggere ne scrivere, sono state identificate delle strategie per ridurre di ALMENO il 50% lo spazio allocato!

    Pa robabilmente si puo' fare di MOOOOLTO meglio.

    Per QUALUNQUE algoritmo/implementazione software c'e' SEMPRE un bilanciamento tra SPAZIO e TEMPO: 

    Per RIDURRE il tempo, bisogna usare PIU' SPAZIO: classico esempio sono le cache usate nei siti web per evitare di rigenerare piu' volte la stessa pagina

    per RIDURRE lo spazio, bisogna fare piu' calcoli quindi usare PIU' TEMPO: come in questo caso, perche' per ridurre lo spazio allocato devi mettere in piedi un meccanismo di compressione/decompressione delle stringhe.

  • Re: Dimensione file access

    Non quotare tutto il messaggio se è lungo.

    Seleziona la porzione di testo da quotare e poi clicca sul pulsante “Cita”. 

  • Re: Dimensione file access

    Aspetta un attimo… quelli sono i campi relativi a variabili in COBOL. Ma nel DB come sono i corrispondenti campi?

    Non avrai mica usato tutti campi di testo anche per i valori numerici, spero 

  • Re: Dimensione file access

    23/11/2023 - oregon ha scritto:


    Aspetta un attimo… quelli sono i campi relativi a variabili in COBOL. Ma nel DB come sono i corrispondenti campi?

    Non avrai mica usato tutti campi di testo anche per i valori numerici, spero 

    Io non ho usato proprio niente. il file di origine mi viene passato come pure il tracciato record della tabella. 

    La tabella deve avere quei campi con quella lunghezza e quel tipo. La tipizzazione è poco recente ma quella è.

  • Re: Dimensione file access

    Dovresti per i codici mostrati qual'è l'effettiva ripartizione, seguendo la struttura mostrata nell'immagine allegata sotto

    , perchè da quello che hai mostrato non è proprio chiaro vedi  

    AliquotaLavoratore9(2) V9(3)

    .

  • Re: Dimensione file access

    23/11/2023 - Stifone ha scritto:


    Dovresti per i codici mostrati qual'è l'effettiva ripartizione, seguendo la struttura mostrata nell'immagine allegata sotto

    I primi due caratteri di ogni riga indicano la tabella di riferimento

  • Re: Dimensione file access

    @AngeloBrac, supponendo che hai mappato correttamente i record del file di testo nelle corrispondenti colonne del tipo corretto in Access, la soluzione e' semplice:

    Access NON VA BENE

    DEVE essere sostituito con SQL Server. 

    L'altro problema e' perche' dover cancellare milioni di record per reinserirli. 

    Ci sono 2 metodi per fare questa operazione in modo efficiente 

    1. cancellare la tabella in blocco e ricrearla
    2. usare il TRUNCATE TABLE (ma in Access non esiste) che vuota la tabella in un colpo solo.

    Giusto per riassunto, se non sbaglio:

    1. 9(n): valore intero con al massimo n cifre decimali
    2. X(n) : stringa di n caratteri
    3. 9(n)V9(m): valore reale con n cifre nella parte intera e m in quella frazionaria

    .

    @oregon ha sollevato correttamente la questione. 

    Ma la tua risposta fa pensare che hai mappato il tracciato record in colonne di tipo testo, il che e' un suicidio!

    Il COBOL e i suoi formati dati NON SONO Access. 

    https://support.microsoft.com/en-au/office/data-types-for-access-desktop-databases-df2b83ba-cef6-436d-b679-3418f622e482

  • Re: Dimensione file access

    Dalla codifica che hai pubblicato il risultato della scomposizione dovebbe essere quello nella tabella che però credo non sia corretto, basta vedere il CodiceAssegno che probabilmente dovrebbero avere sempre un valore numerico, se la decodifica è quella indicata da Migliorabile, e il testo Restante nella parte finale e altri.

    Il caratttere * indica uno spazio vuoto.

    Se invece la decodificazione deve essere interpretata in modo differente fallo vedere tu.

  • Re: Dimensione file access

    Al netto della tipizzazione dei campi delle tabelle mi trovo con un file con milioni di record-righe. Ogni riga deve essere distribuita, secondo il tracciato record della tabella identificata dai primi due caratteri, nei campi delle tabelle preparate in access. Questo per ogni riga. Non creo e non cancello. La tabella che avete ricostruito non è corretta. Nel saggio di dati che ho postato ci sono 4 tipologie di record diversi (vedere primi due caratteri di ogni riga) e sono state tutte distribuite nel tracciato record specifico della tabelle “3” l'unico che ho postato ad esempio.

    Ogni tabella ha un suo tracciato, le righe di tabelle diverse hanno lunghezza diversa.

    La distribuzione nei campi delle tabelle la faccio tramite codice.

Devi accedere o registrarti per scrivere nel forum
35 risposte