2011-10-30 6 views
2

Mon application crée une base de données en mémoire (: memory :) en utilisant sqlite comme backend.sqlite en mémoire db et multithread

Je souhaite que mon thread principal crée une connexion à une base de données en mémoire et que cette connexion soit partagée par plusieurs threads. Est-ce possible? SQLite 3.7.8 est disponible au téléchargement dès maintenant.

Est-ce que the shared cached est une voie possible?

+0

Je ne le pense pas, car chaque connexion ': mémoire:' crée une base de données indépendante en mémoire ... voir http://www.sqlite.org/inmemorydb .html – Yahia

+0

Peut-être un double de [cette question] [1] [1]: http://stackoverflow.com/questions/3267077/can-i-achieve-scalable-multi-threaded-access- to-an-in-memory-sqlite-database –

+0

@NicolasModrzyk il n'y a pas de réponse à votre lien. Cependant, c'est la même question, en effet. – cateof

Répondre

3

Si vous ouvrez la connexion à votre base de données en mémoire à l'aide de serialized mode, la connexion peut être partagée entre plusieurs threads. Pour que cela fonctionne, votre SQLite doit être compilé threadsafe - ceci est la valeur par défaut. En fonction de votre application, vous pouvez obtenir de meilleures performances avec un grand cache partagé sur une base de données sur disque ou avec le mode WAL si vous avez de nombreux threads de lecture.

Exemple:

sqlite3 *pDb 

if (sqlite3_open_v2(":memory:", &pDb, SQLITE_OPEN_FULLMUTEX, NULL) == SQLITE_OK) { 

    start_thread1_with_db_handle(pDb); 

    start_thread2_with_db_handle(pDb); 

    // etc. 
} 
+0

est-il un exemple disponible avec le code source? – cateof

+0

Vous ne savez pas exactement ce dont vous avez besoin; un exemple ajouté pour répondre. –

+0

merci. Votre réponse est ce que je cherchais. – cateof