2012-07-24 10 views
6

Tengo problemas con el rendimiento de las inserciones sqlite incluso con transacciones. Mi aplicación para Android recibe aproximadamente 23,000 filas de un servicio web y tengo que insertarlas en una sola tabla.Las inserciones SQLite se vuelven más lentas incluso con transacciones

El servicio web está particionado de modo que reciba aproximadamente 2000 filas en cada solicitud al WS y envuelva las 2000 inserciones dentro de una transacción. Después de que esas inserciones estén listas, envío la nueva solicitud al WS y de nuevo utilizo una nueva transacción para las nuevas 2000 filas.

Al principio funciona bien. Hace muchas inserciones por segundo. pero con el tiempo se vuelve más lento y finalmente termina con 4 o 3 inserciones por segundo hasta que completa las 23000 filas.

¿Hay algún problema con el tamaño de la tabla? Cuando se hace más grande, las inserciones se vuelven más lentas ¿Hay alguna manera de mejorar el rendimiento de esa gran cantidad de datos?

Gracias por su ayuda.

+3

¿Tiene algún índice que podría estar ralentizándolo? ¿Y está seguro de que solo está insertando 2000 a la vez y no (todos los datos recibidos hasta ahora) cada vez? –

+3

Esto suena como un conjunto de trabajo de transacción que se expande en ausencia de un COMPROMISO. – DaveE

+0

Bueno, todo depende de los datos que está insertando también, las cadenas ralentizarán su db. ¿Cuál es el tamaño de esas 2000 filas en términos de bytes? ¿Cuál es la diferencia de tamaño en el archivo DB después de insertar 2000 filas? Tengo un db con 388000 filas y su 64M en tamaño de archivo pero todos los datos son dobles. – JPM

Respuesta

1

Hay un hilo excelente que cubre el rendimiento de SQLite en la pregunta How Do I Improve The Performance of SQLite? que es bastante bueno. Me gustaría ir al menos a las declaraciones preparadas si no las estás usando ya.

Sin embargo, como está en Android, supongo que podría estar ejecutando algunos cuellos de botella de E/S escribiendo en la memoria flash. Intenta ejecutar el código en un par de dispositivos diferentes de diferentes fabricantes para ver si hay alguna variación extrema.

0

debe usar la partición de datos. , ya que puede insertar 100 - 100 una por una, de modo que el proceso será fluido y no se perderán los datos.

otra cosa Supongo que está utilizando asynch (puede ser otra) hilo.

o también puede utilizar el servicio en el último caso para consumir todos los datos a la vez.

Cuestiones relacionadas