2012-10-09 2 views
11

Ci sono alcune domande relative a questo argomento su StackOverflow, ma non ho ottenuto la risposta corretta. Ho qualche dubbio sulle prestazioni dei file flat, è meglio usare file flat invece di SQLite?Come migliorare le prestazioni del database SQLite per Android

Ho preso statistiche sulle prestazioni per Android SQLite.

devo statistiche delle prestazioni per un tavolo che hanno 21 colonne

Qualcuno può suggerire prego come ridurre questo tempo di inserimento.

Records Write time in ms Read time in ms 
1000  67813     608 
1000  66340     604 
1000  64359     609 
10000  679837     5159 
10000  618062     5110 
10000  644638     5729 
10000  646878     5890 

Flat file hanno meno tempo, piuttosto che SQLite

Quindi nessuno per favore mi suggeriscono come posso migliorare questo tempo per SQLite.

Sto usando semplice database open insert using ContentValues e database chiuso.

Si prega di suggerire alcune cose come migliorare queste statistiche.

Statistiche di rendimento aggiornate dopo aver utilizzato la risposta di sotto. Ancora voglio aumentare queste prestazioni.

Records Writetime in ms   Readtime in ms 
1000  1645      530   
1000  2497      672   
1000  3143      610   
10000  16356      5243   
10000  14006      5122   
10000  13158      5002   
10000  14828      5234   
100000  125525     77622 

Grazie

+1

Si dovrebbe pubblicare il tuo codice di inserimento, se si desidera ottimizzare i tempi di inserimento. – keyser

+0

I file flat e SQLite hanno un obiettivo diverso in mente, uno è l'archiviazione con il recupero di massa, SQLite è per il recupero veloce (più veloce del file di testo nella maggior parte dei casi) – dvhh

+0

anche le transazioni per gli inserimenti di grandi dimensioni – njzk2

risposta

15

Credo che si sta inserendo 1000 o 10000 utilizzando un ciclo. Usa TRANSAZIONI, ridurrà drasticamente il tempo di scrittura. Ho già riscontrato un problema simile e ho ridotto il tempo di scrittura nel mio caso da circa 30 secondi a meno di 1 secondo.

Dai uno sguardo allo this.

In sostanza, che cosa si dovrebbe fare è:

db.beginTransaction(); 
try{ 
    for(int i = 0 ; i < LENGTH ; i++) { 
     // execute SQL 
    } 
    db.setTransactionSuccessful(); // marks a commit 
    } 
finally{ 
    db.endTransaction(); 
} 
+0

Ohh davvero grazie mille Fammi provare –

+0

Dove devo usare la query di inserimento qui? –

+0

Qui non ho bisogno di aprire il database e chiudere il databse nel mio codice? –