Sqlite記憶體資料庫在多執行緒下的使用問題

2021-04-13 23:47:20 字數 816 閱讀 1613

windows平台,多執行緒伺服器,我想建立乙個全域性記憶體資料庫,然後在其他執行緒裡面使用這個庫,包括讀寫,弄的時候發現有幾個問題:

1  方法一:程式啟動時建立乙個全域性sqlite連線,各個執行緒都可以操作這個例項。但經測試發現,這麼做,如果不做同步,讀寫都會衝突。也就是說,無論讀寫,只能有乙個執行緒操作該例項,這樣未免也太痛苦了,讀也需要同步,效率降低太多。

2  方法二:如果把資料庫建立到檔案,那麼可以在建立每個服務執行緒裡面開啟這個資料庫,然後操作,這樣就不需要處理同步了。(讀不需要同步,寫sqlite自己做了同步lock)

不過如果把資料庫建立到記憶體,好像就不能這樣了:

全域性資料庫用sqlite_open(":memory:",&db)建立,但在子執行緒裡面如果也用sqlite_open(":memory:",&db)得到的是乙個空資料庫。事實上,即使在同乙個執行緒裡面這樣做:

sqlite3* db1=null;

sqlite3* db2=null;

sqlite3_open(":memory:",&db1);

//在db1中建立表,填資料等等

sqlite3_open(":memory:",&db2);//這時候得到的db2是乙個空的資料庫

在這種情況下如何才能得到先前已經建立的記憶體資料庫?

第 1 樓    xiao_fang(frank)

2006-4-7 17:10:52

得分:100

返回頂部

第 2 樓    lsgt()

2006-4-7 17:38:16

得分:0返回頂部

就是沒看懂啊。不知道有沒有達人知道如何處理這樣的問題? 

Sqlite記憶體資料庫在多執行緒下的使用問題

sqlite 記憶體資料庫的attach 我已經往記憶體資料庫a插入了10w條資料,我現在想把a匯入乙個物理檔案b 具有相同表結構 是不是應該用attach指令?有沒有高人詳細指點一下?sqlite3 open memory db ret sqlite3 exec db,create table n...

SQLite 記憶體資料庫學習手冊

一 記憶體資料庫 在sqlite中,資料庫通常是儲存在磁碟檔案中的。然而www.cppcns.com在有些情況下,我們可以讓資料庫始終駐留在記憶體中。最常用的一種方式是在呼叫sqlite3 open 的時候,www.cppcns.com資料庫檔名引數傳遞 memory 如 複製 如下 rc sqli...

SQLite記憶體資料庫簡單使用範例

include include include include sqlite3.h pragma comment lib,sqlite3.lib include include include codingconv.h int main int argc,char argv sql select f...