2012-02-24 64 views
8

我知道不建議在網絡驅動器上使用Sqlite,原因有兩個:性能和由於網絡文件系統執行不當導致的數據損壞。如何通過Windows共享驅動器強大的SQLite

不過,我想探討使用Sqlite支持具有中央數據庫的多用戶應用程序的可能性。我們已經在單用戶機器上支持Sqlite,並且已經在多用戶設置上支持多個數據庫服務器(Oracle,PostgreSQL)。使用Sqlite進行多用戶設置可以方便地使用Windows共享驅動器(SMB)在現有IT基礎架構上進行輕量級安裝。

我們不關心績效,所以我們準備付出所需的價格來避免腐敗。引用http://www.sqlite.org/atomiccommit.html,第9.1節:

但是如果你必須使用一個網絡文件系統來存儲SQLite數據庫 文件,可以考慮使用一個輔助鎖定機構,以防止 同時寫入同一個數據庫,即使本地文件系統 鎖定機制故障。

我期待的提示和建議來實現這樣的機制,或者更一般地說,在提示,以避免在Windows共享驅動器中使用SQLite的問題。例如,我正在考慮以下腦死鎖定方法:在任何(非只讀)SQLite查詢之前,嘗試在同一個共享文件夾上創建一個空文件,並保持其打開狀態直到查詢;通常,任何其他Windows進程試圖創建一個同名文件,而它仍然是開放的會阻塞或失敗。這會起作用嗎?有什麼更好的?

+1

SQLite不是數據庫服務器的替代品。 – 2012-02-24 19:12:52

+2

我知道,正如我所說,我們已經爲我們的應用程序支持幾種數據庫服務器。我們出售商業應用程序;我們的用戶總是可以使用共享驅動器,但必須依靠他們的IT和DBA團隊來創建和管理一個具有2-10個用戶的小型設置的Oracle實例,這對他們來說是非常昂貴的。我們只是尋找更輕量級的東西來簡化部署(用於測試甚至是生產)。 – 2012-02-24 19:45:58

+0

難道你不能只打開一個非共享讀/寫文件?據推測,每個客戶端應用程序都有自己的數據副本,所以這意味着當另一個客戶端更新數據庫時,他們將無法獲得更新的副本。如果數據庫不是太大,最終可能會有很多等待,但它應該可以工作。 – roryok 2014-08-22 08:11:27

回答

2

另一個建議是編寫一個位於SQLite文件上的API併爲你進行鎖定。

相關問題