2012-10-09 1 views
11

Il ya quelques questions liées à ce sujet sur stackoverflow, mais je n'ai pas obtenu la bonne réponse. J'ai quelques doutes sur la performance des fichiers plats, Est-il préférable d'utiliser des fichiers plats au lieu de SQLite?Comment améliorer les performances pour la base de données SQLite pour Android

J'ai pris les statistiques de performance pour Android SQLite.

J'ai des statistiques de performance pour une table qui ont 21 colonnes

Quelqu'un peut-il s'il vous plaît suggérer comment réduire ce temps d'insertion.

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 ont moins de temps plutôt que SQLite

Alors, quelqu'un s'il vous plaît me suggérer comment améliorer ce temps pour SQLite. J'utilise simple database open insert using ContentValues et la base de données fermer.

S'il vous plaît me suggérer des choses comment améliorer ces statistiques.

Mise à jour des statistiques de performances après l'utilisation de la réponse ci-dessous. Je souhaite toujours augmenter ces performances.

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 

Merci

+1

Vous devez envoyer votre code d'insertion si vous voulez optimiser le temps d'insertion. – keyser

+0

Le fichier plat et SQLite ont un objectif différent, l'un est le stockage avec récupération en vrac, SQLite est pour la récupération rapide (plus rapide que le fichier texte dans la plupart des cas) – dvhh

+0

utiliser des transactions pour les grandes insertions – njzk2

Répondre

15

je crois que vous insérez 1000 ou 10000 en utilisant une boucle. Utilisez TRANSACTIONS, cela réduira considérablement le temps d'écriture. J'ai déjà rencontré un tel problème et cela a réduit le temps d'écriture dans mon cas d'environ 30 secondes à environ moins d'une seconde.

Jetez un coup d'œil à this.

Fondamentalement, ce que vous devez faire est:

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

Ohh vraiment merci beaucoup Laissez-moi essayer –

+0

Où je dois utiliser insérer une requête ici? –

+0

Ici, je n'ai pas besoin d'ouvrir la base de données et de fermer la base de données dans mon code? –

Questions connexes