Sqlite的多線程問題

來源:互聯網
上載者:User

SQLite是安全執行緒的嗎?

有時候是的。為了安全執行緒,SQLite 必須在編譯時間把 THREADSAFE 預先處理宏設為1。在預設的發行的已編譯版本中 Windows 版的是安全執行緒的,而 Linux 版的不是。如果要求安全執行緒,Linux 版的要重新編譯。

“安全執行緒”是指二個或三個線程可以同時調用獨立的不同的sqlite3_open() 返回的"sqlite3"結構。而不是在多線程中同時使用同一個 sqlite3 結構指標。

一個sqlite3結構只能在調用 sqlite3_open建立它的那個進程中使用。你不能在一個線程中開啟一個資料庫然後把指標傳遞給另一個線程使用。這是因為大多數多線程系統的限制(或 Bugs?)例如RedHat9上。在這些有問題的系統上,一個線程建立的fcntl()鎖不能由另一個線程刪除或修改。由於SQLite依賴fcntl()鎖來進行並發控制,當線上程間傳遞資料庫連接時會出現嚴重的問題。

也許在Linux下有辦法解決fcntl()鎖的問題,但那十分複雜並且對於正確性的測試將是極度困難的。因此,SQLite目前不允許線上程間共用控制代碼。

在UNIX下,你不能通過一個 fork() 系統調用把一個開啟的 SQLite 資料庫放入子過程中,否則會出錯。

 

 

多進程可以同時開啟同一個資料庫,也可以同時 SELECT 。但只有一個進程可以立即改資料庫。

SQLite 使用讀/寫鎖定來控制資料庫訪問。(Win95/98/ME 作業系統缺乏讀/寫鎖定支援,在低於 2.7.0 的版本中,這意味著在 windows 下在同一時間內只能有一個進程讀資料庫。在版本 2.7.0 中 這個問題通過在 windows 介面代碼中執行一個使用者間隔幾率讀寫鎖定策略解決了。) 但如果資料庫檔案在一個 NFS 檔案系統中,控制並發讀書的鎖定機制可以會出錯。因為 NFS 的fcntl() 檔案鎖定有時會出問題。如果有多進程可能並發讀資料庫則因當避免把資料庫檔案放在 NFS 檔案系統中。根據微軟的文檔,如果不運行 Share.exe 背景程式則 FAT 檔案系統中的鎖定可能不工作。對 Windows 非常有經驗的人告訴我網路檔案的鎖定有許多問題並且不可靠。如果是這樣,在2個或以上 Windows 系統中共用一個 SQLite 資料庫檔案會導致不可預知的問題。

我們知道沒有其他的嵌入式 SQL資料庫引擎比SQLite支援更多的並發性。 SQLite允許多進程 同時開啟和讀取資料庫。任何一個進程需要寫入時,整個資料庫將在這一過程中被鎖定。但這一般僅耗時幾毫秒。其他進程只需等待然後繼續其他事務。其他嵌入式SQL資料庫引擎往往只允許單進程訪問資料庫。

但是,client/server 型的資料庫引擎 (如 PostgreSQL, MySQL, 以及 Oracle) 通常支援更高的並發度,並支援多進程同時寫入同一個資料庫。由於總有一個控制良好的伺服器協調資料庫的訪問,這才保證了以上特性的實現。如果你的應用需要很高的並發度,你應該考慮使用client/server資料庫。事實上,經驗告訴我們大多數應用所需要的並發度比他們的設計者們想象的要少得多。

當 SQLite 嘗試操作一個被另一個進程鎖定的檔案時,預設的行為是返回 SQLITE_BUSY。你可以用 C代碼更改這一行為。 使用 sqlite3_busy_handler() 或sqlite3_busy_timeout() API函數。

如果兩個或更多進程同時開啟同一個資料庫,其中一個進程建立了新的表或索引,則其它進程可能不能立即看見新的表。其它進程可能需要關閉並重新連結資料庫。

--------------------------------------------------------------------------------

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.