在网络共享上使用sqlite

时间:2011-08-21 11:31:27

标签: java sqlite client-server network-share

我们在基于Windows桌面的Java应用程序上使用SQLite(Xerial JDBC驱动程序)。现在我们转到同一应用程序的客户端 - 服务器版本,其中多个基于Java的Swing客户端将连接到指定服务器Windows PC上的相同SQLite db文件。如果我错了,请纠正我:

  1. 通过网络共享保留SQLite数据库文件是在此模式下使用SQLite的唯一选择吗?还是有其他一些我不知道的解决方案?
  2. 使用SQLite会增加DB损坏的可能性吗?
  3. 我没有看到很多并发更新操作。将有5-10个客户试图阅读&更新相同的数据库。在这种情况下,使用entperise grade DB(MySQL,Postgres)会更好吗?

2 个答案:

答案 0 :(得分:2)

来自one quoted之前的常见问题解答段落:

  

SQLite使用读取器/写入器锁来控制对数据库的访问。   (在Win95 / 98 / ME下,缺少对读写器锁的支持,a   改为使用概率模拟。)但要谨慎:这个   如果数据库文件是,锁定机制可能无法正常工作   保存在NFS文件系统上。这是因为fcntl()文件锁定是   在许多NFS实现上打破了。你应该避免使用SQLite   NFS上的数据库文件,如果多个进程可能尝试访问   同时提交文件。在Windows上,微软的文档说明了这一点   如果您没有运行,则锁定在FAT文件系统下可能无法正常工作   Share.exe守护程序。对Windows有很多经验的人   告诉我,网络文件的文件锁定是非常错误的,而不是   可信。如果他们说的是真的,那就共享一个SQLite数据库   两台或多台Windows机器之间可能会出现意外问题。

我不会在网络上共享一个SQLite数据库文件,因为看起来你会自己购买令人讨厌的同步问题而难以重现数据损坏。

换句话说,您正在使用通用文件共享机制来替换另一个DBMS的服务器功能。这些其他DBMS经过专门测试和现场强化,可以进行多个客户端访问,尽管SQLite有很多优点,但这不是其中之一。

答案 1 :(得分:0)

这是FAQ

  

[...]我们知道没有其他嵌入式SQL数据库引擎   支持与SQLite一样多的并发性。 SQLite允许多个   使数据库文件立即打开的进程,以及多个数据库文件   进程一次读取数据库。当任何过程想要   写,它必须锁定整个数据库文件的持续时间   更新。但这通常只需要几毫秒。其他   进程只是等待作者完成然后继续他们的   商业。其他嵌入式SQL数据库引擎通常只允许使用   单个进程一次连接到数据库。 [...]

另请阅读SQLite is serverless

SQLite是否足以满足您的需求是不可能的。如果您有长时间运行的更新事务,则锁定整个数据库可能是一个严重的问题。由于您使用JDBC来访问它,因此在必要时切换到另一个数据库引擎应该没有太多问题。