2009-04-25 104 views
32

有沒有人有在LAN(Windows或Linux)上的SMB共享上運行Sqlite數據庫的真實世界經驗?通過網絡共享的Sqlite

documentation中可以清楚的看出,這不是共享Sqlite數據庫的最快方式。

顯而易見的警告是它可能會很慢,而Sqlite只支持一次寫入數據庫的單個線程。因此,您的併發數會減少很多,因爲您的數據庫更新現在會阻止數據庫更長時間(數據通過網絡傳輸時數據庫將被鎖定)。

對於我的應用程序來說,我想要共享的數據量相當小,並且寫入不會太頻繁(幾乎每隔幾秒寫一次)。

我應該注意什麼?這可以工作嗎?

我知道這不是Sqlite的設計目的,我對基於Postgres/MySql/Sql Server的解決方案不太感興趣,因爲我試圖用最少的依賴關係讓應用盡可能輕。

相關鏈接:

sqlite mailing list,所以我想一個重要的問題是多麼不可靠是文件鎖的API通過SMB(Windows或Linux)

+1

看起來像Linux的桑巴可有機會鎖定啓用取決於它的配置。我越看待這個問題的使用這種解決方案不太舒服,它可以很容易地成爲一個支持噩夢 – 2009-04-25 08:59:14

回答

23

我的基於文件的數據庫的經驗(即那些沒有數據庫服務器進程),可以追溯到二十多年來,是,如果你嘗試共享他們,他們將不可避免地最終遭到損壞。我強烈建議你再看看MySQL。

請注意,我不是選擇SQLite - 我自己使用它,而不是共享數據庫。

+0

是的即時通訊與思想共享此信息在與對等網絡套接字的想法有太多的東西,可能會出現錯誤,嵌入數據分享網絡共享。 – 2009-04-25 09:25:07

8

好吧,我不偉大的sqlite的專家,但我相信,記錄/表的鎖定可能無法正常工作,並可能導致數據庫損壞。因爲由於沒有單個服務器維護中央鎖定,所以在不同的計算機上通過網絡共享相同文件的兩個sqlite dll實例可能無法正常工作。如果數據庫在同一臺機器上打開,sqlite可能會使用由操作系統提供的文件級鎖定來保持完整性,但我懷疑它是否可以在網絡共享上正常工作。

6

「如果你有一個超過 網絡訪問一個公共數據庫許多客戶端程序,你應該考慮使用一個客戶端/服務器數據庫引擎 而不是SQLite的,SQLite的將工作在網絡文件系統,但 因爲網絡文件系統實現的文件鎖定邏輯包含錯誤(在Unix和Windows上均爲 )如果文件鎖定不能像它應該那樣工作,它可能是 可能爲兩個或更多的客戶端程序修改相同部分的 相同的數據庫在同一時間e,導致數據庫損壞。 因爲這個問題是由底層文件系統 實現中的錯誤引起的,所以SQLite沒有辦法阻止它。「

https://www.sqlite.org/whentouse.html

這也適用於任何類型的基於文件的數據庫,像Microsoft Access