2011-10-30 72 views
2

我的應用程序使用sqlite作爲後端創建內存數據庫(:內存:)。sqlite內存數據庫和多線程

我想讓我的主線程創建一個到內存數據庫的連接,並且這個連接被多個線程共享。這可能嗎? SQLite 3.7.8現在可供下載。

the shared cached一個可能的方式去?

+0

我不這麼認爲,因爲每個連接':內存:'在內存中創建一個獨立的DB ...看到http://www.sqlite.org/inmemorydb html的 – Yahia

+0

也許的[這個問題]重複[1] [1]:http://stackoverflow.com/questions/3267077/can-i-achieve-scalable-multi-threaded-access- to-an-in-in-memory-sqlite-database –

+0

@NicolasModrzyk對你的鏈接沒有答案。然而,這確實是同一個問題。 – cateof

回答

3

如果使用serialized mode打開與內存數據庫的連接,則可能會在多個線程之間共享連接。

爲此,您的SQLite必須編譯threadsafe - 這是默認值。

根據您的應用程序,如果您擁有多個閱讀器線程,則可以通過大型共享高速緩存到磁盤數據庫或使用WAL模式獲得更好的性能。

例子:

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

是否有源代碼可用的示例? – cateof

+0

不確定你需要什麼;添加一個例子來回答。 –

+0

謝謝。你的答案是我正在尋找的。 – cateof