2010-04-02 14 views
6

Para evitar que una base de datos en memoria SQLite se limpie, se debe usar la misma conexión para acceder a la base de datos. Sin embargo, usar la misma conexión hace que SQLite sincronice el acceso a la base de datos. Por lo tanto, si tengo muchos subprocesos que realizan lecturas en una base de datos en memoria, es más lento en una máquina multinúcleo que el mismo código exacto que se ejecuta en una base de datos respaldada por archivos.¿Pueden las bases de datos SQLite en memoria escalar con concurrencia?

¿Hay alguna manera de obtener lo mejor de ambos mundos? Es decir, ¿una base de datos en memoria que permite múltiples llamadas concurrentes a la base de datos?

Respuesta

3

La respuesta es no. Pregunté en el grupo de usuarios de SQLite y obtuve la siguiente respuesta de Pavel Ivanov:

No, SQLite no admite el acceso concurrente completo a ninguna base de datos. La concurrencia única que puede ganar es tener una base de datos en disco sin caché compartida (por lo que en realidad tiene varias copias de la base de datos en la memoria ). Por supuesto, no considero la opción de concurrencia de diferentes procesos.

0

de aquí comprendí que la respuesta es sí http://www.sqlite.org/faq.html#q6

+0

Eso solo significa que es seguro de usar desde varios hilos. Puedo dar fe de ello. Pero no escala, usa solo un núcleo de mi doble núcleo. Entonces es seguridad a expensas del rendimiento. Actualizando mi título para aclarar –

+0

"usa solo un núcleo" - ¡significa que sus hilos fueron enviados de esa manera! Esto puede deberse a un bloqueo interno u otra sincronización en sqlite. Si realmente quieres la concurrencia DB + debes considerar algún código personalizado con descarga final a la base de datos compartida. Creo que quieres de sqlite demasiado. – Andrey

+1

El punto es que funciona con una base de datos SQLite basada en archivos (100% de consumo de CPU), pero no con una base de datos en memoria. Si SQLite no es compatible con este escenario, está bien, pero necesito una cita. –

2

Si ajusta el tamaño de página y el tamaño de la caché lo suficientemente grande como para contener toda la base de datos, operaciones de lectura se cumplirán desde el caché y el rendimiento será casi igual a una base de datos en memoria.

+0

+1 Idea interesante: lo tendré en cuenta. –

Cuestiones relacionadas