Calcolare il numero di tabelle di un database sqlite

di il
19 risposte

19 Risposte - Pagina 2

  • Re: Calcolare il numero di tabelle di un database sqlite

    peruzzo ha scritto:


    Se hai una matrica 5000x5000 di object non puoi fare la trasposta inoltre metti il caso di avere 4999 colonne di double e 1 colonna di string ovvero una matrice "mista" di 5000x5000; con il tuo sistema non te la cavi, per questo cercavo di allargarmi alle tabelle conservando nei campi la memoria del tipo di oggetto (stringa, double, ecc...), la mia non era affatto una provocazione e come ho già detto la tua è davvero una bella soluzione ma non espandibile a tutti i contesti... tutto qui...
    1) se hai una matrice, puoi sempre fare la trasposta.
    2) e' sbagliato avere una matrice con 4999 colonne double ed 1 colonna string. A parte il fatto che non c'e' linguaggio di programmazione che ti permette di esprimere una cosa del genere. Al limite si possono fare delle matrici i cui singoli elemento possono essere un double oppure una stringa, oppure di tipo Object, Variant, cioe' un tipo che e' supertipo sia per i double ce per le stringhe. Ma qui si va ad incorrere in pesanti problemi di efficienza (l'oggetto deve essere convertito in double), di memoria inutilmente allocata (un double in forma di object e' un oggetto decisamente piu' grande di 8 byte),
    3) se il problema e' avere una colonna di tipo stringa e tutto il resto di tipo double, non si una un'unica struttura dati, ma se ne usano 2

    Si ritorna al punto di partenza: un datase relazionale non e' fatto per trattare tabelle 5000x5000 o anche 1.000.000x1.000.000. E non e' fatto per trattare righe di tipo diverso.

    E' stato pensato per supportare l'algebra relazionale.

    Per fare quello che ti serve, un database non e' lo strumeto adatto.

    Ti stai sforzando di trattare una vite come un chiodo: si puo' fare, ma ci saranno piu' problemi che benefici.

    I database relazionali vanno usati se il problema da affrontare si puo' risolvere con l'algebra relazionale.

    A te servono delle strutture dati dedicate.

    Ad esempio: per gestire una matrice di dati dello stesso tipo di dimensioni gigantesche, e la vuoi persistente, si possono utilizzare i memory mapped file (in un modo o nell'altro, tutti i SO mettono a disposizione un tale tipo di oggetto).

    Non conviene mai forzare uno strumento a funzionare in modo difforma da quello che e' il suo modo naturale. Meglio cercare uno strumento piu' adatto allo scopo.
  • Re: Calcolare il numero di tabelle di un database sqlite

    Ho capito, allora ci rinuncio e vedrò di analizzare nel dettaglio anche i memory mapped file ma prima di chiudere ti chiedo una cosa proprio su questi ultimi.

    Questi nuovi strumenti di cui parli e che io ho letto la definizione su wikipedia permettono di salvare le mie matrici su file con una ben precisa estensione, spostarli su dvd e leggerli con un altro programma java installato su un OS identico a quello usato per la creazione dei memory mapped file?
  • Re: Calcolare il numero di tabelle di un database sqlite

    Uffi... vi dimenticate di me...

    rincaro la dose se posso e faccio ancora una domanda...

    Il memory mapped file è, prestazionalmente parlando, migliore o peggiore che la scrittura su file .txt? Potreste mettermi in ordine di velocità di scrittura e lettura questi strumenti?

    database
    memory mapped file
    txt
  • Re: Calcolare il numero di tabelle di un database sqlite

    Consiglio: lascia perdere i problemi di performance/memoria allocata.

    Non serve a nulla rendere performante un'operazione (scrivere sul file/su database) che eseguirai una volta durante l'intera vita del programma (o un numero limitato di volte).

    Concentrari sulle funzionalita' da implementare e su quale struttura dati e' la piu' adatta per fare quello che ti serve

    Per prima cosa devi decidere:

    1) ma serve una matrice (o una tabella?) 100.000x100 elementi (tutti dello stesso tipo? di tipo diverso?)?

    2) quali sono le operazioni che devono essere eseguite?

    Ad esempio: per una matrice (di double), le operazioni possono essere: somma di matrici, moltiplicazione, inversione.
    In questo caso: leggi la matrice da file, la tieni in memoria, la usi per tutti i calcoli che ti serve, quindi la riscrivi su file. Per salvare la matrice basta un banale file. Fatto come? Ci sono infinite varianti (binario, CSV, di testo, ...)

    Ti serve per forza un qualcosa di persistente? Devi fare delle query come quelle che si possono fare con un db relazionale?

    Ci sono modi diversi per salvare una matrice 100.000x100 su un DB che non creare una tabella con 100.000 colonne. Una possibile rappresentazione e' la seguente:

    tabella di 3 colonne:

    1) indice della riga
    2) indice della colonna
    3) valore della cella.

    Non preoccuparti di quanta memoria sia necessario allocare: e' un problema del DB e non tuo.
  • Re: Calcolare il numero di tabelle di un database sqlite

    Stavo creando un metodo unico da usare in diversi programmi, non uno solo, per questo stavo ragionando su matrici di Object, e usando rs.getObject() durante la lettura. L'uso del metodo non è univoco. Trovi una descrizione di quello che sto copiando a questa pagina:

    http://www.mathworks.it/it/help/matlab/ref/xlsread.htm

    Per fare un esempio, il prossimo mese devo fare un programmino di questo tipo:

    Caricare una matrice (righexcolonne) di 10x10 circa da xls eseguire dei calcoli e fornire un output di 110000x90 circa su un file .x poi ricaricare la stessa matrice con un altro programma, sempre fatto in java, eseguire dei calcoli matematici e poi salvare il risultato in .x (matrice di 110000x90 circa).

    Quale soluzione mi consiglieresti sapendo che i dati sono tutti numerici di tipo double e .x potrebbe essere qualsiasi?

    Un altro problema che devo affrontare è invece questo:

    Ho tante matrici da 10x1000 su file distinti file1.x, ..., fileN.x, che devo raccogliere e mettere in un unico file generale.x di massimo 1000000000x1000, ricaricare in memoria, eseguire qualche calcolo e risalvare i risultati in un'ultima matrice di 1000000000x1 nel formato .x che dovrà essere stampato su 1700 file .pdf di max 1200 pagine da usarsi come consultazione...
    Anche qui .x può essere uno qualsiasi e le dimensioni delle matrici sono un ordine di grandezza massimo che mi può capitare di trattare...

    Con il primo problema .sqlite è sufficiente ma con il secondo no...
Devi accedere o registrarti per scrivere nel forum
19 risposte