Hack Manso: Mejorar la velocidad de SQLite en Google App Engine SDK

Estaba tratando de inicializar una base de datos en local, con el Google App Engine SDK y me estaba volviendo loco.

Ni siquiera era factible usar –use_sqlite que introdujeron en la versión 1.3.3. La velocidad de los inserts a la base de datos iban superlentos, en plan, diez por segundo. Infumable.

Vale, vale, es el SDK, y el objetivo es desarrollar la aplicación y la velocidad no es lo más importante… pero si para insertar 1000 datos, tienen que pasar 10 minutos, pues mal vamos. Si me dijeras 1 millón, pues aún lo entendería minimamente… pero ¿1000 miseros inserts? ¿10 minutos? ¿estamos todos locos?

Así que, partiendo de que SQLite parece funcionar de puta madre, pues no me cuadraba… Mirando el FAQ de SQLite, me he encontrado con que la pregunta 19:

(19) INSERT is really slow – I can only do few dozen INSERTs per second

La respuesta es, SQLite puede hacer fácil 50.000 inserts/segundo peeeeeeeero para garantizar la integridad de los datos, se espera a que el disco confirme que los datos se han escrito bien, por si se va la luz, etc… Vamos, un cuello de botella enorme, cuando a mi los datos me dan un poco igual porque es un entorno de prueba, lo que quiero es que vayan rápido los inserts porque si no me muero del asco desarrollando.

En fin, que la solución que dan es usar “PRAGMA synchronous=OFF“. La única forma de usar ese pragma, es editar el SDK del Google App Engine, y ejecutar esa línea tras inicializar la base de datos.

Hay que editar el archivo:

google_appengine/google/appengine/datastore/datastore_sqlite_stub.py

Vamos al constructor “__init__”, y después de que inicialize la conexión a la base de datos “self.__connection = sqlite3.connect [...]” pues metemos la siguiente linea:

self.__connection.execute(‘PRAGMA synchronous=OFF’)

Y, afotunadamente, cambiando esta línea he pasado de 10 inserts por segundo a más de 100 inserts por segundo. Más de 10x más rápido cambiando sólo una linea.

Ahora ya puedo continuar con lo que estaba haciendo.

Trackback URL

, , , , ,

2 Comments on "Hack Manso: Mejorar la velocidad de SQLite en Google App Engine SDK"

  1. edu
    01/12/2011 at 1:23 am Permalink

    o eso o hacer una transaccion que reduces el timpo de los inserts

Trackbacks

  1. [...] Hack Manso: Mejorar la velocidad de SQLite en Google App Engine SDK [...]

Hi Stranger, leave a comment:

ALLOWED XHTML TAGS:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Subscribe to Comments