2012-10-09 12 views
11

Hay pocas preguntas relacionadas con este tema en stackoverflow, pero no obtuve la respuesta adecuada. Tengo algunas dudas sobre el rendimiento de los archivos planos. ¿Es mejor usar archivos planos en lugar de SQLite?Cómo mejorar el rendimiento de la base de datos SQLite para Android

Tomé estadísticas de rendimiento para Android SQLite.

que tienen estadísticas de rendimiento de una tabla que tienen 21 columnas

Puede alguien por favor sugerir la manera de reducir este tiempo de inserción.

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 tienen menos tiempo en lugar de SQLite

Así que alguien por favor me sugieren ¿Cómo puedo mejorar este tiempo para SQLite.

Estoy usando simple database open insert using ContentValues y base de datos.

Por favor sugiera algunas cosas sobre cómo mejorar estas estadísticas.

Estadísticas de rendimiento actualizadas después de usar la respuesta a continuación. Sin embargo, quiero aumentar este rendimiento.

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 

Gracias

+1

Usted debe enviar el código de inserción si se desea optimizar el tiempo de inserción. – keyser

+0

Archivo plano y SQLite tienen un objetivo diferente en mente, uno es almacenamiento con recuperación masiva, SQLite es para recuperación rápida (más rápido que el archivo de texto en la mayoría de los casos) – dvhh

+0

uso de transacciones para inserciones grandes – njzk2

Respuesta

15

yo creo que va a insertar 1000 o 10000 usando un bucle. Use TRANSACTIONS, reducirá drásticamente el tiempo de escritura. Ya me encontré con un problema así y redujo el tiempo de escritura en mi caso de alrededor de 30 segundos a menos de 1 segundo.

Eche un vistazo a this.

Básicamente, lo que debe hacer es:

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

Ohh realmente muchas gracias Déjame probar –

+0

¿Dónde tengo que usar la consulta insertar aquí? –

+0

¿Aquí no necesito abrir la base de datos y cerrar databse en mi código? –

Cuestiones relacionadas