我们在基于windows桌面的Java应用程序上使用SQLite (Xerial驱动程序)。现在,我们将转移到同一个应用程序的客户机-服务器版本,其中多个基于Java的Swing客户端将连接到指定服务器Windows上的同一个SQLite db文件。如果我错了,请纠正我:
我没有看到很多并发的更新操作。将有5-10个客户端试图读取和更新相同的DB。在这种情况下,使用entperise等级DB (MySQL,Postgres)更好吗?
发布于 2011-08-21 11:58:03
来自于一位被引用前的FAQ段落
SQLite使用读取器/写入器锁来控制对数据库的访问。(在缺乏对读取器/写入器锁的支持的Win95 95/98/ME下,使用的是概率模拟。)但请注意:如果数据库文件保存在NFS文件系统上,则此锁定机制可能无法正常工作。这是因为fcntl()文件锁定在许多NFS实现上中断。如果多个进程可能试图同时访问该文件,则应避免将SQLite数据库文件放在NFS上。在Windows上,微软的文档说,如果您没有运行Share.exe守护进程,那么锁在胖文件系统下可能无法工作。对Windows有丰富经验的人告诉我,网络文件的文件锁定是非常错误的,而且不可靠。如果他们说的是真的,那么在两台或多台Windows计算机之间共享一个SQLite数据库可能会导致意想不到的问题。
我不会在网络上共享一个SQLite数据库文件,因为看起来您将为自己购买严重的同步问题,从而很难再现数据损坏。
换句话说,您正在使用通用文件共享机制来替代另一个DBMS的服务器功能。对于多个客户端访问,这些数据库管理系统都经过了专门的测试和现场强化,尽管SQLite有很大的优点,但这并不是其中之一。
发布于 2011-08-21 11:45:22
这是一个常见问题
..。我们知道没有其他嵌入式SQL数据库引擎像SQLite那样支持并发性。SQLite允许多个进程同时打开数据库文件,并允许多个进程同时读取数据库。当任何进程想要写入时,它必须在更新期间锁定整个数据库文件。但这通常只需要几毫秒。其他流程只需等待作者完成,然后继续他们的业务。其他嵌入式SQL数据库引擎通常只允许一个进程同时连接到数据库。..。
也可以阅读SQLite是无服务器的。
SQLite是否满足您的需求是不可能的。如果您有长期运行的update事务,锁定整个数据库可能是一个严重的问题。由于您正在使用JDBC来访问它,如果有必要的话,切换到另一个数据库引擎应该不会有太多问题。
https://stackoverflow.com/questions/7137994
复制相似问题