SQLcat和tomcat中的并发访问

时间:2012-02-01 12:11:29

标签: java sqlite tomcat database-connection tomcat6

我正在研究在Tomcat中部署的Wep应用程序中使用SQLite的可能性 谷歌搜索我找到了以下答案SQLite in Tomcat 6,其中说:

  

不幸的是,您无法在Tomcat上创建SQLite连接池   SQLite为每个用户提供了一个数据库文件

我不确定这是什么意思。

这是否意味着我无法通过Web应用程序的许多部分同时访问数据库文件? 或仅仅是对绩效的暗示?

我在这里很困惑。

2 个答案:

答案 0 :(得分:4)

SQLite DOES支持同一文件的多个读者,但只支持一个编写者。单个应用程序可以创建到同一数据库的多个连接。您提到的问题提到应用程序想要为每个用户创建一个单独的数据库,并为所有用户使用单个连接池。它与访问数据库本身无关。

SQLite在文件级锁定数据库,这意味着编写器将阻止所有读者访问数据库。您可以使用PRAGMA journal_mode = WAL使用预写日志来缓解此行为,即使作者正在进行修改,也可以让读者读取数据。

您应该检查write-ahead logging的优缺点,以确保您可以在Web应用程序中使用它。至少,您需要SQLite 3.7+,您的数据库必须与Web应用程序驻留在同一台计算机上。对于小情况,这可能是好的。

我同意Tichodroma,但SQLite并不适用于Web场或托管在单独的服务器上。

答案 1 :(得分:2)

  

这是否意味着我无法通过Web应用程序的许多部分同时访问数据库文件?

不,你不能。 SQLite并不适用于这种情况。

查看http://sqlite.org/whentouse.html

  

如果有许多客户端程序通过网络访问公共数据库,则应考虑使用客户端/服务器数据库引擎而不是SQLite。 SQLite将在网络文件系统上运行,但由于与大多数网络文件系统相关的延迟,性能不会很好。此外,许多网络文件系统实现的文件锁定逻辑包含错误(在Unix和Windows上)。如果文件锁定不能正常工作,则两个或多个客户端程序可能同时修改同一数据库的同一部分,从而导致数据库损坏。因为这个问题是由底层文件系统实现中的错误引起的,所以SQLite无法阻止它。

编辑:对于Java工作,我喜欢H2 Database。它不是SQLite,而是很好也很小。