讀取交易:https://www.sqlite.org/isolation.html可以在SQLite中長時間保持讀事務處於打開狀態嗎?
我們假設WAL已啓用,因此我們可以在一個步驟中讀取另一個正在寫入的數據。
我想達到的是這樣的。
我有兩個線程,一個是UI線程,有時會執行數據庫讀取,另一個是數據庫線程,執行數據庫讀取/寫入事務。
UI線程中的結果被高速緩存,有時會有不完整的信息,比如對於事物列表,我們只查詢列表的大小,或者只查詢該查詢的前10項,然後我們會在UI到達那個部分。
而在db線程上,我們將執行事務並記住所有更改,然後發佈(UI線程是looper線程)對UI線程的更改並逐步更新UI緩存,以便它儘可能少地阻塞UI線程可能。
問題是當db事務完成時,UI線程可能會在循環線程處理該消息之前觸發UI線程上的數據庫讀取,也是由於UI框架的某些限制工作,我們無法更新緩存,因爲UI線程正在使用它。
因此,我的想法是在UI線程上,在發生任何查詢之前,開始讀取事務(以延遲模式開始事務,並且此事務不會因爲沒有寫入而鎖定數據庫),則發生任何讀取UI線程將在此事務中發生,然後循環線程獲取更新信息,結束事務並更新緩存,然後開始另一個。因此,數據庫和緩存在UI線程中被轉換爲新狀態,並被同步。
因此,我可以保持一個長時間的讀取事務嗎?
並沒有性能影響的權利? – molikto
可能不是。但是可以肯定的是,你必須測量。 –