2011-11-01 62 views
1

我的sqlite數據庫很簡單:一個表,兩列。一列是圖像的URL,另一列是圖像的字節。Sqlite - 將插入操作阻止閱讀?

然後我有兩個線程。

一個線程(寫線程)正在下載一個非常大的圖像(比方說5MB)。當下載圖像時,線程將圖像的字節插入到db中。

另一個線程(讀線程)隨機查詢圖像,每循環1秒。

我的問題是:

請問「寫線程」阻塞「讀線程」有時候?

我已經設置了PRAGMA locking_mode=NORMAL;

我有這個問題,因爲我遭受阻塞,並認爲如果我將locking_mode設置爲NORMAL,阻塞應該不存在。

我的意思是,我希望它可以是這樣的:我有一個後臺線程只是處理寫在最低優先級。然後即使插入花費很多時間,例如10秒,閱讀線程也不會受到影響。

有沒有辦法做到這一點?或者我缺少什麼?

感謝

回答

4

使用WAL mode

+0

我已經使用PRAGMA journal_mode = WAL。這是相同的。當數據庫變大時,比如說5G,每個插入可能花費2-10秒,然後讀取線程被阻塞,並掛在那裏 – Jack

+0

您是否對所有線程使用相同的數據庫連接?如果是的話,你會阻止;你必須在每個線程中分別調用sqlite3_open。 –