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...