2012-02-01 56 views
0

我正在研究在部署在Tomcat中的Wep應用程序中使用SQLite的可能性。
谷歌搜索,我發現了以下的答案SQLite in Tomcat 6它說:SQLite和tomcat中的併發訪問

可惜你不能創建Tomcat上的SQLite連接池 的SQLite針對每個用戶

數據庫文件,我不知道該怎麼做這個意思。

這是否表示我的Web應用程序的許多部分不能同時訪問數據庫文件?
或者只是表現上的含義?

我很困惑。

回答

2

這是否意味着我的Web應用程序的很多部分不能同時訪問數據庫文件?

不,你不能。 SQLite並不意味着在這種情況下使用。

http://sqlite.org/whentouse.html

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

編輯:對於Java工作,我喜歡H2 Database。它不是SQLite,但又好又小。

+0

很奇怪的說法。這似乎是矛盾的,儘管他們聲稱在同一個鏈接中SQLite適合中型網站。這不矛盾嗎? – Cratylus 2012-02-01 12:33:58

+0

這很大程度上取決於你如何*連接到SQLite數據庫。連接池是一種連接方式,通常用於重載網站。 – 2012-02-01 12:35:09

+0

'如果您有許多客戶端程序通過網絡訪問公用數據庫,則應考慮使用客戶端/服務器數據庫引擎而不是SQLite.'.中等級別的網站不屬於此類別? – Cratylus 2012-02-01 12:37:38

4

SQLite是否支持多個讀者對同一個文件,但只有一個作家。單個應用程序可以創建到同一個數據庫的多個連接。你提到的問題提到,應用程序想爲每個用戶創建一個單獨的數據庫,併爲它們使用單​​個連接池。它與訪問數據庫本身無關。

SQLite在文件級別鎖定數據庫,這意味着作者將阻止所有讀者訪問數據庫。您可以通過使用PRAGMA journal_mode = WAL使用預寫日誌來緩解此行爲,即使作者正在進行修改,讀寫器也可以讀取數據。

您應該檢查write-ahead logging的優缺點,以確保您可以在Web應用程序中使用它。至少,您需要SQLite 3.7+,並且您的數據庫必須與您的Web應用程序駐留在同一臺計算機上。對於小場景,這可能是可以的。

雖然我會同意Tichodroma,但SQLite並不適用於Web農場或託管在單獨的服務器上。